mirror of
https://github.com/gnustep/libs-back.git
synced 2025-05-30 00:40:55 +00:00
Implement pattern colours for all backends.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/back/trunk@28850 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
d7dc549a3e
commit
3c8eab0c49
8 changed files with 361 additions and 9 deletions
|
@ -650,3 +650,72 @@ draw_info_t ART_DI;
|
|||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation ARTGState (PatternColor)
|
||||
typedef struct _SavedClip {
|
||||
int clip_x0,clip_y0,clip_x1,clip_y1;
|
||||
BOOL all_clipped;
|
||||
int clip_sx,clip_sy;
|
||||
unsigned int *clip_span;
|
||||
unsigned int *clip_index;
|
||||
int clip_num_span;
|
||||
} SavedClip;
|
||||
|
||||
- (void *) saveClip
|
||||
{
|
||||
SavedClip *savedClip = malloc(sizeof(SavedClip));
|
||||
int i;
|
||||
|
||||
savedClip->clip_x0 = clip_x0;
|
||||
savedClip->clip_y0 = clip_y0;
|
||||
savedClip->clip_x1 = clip_x1;
|
||||
savedClip->clip_y1 = clip_y1;
|
||||
savedClip->all_clipped = all_clipped;
|
||||
savedClip->clip_sx = clip_sx;
|
||||
savedClip->clip_sy = clip_sy;
|
||||
if (clip_num_span == 0)
|
||||
{
|
||||
savedClip->clip_span = NULL;
|
||||
savedClip->clip_index = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
savedClip->clip_span = malloc(sizeof(int) * clip_num_span);
|
||||
savedClip->clip_index = malloc(sizeof(int) * clip_num_span);
|
||||
for (i = 0; i < clip_num_span; i++)
|
||||
{
|
||||
savedClip->clip_span[i] = clip_span[i];
|
||||
}
|
||||
for (i = 0; i < clip_num_span; i++)
|
||||
{
|
||||
savedClip->clip_index[i] = clip_index[i];
|
||||
}
|
||||
}
|
||||
savedClip->clip_num_span = clip_num_span;
|
||||
|
||||
return savedClip;
|
||||
}
|
||||
|
||||
- (void) restoreClip: (void *)saved
|
||||
{
|
||||
SavedClip *savedClip = (SavedClip *)saved;
|
||||
|
||||
clip_x0 = savedClip->clip_x0;
|
||||
clip_y0 = savedClip->clip_y0;
|
||||
clip_x1 = savedClip->clip_x1;
|
||||
clip_y1 = savedClip->clip_y1;
|
||||
all_clipped = savedClip->all_clipped;
|
||||
clip_sx = savedClip->clip_sx;
|
||||
clip_sy = savedClip->clip_sy;
|
||||
if (clip_span)
|
||||
{
|
||||
free(clip_span);
|
||||
free(clip_index);
|
||||
}
|
||||
clip_span = savedClip->clip_span;
|
||||
clip_index = savedClip->clip_index;
|
||||
clip_num_span = savedClip->clip_num_span;
|
||||
free(savedClip);
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -952,11 +952,23 @@ static void clip_svp_callback(void *data, int y, int start,
|
|||
|
||||
- (void) DPSeofill
|
||||
{
|
||||
if (pattern != nil)
|
||||
{
|
||||
[self eofillPath: path withPattern: pattern];
|
||||
return;
|
||||
}
|
||||
|
||||
[self _fill: ART_WIND_RULE_ODDEVEN];
|
||||
}
|
||||
|
||||
- (void) DPSfill
|
||||
{
|
||||
if (pattern != nil)
|
||||
{
|
||||
[self fillPath: path withPattern: pattern];
|
||||
return;
|
||||
}
|
||||
|
||||
[self _fill: ART_WIND_RULE_NONZERO];
|
||||
}
|
||||
|
||||
|
@ -969,6 +981,13 @@ static void clip_svp_callback(void *data, int y, int start,
|
|||
|
||||
if (!wi || !wi->data) return;
|
||||
if (all_clipped) return;
|
||||
|
||||
if (pattern != nil)
|
||||
{
|
||||
[self fillRect: NSMakeRect(x, y, w, h) withPattern: pattern];
|
||||
return;
|
||||
}
|
||||
|
||||
if (!fill_color[3]) return;
|
||||
|
||||
axis_aligned = [self _axis_rectangle: x : y : w : h vpath: vp
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue