Complete set of Cairo plotters (from gtk_plotters.c).
All except the polygon plotter - as the graphics.library implementation has problems - are disabled, but can be enabled by defining NS_AMIGA_CAIRO_ALL. Using only the Cairo plotters is much slower than using only the graphics.library plotters (especially clipping which is adding several seconds to rendering with Cairo) and the default "mixed" Cairo state is the recommended configuration for now. svn path=/trunk/netsurf/; revision=5944
This commit is contained in:
parent
605cf900b4
commit
e56aabc998
|
@ -114,6 +114,7 @@ bool ami_clg(colour c)
|
|||
bool ami_rectangle(int x0, int y0, int width, int height,
|
||||
int line_width, colour c, bool dotted, bool dashed)
|
||||
{
|
||||
#ifndef NS_AMIGA_CAIRO_ALL
|
||||
currp->PenWidth = line_width;
|
||||
currp->PenHeight = line_width;
|
||||
|
||||
|
@ -132,6 +133,19 @@ bool ami_rectangle(int x0, int y0, int width, int height,
|
|||
currp->PenWidth = 1;
|
||||
currp->PenHeight = 1;
|
||||
currp->LinePtrn = PATT_LINE;
|
||||
#else
|
||||
ami_cairo_set_colour(glob.cr,c);
|
||||
if (dotted) ami_cairo_set_dotted(glob.cr);
|
||||
else if (dashed) ami_cairo_set_dashed(glob.cr);
|
||||
else ami_cairo_set_solid(glob.cr);
|
||||
|
||||
if (line_width == 0)
|
||||
line_width = 1;
|
||||
|
||||
cairo_set_line_width(glob.cr, line_width);
|
||||
cairo_rectangle(glob.cr, x0, y0, width, height);
|
||||
cairo_stroke(glob.cr);
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -139,6 +153,7 @@ bool ami_rectangle(int x0, int y0, int width, int height,
|
|||
bool ami_line(int x0, int y0, int x1, int y1, int width,
|
||||
colour c, bool dotted, bool dashed)
|
||||
{
|
||||
#ifndef NS_AMIGA_CAIRO_ALL
|
||||
currp->PenWidth = width;
|
||||
currp->PenHeight = width;
|
||||
|
||||
|
@ -154,13 +169,27 @@ bool ami_line(int x0, int y0, int x1, int y1, int width,
|
|||
currp->PenWidth = 1;
|
||||
currp->PenHeight = 1;
|
||||
currp->LinePtrn = PATT_LINE;
|
||||
#else
|
||||
ami_cairo_set_colour(glob.cr,c);
|
||||
if (dotted) ami_cairo_set_dotted(glob.cr);
|
||||
else if (dashed) ami_cairo_set_dashed(glob.cr);
|
||||
else ami_cairo_set_solid(glob.cr);
|
||||
|
||||
if (width == 0)
|
||||
width = 1;
|
||||
|
||||
cairo_set_line_width(glob.cr, width);
|
||||
cairo_move_to(glob.cr, x0, y0 - 0.5);
|
||||
cairo_line_to(glob.cr, x1, y1 - 0.5);
|
||||
cairo_stroke(glob.cr);
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ami_polygon(int *p, unsigned int n, colour fill)
|
||||
{
|
||||
int k;
|
||||
#ifndef NS_AMIGA_CAIRO
|
||||
ULONG cx,cy;
|
||||
|
||||
//DebugPrintF("poly\n");
|
||||
|
@ -179,17 +208,36 @@ bool ami_polygon(int *p, unsigned int n, colour fill)
|
|||
|
||||
AreaEnd(currp);
|
||||
BNDRYOFF(currp);
|
||||
#else
|
||||
ami_cairo_set_colour(glob.cr,fill);
|
||||
ami_cairo_set_solid(glob.cr);
|
||||
|
||||
cairo_set_line_width(glob.cr, 0);
|
||||
cairo_move_to(glob.cr, p[0], p[1]);
|
||||
for (k = 1; k != n; k++) {
|
||||
cairo_line_to(glob.cr, p[k * 2], p[k * 2 + 1]);
|
||||
}
|
||||
cairo_fill(glob.cr);
|
||||
cairo_stroke(glob.cr);
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ami_fill(int x0, int y0, int x1, int y1, colour c)
|
||||
{
|
||||
//DebugPrintF("fill %ld,%ld,%ld,%ld\n",x0,y0,x1,y1);
|
||||
|
||||
#ifndef NS_AMIGA_CAIRO_ALL
|
||||
p96RectFill(currp,x0,y0,x1-1,y1-1,
|
||||
p96EncodeColor(RGBFB_A8B8G8R8,c));
|
||||
#else
|
||||
ami_cairo_set_colour(glob.cr,c);
|
||||
ami_cairo_set_solid(glob.cr);
|
||||
|
||||
cairo_set_line_width(glob.cr, 0);
|
||||
cairo_rectangle(glob.cr, x0, y0, x1 - x0, y1 - y0);
|
||||
cairo_fill(glob.cr);
|
||||
cairo_stroke(glob.cr);
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -214,6 +262,11 @@ bool ami_clip(int x0, int y0, int x1, int y1)
|
|||
if(reg) DisposeRegion(reg);
|
||||
}
|
||||
|
||||
#ifdef NS_AMIGA_CAIRO_ALL
|
||||
cairo_reset_clip(glob.cr);
|
||||
cairo_rectangle(glob.cr, x0, y0, x1 - x0, y1 - y0);
|
||||
cairo_clip(glob.cr);
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -261,6 +314,7 @@ bool ami_text(int x, int y, const struct css_style *style,
|
|||
|
||||
bool ami_disc(int x, int y, int radius, colour c, bool filled)
|
||||
{
|
||||
#ifndef NS_AMIGA_CAIRO_ALL
|
||||
SetRPAttrs(currp,RPTAG_APenColor,p96EncodeColor(RGBFB_A8B8G8R8,c),
|
||||
TAG_DONE);
|
||||
|
||||
|
@ -273,7 +327,22 @@ bool ami_disc(int x, int y, int radius, colour c, bool filled)
|
|||
{
|
||||
DrawEllipse(currp,x,y,radius,radius); // NB: does not support fill, need to use AreaCircle for that
|
||||
}
|
||||
#else
|
||||
ami_cairo_set_colour(glob.cr,c);
|
||||
ami_cairo_set_solid(glob.cr);
|
||||
|
||||
if (filled)
|
||||
cairo_set_line_width(glob.cr, 0);
|
||||
else
|
||||
cairo_set_line_width(glob.cr, 1);
|
||||
|
||||
cairo_arc(glob.cr, x, y, radius, 0, M_PI * 2);
|
||||
|
||||
if (filled)
|
||||
cairo_fill(glob.cr);
|
||||
|
||||
cairo_stroke(glob.cr);
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -352,7 +421,7 @@ bool ami_bitmap(int x, int y, int width, int height,
|
|||
|
||||
if(GfxBase->lib_Version >= 53) // AutoDoc says v52, but this function isn't in OS4.0, so checking for v53 (OS4.1)
|
||||
{
|
||||
CompositeTags(COMPOSITE_Src_Over_Dest,tbm,scaledbm,
|
||||
CompositeTags(COMPOSITE_Src,tbm,scaledbm,
|
||||
COMPTAG_ScaleX,COMP_FLOAT_TO_FIX(width/bitmap->width),
|
||||
COMPTAG_ScaleY,COMP_FLOAT_TO_FIX(height/bitmap->height),
|
||||
COMPTAG_Flags,COMPFLAG_IgnoreDestAlpha,
|
||||
|
|
Loading…
Reference in New Issue