Skip to content

Commit ca70043

Browse files
authored
Merge pull request #5 from jforget/dev
Dev Use style when drawing lines
2 parents 7ccd1e2 + 72a5b8a commit ca70043

10 files changed

Lines changed: 62 additions & 24 deletions

File tree

Changes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Revision history for GD::Raw
55
0.6 2026-04-xx
66
- Add function `gdImagePngPtr` to load PNG data into a blob instead of into a file
77
- Add a few other functions `gdImageXxxPtr` for other formats
8+
- Add the `gdImageSetStyle` function to improve the drawing of lines
89

910
0.5 2026-03-31T19:55:11+02:00
1011
- Add functions `gdImageEllipse` and `gdImageRectangle` to draw outline

lib/GD/Raw.rakumod

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@ has int32 ($.alpha0, $.alpha1, $.alpha2, $.alpha3, $.alpha4, $.alpha5, $.alpha6,
108108
}
109109
class gdImagePtr is repr('CStruct') is gdImageStruct { }
110110

111+
constant gdStyled is export = -2;
112+
constant gdTransparent is export = -6;
111113
constant gdAntiAliased is export = -7;
112114

113115
sub gdImageSX($img) is export {
@@ -303,6 +305,10 @@ sub gdImageNegate(gdImagePtr $src)
303305
returns int32
304306
is native(LIB) is export {*}
305307

308+
sub gdImageSetStyle(gdImagePtr $im, CArray[int32], int32 $no-of-pixels)
309+
#returns void
310+
is native(LIB) is export {*}
311+
306312
sub gdImageSetThickness(gdImagePtr $im, int32 $thickness)
307313
#returns void
308314
is native(LIB) is export {*}
@@ -686,6 +692,8 @@ L<C<gdImageFilledPolygon>|https://libgd.github.io/manuals/2.3.3/files/gd-c.html#
686692
687693
=head3 Other
688694
695+
L<C<gdImageSetStyle>|https://libgd.github.io/manuals/2.3.3/files/gd-c.html#gdImageSetStyle>
696+
689697
L<C<gdImageSetThickness>|https://libgd.github.io/manuals/2.3.3/files/gd-c.html#gdImageSetThickness>
690698
691699
L<C<gdImageSetAntiAliased>|https://libgd.github.io/manuals/2.3.3/files/gd-c.html#gdImageSetAntiAliased>
@@ -877,4 +885,6 @@ This library is free software; you can redistribute it and/or modify it under th
877885
878886
=end pod
879887
888+
# For Emacs users: place the cursor after the closing parens and type C-x C-e
889+
# (setq-local tab-width 4)
880890
# vim: expandtab shiftwidth=4

xt/gdCopyBlurred.rakutest

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,4 +169,6 @@ skip-rest "too old libgd" if $major == 2 and $minor < 2;
169169
do_test();
170170
do_crosstest();
171171

172+
# For Emacs users: place the cursor after the closing parens and type C-x C-e
173+
# (setq-local tab-width 4)
172174
# vim: expandtab shiftwidth=4

xt/gdTrivialResize.rakutest

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,4 +92,6 @@ skip-rest "too old libgd" if $major == 2 and $minor < 2;
9292
do_test(300, 300, 600, 600);
9393
#do_test(3200, 2133, 640, 427); # Skipped. Takes forever.
9494

95+
# For Emacs users: place the cursor after the closing parens and type C-x C-e
96+
# (setq-local tab-width 4)
9597
# vim: expandtab shiftwidth=4

xt/gdimagepixelate.rakutest

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,6 @@ $im = gdImageCreateTrueColor(WIDTH, WIDTH);
7373
testPixelate($im);
7474
gdImageDestroy($im);
7575

76+
# For Emacs users: place the cursor after the closing parens and type C-x C-e
77+
# (setq-local tab-width 4)
7678
# vim: expandtab shiftwidth=4

xt/gdimagepngptr.rakutest

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,6 @@ $blob = blob-from-pointer($ptr, elems => $size, type => Blob[int8]);
4343
my $png9 = MIME::Base64.encode($blob);
4444
gdFree($ptr);
4545

46-
$ptr = gdImageJpegPtr($im, $size, -1);
47-
$blob = blob-from-pointer($ptr, elems => $size, type => Blob[int8]);
48-
my $jpeg = MIME::Base64.encode($blob);
49-
gdFree($ptr);
50-
5146
$ptr = gdImageGifPtr($im, $size);
5247
$blob = blob-from-pointer($ptr, elems => $size, type => Blob[int8]);
5348
my $gif = MIME::Base64.encode($blob);
@@ -73,8 +68,6 @@ my $test = qq :to/EOF/;
7368
<img src='data:image/png;base64,$png0'>
7469
<h1>Embedded PNG data (compression 9)</h1>
7570
<img src='data:image/png;base64,$png9'>
76-
<h1>Embedded JPEG data</h1>
77-
<img src='data:image/png;base64,$jpeg'>
7871
<h1>Embedded GIF data</h1>
7972
<img src='data:image/png;base64,$gif'>
8073
<h1>Embedded BMP data</h1>
@@ -84,7 +77,6 @@ my $test = qq :to/EOF/;
8477
</body>
8578
</html>
8679
EOF
87-
gdFree($ptr);
8880
my $ref = $*PROGRAM.sibling("ported-gdimagepngptr/gd-image-xxx-ptr.html").IO.slurp;
8981
ok $test eq $ref;
9082

xt/gdimagesetstyle.rakutest

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# -*- encoding: utf-8; indent-tabs-mode: nil -*-
2+
use Test;
3+
use GD::Raw;
4+
use NativeCall;
5+
6+
use lib $*PROGRAM.parent;
7+
use gdtest;
8+
9+
plan 1;
10+
11+
my $width = 120;
12+
my $height = 50;
13+
my $im = gdImageCreate($width, $height);
14+
LEAVE gdImageDestroy($im) if $im;
15+
16+
my $white = gdImageColorAllocate($im, 0xff, 0xff, 0xff);
17+
my $black = gdImageColorAllocate($im, 0, 0, 0);
18+
my $red = gdImageColorAllocate($im, 255, 0, 0);
19+
my $blue = gdImageColorAllocate($im, 0, 0, 255);
20+
21+
my @style := CArray[int32].new;
22+
@style[0] = $red;
23+
@style[1] = $red;
24+
@style[2] = gdTransparent;
25+
@style[3] = gdTransparent;
26+
27+
gdImageSetStyle($im, @style, 4);
28+
gdImageLine($im, 10, 10, 100, 10, gdStyled);
29+
30+
for (0..5) -> $i {
31+
@style[$i ] = $blue;
32+
@style[$i + 6] = gdTransparent;
33+
}
34+
gdImageSetStyle($im, @style, 12);
35+
gdImageLine($im, 10, 20, 100, 20, gdStyled);
36+
gdImageLine($im, 10, 30, 100, 40, gdStyled);
37+
38+
ok gdAssertImageEqualsToFile
39+
$*PROGRAM.sibling("ported-gdimagesetstyle/gdimagestyle0.png"),
40+
$im
41+
;
42+
43+
# vim: expandtab shiftwidth=4

xt/gdtest.rakumod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,4 +211,6 @@ sub gdTestImageCompareToImage($file, $line, $message,
211211
1
212212
}
213213

214+
# For Emacs users: place the cursor after the closing parens and type C-x C-e
215+
# (setq-local tab-width 4)
214216
# vim: expandtab shiftwidth=4

xt/ported-gdimagepngptr/gd-image-xxx-ptr.html

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,6 @@ <h1>Embedded PNG data (compression 9)</h1>
1313
<img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKAgMAAADwXCcuAAAACVBMVEX/////AAAAAP+3l+0cAAAA
1414
CXBIWXMAAA7EAAAOxAGVKw4bAAAALElEQVQI12NwYFBgEGBoYGBhYmBg5GBgYEgA4gkMDEwsDAwc
1515
jAxAWQegrAAAOaMC7//tcaYAAAAASUVORK5CYII='>
16-
<h1>Embedded JPEG data</h1>
17-
<img src='data:image/png;base64,/9j/4AAQSkZJRgABAQEAYABgAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
18-
SlBFRyB2NjIpLCBkZWZhdWx0IHF1YWxpdHkK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMP
19-
FB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEc
20-
ITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgA
21-
CgAKAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMC
22-
BAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYn
23-
KCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeY
24-
mZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5
25-
+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwAB
26-
AgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpD
27-
REVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip
28-
qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMR
29-
AD8A9TvLyfTLp9M0yTZpyY+1XYAYaUCMhQDw2QQQDkRAhmBjKrWh/wAIZ4YPMnh/TJpD96We1SWR
30-
z3ZnYFmY9SSSSeSaPBnPgjQ5DzJNYwzSMeryOgZ3J7szEsSeSSSeteH6/r+s2PiPVLOz1e/t7WC7
31-
lihhhuXRI0VyFVVBwAAAAB0rSvXnhZunTdkrrR2vb+tF0PQwuF+u3lJ2a+d7/r3fX13/AP/Z'>
3216
<h1>Embedded GIF data</h1>
3317
<img src='data:image/png;base64,R0lGODdhCgAKAJEAAP////8AAAAA/wAAACwAAAAACgAKAAACFQyOJ2AJe5pyDVLrhExwvyRh0edE
3418
BQA7'>
150 Bytes
Loading

0 commit comments

Comments
 (0)