* removed the special font renderer which was actually

the same as the normal one (one less renderer to update
  the color of)
* added a special B_OP_COPY implementation for text, which
  is in fact what the implementation was until now, so
  just like on R5, you have to specify the correct low color
  or you will see artifacts for the anti-aliased pixels
* implemented B_OP_COPY just like B_OP_OVER (only it draws
  the low color too like it should). So all apps that
  used B_OP_COPY to draw anything can continue to do so
  without having to worry about the low color, it will
  be anti-aliased against the actual background instead of
  the low color (which made especially no sense when drawing
  with the low color). Although this change makes it a bit
  slower to use B_OP_COPY, Haiku is now much more compatible.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17117 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stephan Aßmus
2006-04-12 21:02:59 +00:00
parent 82081c70ea
commit b6a33e1d41
10 changed files with 228 additions and 86 deletions
+26 -31
View File
@@ -70,8 +70,7 @@ Painter::Painter()
fPackedScanline(NULL), fPackedScanline(NULL),
fRasterizer(NULL), fRasterizer(NULL),
fRenderer(NULL), fRenderer(NULL),
fFontRendererSolid(NULL), fRendererBin(NULL),
fFontRendererBin(NULL),
fLineProfile(), fLineProfile(),
fSubpixelPrecise(false), fSubpixelPrecise(false),
@@ -79,6 +78,7 @@ Painter::Painter()
fClippingRegion(new BRegion()), fClippingRegion(new BRegion()),
fValidClipping(false), fValidClipping(false),
fDrawingMode(B_OP_COPY), fDrawingMode(B_OP_COPY),
fDrawingText(false),
fAlphaSrcMode(B_PIXEL_ALPHA), fAlphaSrcMode(B_PIXEL_ALPHA),
fAlphaFncMode(B_ALPHA_OVERLAY), fAlphaFncMode(B_ALPHA_OVERLAY),
fPenLocation(0.0, 0.0), fPenLocation(0.0, 0.0),
@@ -129,7 +129,7 @@ Painter::AttachToBuffer(RenderingBuffer* buffer)
buffer->BytesPerRow()); buffer->BytesPerRow());
fPixelFormat = new pixfmt(*fBuffer, fPatternHandler); fPixelFormat = new pixfmt(*fBuffer, fPatternHandler);
fPixelFormat->SetDrawingMode(fDrawingMode, fAlphaSrcMode, fAlphaFncMode); fPixelFormat->SetDrawingMode(fDrawingMode, fAlphaSrcMode, fAlphaFncMode, false);
fBaseRenderer = new renderer_base(*fPixelFormat); fBaseRenderer = new renderer_base(*fPixelFormat);
// attach our clipping region to the renderer, it keeps a pointer // attach our clipping region to the renderer, it keeps a pointer
@@ -159,9 +159,9 @@ Painter::AttachToBuffer(RenderingBuffer* buffer)
fRasterizer->gamma(agg::gamma_threshold(0.5)); fRasterizer->gamma(agg::gamma_threshold(0.5));
#endif #endif
// These are renderers needed for drawing text // possibly needed for drawing text (if the font is
fFontRendererSolid = new font_renderer_solid_type(*fBaseRenderer); // a one bit bitmap font, which is currently not supported yet)
fFontRendererBin = new font_renderer_bin_type(*fBaseRenderer); fRendererBin = new renderer_bin_type(*fBaseRenderer);
_SetRendererColor(fPatternHandler->HighColor().GetColor32()); _SetRendererColor(fPatternHandler->HighColor().GetColor32());
} }
@@ -261,11 +261,12 @@ Painter::SetPenSize(float size)
// SetPattern // SetPattern
void void
Painter::SetPattern(const pattern& p) Painter::SetPattern(const pattern& p, bool drawingText)
{ {
if (!(p == *fPatternHandler->GetR5Pattern())) { if (!(p == *fPatternHandler->GetR5Pattern()) || drawingText != fDrawingText) {
fPatternHandler->SetPattern(p); fPatternHandler->SetPattern(p);
_UpdateDrawingMode(); fDrawingText = drawingText;
_UpdateDrawingMode(fDrawingText);
// update renderer color if necessary // update renderer color if necessary
if (fPatternHandler->IsSolidHigh()) { if (fPatternHandler->IsSolidHigh()) {
@@ -925,13 +926,13 @@ Painter::DrawString(const char* utf8String, uint32 length,
BRect bounds(0.0, 0.0, -1.0, -1.0); BRect bounds(0.0, 0.0, -1.0, -1.0);
SetPattern(B_SOLID_HIGH); SetPattern(B_SOLID_HIGH, true);
if (fBuffer) { if (fBuffer) {
bounds = fTextRenderer->RenderString(utf8String, bounds = fTextRenderer->RenderString(utf8String,
length, length,
fFontRendererSolid, fRenderer,
fFontRendererBin, fRendererBin,
baseLine, baseLine,
fClippingRegion->Frame(), fClippingRegion->Frame(),
false, false,
@@ -955,8 +956,8 @@ Painter::BoundingBox(const char* utf8String, uint32 length,
static BRect dummy; static BRect dummy;
return fTextRenderer->RenderString(utf8String, return fTextRenderer->RenderString(utf8String,
length, length,
fFontRendererSolid, fRenderer,
fFontRendererBin, fRendererBin,
baseLine, dummy, true, penLocation, baseLine, dummy, true, penLocation,
delta); delta);
} }
@@ -1064,11 +1065,8 @@ Painter::_MakeEmpty()
delete fRenderer; delete fRenderer;
fRenderer = NULL; fRenderer = NULL;
delete fFontRendererSolid; delete fRendererBin;
fFontRendererSolid = NULL; fRendererBin = NULL;
delete fFontRendererBin;
fFontRendererBin = NULL;
} }
// _Transform // _Transform
@@ -1125,7 +1123,7 @@ Painter::_UpdateLineWidth()
// _UpdateDrawingMode // _UpdateDrawingMode
void void
Painter::_UpdateDrawingMode() Painter::_UpdateDrawingMode(bool drawingText)
{ {
// The AGG renderers have their own color setting, however // The AGG renderers have their own color setting, however
// almost all drawing mode classes ignore the color given // almost all drawing mode classes ignore the color given
@@ -1139,7 +1137,8 @@ Painter::_UpdateDrawingMode()
// has to be called so that all internal colors in the renderes // has to be called so that all internal colors in the renderes
// are up to date for use by the solid drawing mode version. // are up to date for use by the solid drawing mode version.
if (fPixelFormat) { if (fPixelFormat) {
fPixelFormat->SetDrawingMode(fDrawingMode, fAlphaSrcMode, fAlphaFncMode); fPixelFormat->SetDrawingMode(fDrawingMode, fAlphaSrcMode,
fAlphaFncMode, drawingText);
} }
} }
@@ -1167,16 +1166,12 @@ Painter::_SetRendererColor(const rgb_color& color) const
color.green / 255.0, color.green / 255.0,
color.blue / 255.0, color.blue / 255.0,
color.alpha / 255.0)); color.alpha / 255.0));
if (fFontRendererSolid) // TODO: bitmap fonts not yet correctly setup in AGGTextRenderer
fFontRendererSolid->color(agg::rgba(color.red / 255.0, // if (RendererBin)
color.green / 255.0, // RendererBin->color(agg::rgba(color.red / 255.0,
color.blue / 255.0, // color.green / 255.0,
color.alpha / 255.0)); // color.blue / 255.0,
if (fFontRendererBin) // color.alpha / 255.0));
fFontRendererBin->color(agg::rgba(color.red / 255.0,
color.green / 255.0,
color.blue / 255.0,
color.alpha / 255.0));
} }
+5 -5
View File
@@ -75,7 +75,8 @@ class Painter {
{ SetLowColor(color.GetColor32()); } { SetLowColor(color.GetColor32()); }
void SetPenSize(float size); void SetPenSize(float size);
void SetPattern(const pattern& p); void SetPattern(const pattern& p,
bool drawingText = false);
void SetPenLocation(const BPoint& location); void SetPenLocation(const BPoint& location);
BPoint PenLocation() const BPoint PenLocation() const
@@ -212,7 +213,7 @@ class Painter {
void _UpdateFont(); void _UpdateFont();
void _UpdateLineWidth(); void _UpdateLineWidth();
void _UpdateDrawingMode(); void _UpdateDrawingMode(bool drawingText = false);
void _SetRendererColor(const rgb_color& color) const; void _SetRendererColor(const rgb_color& color) const;
// drawing functions stroke/fill // drawing functions stroke/fill
@@ -273,9 +274,7 @@ class Painter {
scanline_packed_type* fPackedScanline; scanline_packed_type* fPackedScanline;
rasterizer_type* fRasterizer; rasterizer_type* fRasterizer;
renderer_type* fRenderer; renderer_type* fRenderer;
renderer_bin_type* fRendererBin;
font_renderer_solid_type* fFontRendererSolid;
font_renderer_bin_type* fFontRendererBin;
agg::line_profile_aa fLineProfile; agg::line_profile_aa fLineProfile;
@@ -286,6 +285,7 @@ class Painter {
BRegion* fClippingRegion; BRegion* fClippingRegion;
bool fValidClipping; bool fValidClipping;
drawing_mode fDrawingMode; drawing_mode fDrawingMode;
bool fDrawingText;
source_alpha fAlphaSrcMode; source_alpha fAlphaSrcMode;
alpha_function fAlphaFncMode; alpha_function fAlphaFncMode;
BPoint fPenLocation; BPoint fPenLocation;
+3 -4
View File
@@ -36,7 +36,6 @@
typedef agg::scanline_bin scanline_unpacked_type; typedef agg::scanline_bin scanline_unpacked_type;
typedef agg::scanline_bin scanline_packed_type; typedef agg::scanline_bin scanline_packed_type;
typedef agg::rasterizer_scanline_aa<> rasterizer_type;
typedef agg::renderer_scanline_bin_solid<renderer_base> renderer_type; typedef agg::renderer_scanline_bin_solid<renderer_base> renderer_type;
#else #else
typedef agg::renderer_outline_aa<renderer_base> outline_renderer_type; typedef agg::renderer_outline_aa<renderer_base> outline_renderer_type;
@@ -44,12 +43,12 @@
typedef agg::scanline_u8 scanline_unpacked_type; typedef agg::scanline_u8 scanline_unpacked_type;
typedef agg::scanline_p8 scanline_packed_type; typedef agg::scanline_p8 scanline_packed_type;
typedef agg::rasterizer_scanline_aa<> rasterizer_type;
typedef agg::renderer_scanline_aa_solid<renderer_base> renderer_type; typedef agg::renderer_scanline_aa_solid<renderer_base> renderer_type;
#endif #endif
typedef agg::renderer_scanline_aa_solid<renderer_base> font_renderer_solid_type; typedef agg::renderer_scanline_bin_solid<renderer_base> renderer_bin_type;
typedef agg::renderer_scanline_bin_solid<renderer_base> font_renderer_bin_type;
typedef agg::rasterizer_scanline_aa<> rasterizer_type;
#endif // DEFINES_H #endif // DEFINES_H
@@ -9,7 +9,7 @@
#ifndef DRAWING_MODE_COPY_SOLID_H #ifndef DRAWING_MODE_COPY_SOLID_H
#define DRAWING_MODE_COPY_SOLID_H #define DRAWING_MODE_COPY_SOLID_H
#include "DrawingModeCopy.h" #include "DrawingModeOver.h"
// blend_pixel_copy_solid // blend_pixel_copy_solid
void void
@@ -18,11 +18,9 @@ blend_pixel_copy_solid(int x, int y, const color_type& c, uint8 cover,
{ {
uint8* p = buffer->row(y) + (x << 2); uint8* p = buffer->row(y) + (x << 2);
if (cover == 255) { if (cover == 255) {
ASSIGN_COPY(p, c.r, c.g, c.b, c.a); ASSIGN_OVER(p, c.r, c.g, c.b);
} else { } else {
rgb_color l = pattern->LowColor().GetColor32(); BLEND_OVER(p, c.r, c.g, c.b, cover);
BLEND_COPY(p, c.r, c.g, c.b, cover,
l.red, l.green, l.blue);
} }
} }
@@ -33,25 +31,23 @@ blend_hline_copy_solid(int x, int y, unsigned len,
agg_buffer* buffer, const PatternHandler* pattern) agg_buffer* buffer, const PatternHandler* pattern)
{ {
if (cover == 255) { if (cover == 255) {
// cache the color as 32bit value
uint32 v; uint32 v;
uint8* p8 = (uint8*)&v; uint8* p8 = (uint8*)&v;
p8[0] = (uint8)c.b; p8[0] = (uint8)c.b;
p8[1] = (uint8)c.g; p8[1] = (uint8)c.g;
p8[2] = (uint8)c.r; p8[2] = (uint8)c.r;
p8[3] = 255; p8[3] = 255;
// row offset as 32bit pointer
uint32* p32 = (uint32*)(buffer->row(y)) + x; uint32* p32 = (uint32*)(buffer->row(y)) + x;
do { do {
*p32 = v; *p32 = v;
p32++; p32++;
x++;
} while(--len); } while(--len);
} else { } else {
uint8* p = buffer->row(y) + (x << 2); uint8* p = buffer->row(y) + (x << 2);
rgb_color l = pattern->LowColor().GetColor32();
do { do {
BLEND_COPY(p, c.r, c.g, c.b, cover, BLEND_OVER(p, c.r, c.g, c.b, cover);
l.red, l.green, l.blue); x++;
p += 4; p += 4;
} while(--len); } while(--len);
} }
@@ -65,18 +61,17 @@ blend_solid_hspan_copy_solid(int x, int y, unsigned len,
const PatternHandler* pattern) const PatternHandler* pattern)
{ {
uint8* p = buffer->row(y) + (x << 2); uint8* p = buffer->row(y) + (x << 2);
rgb_color l = pattern->LowColor().GetColor32();
do { do {
if (*covers) { if (*covers) {
if(*covers == 255) { if (*covers == 255) {
ASSIGN_COPY(p, c.r, c.g, c.b, c.a); ASSIGN_OVER(p, c.r, c.g, c.b);
} else { } else {
BLEND_COPY(p, c.r, c.g, c.b, *covers, BLEND_OVER(p, c.r, c.g, c.b, *covers);
l.red, l.green, l.blue);
} }
} }
covers++; covers++;
p += 4; p += 4;
x++;
} while(--len); } while(--len);
} }
@@ -90,18 +85,17 @@ blend_solid_vspan_copy_solid(int x, int y, unsigned len,
const PatternHandler* pattern) const PatternHandler* pattern)
{ {
uint8* p = buffer->row(y) + (x << 2); uint8* p = buffer->row(y) + (x << 2);
rgb_color l = pattern->LowColor().GetColor32();
do { do {
if (*covers) { if (*covers) {
if (*covers == 255) { if (*covers == 255) {
ASSIGN_COPY(p, c.r, c.g, c.b, c.a); ASSIGN_OVER(p, c.r, c.g, c.b);
} else { } else {
BLEND_COPY(p, c.r, c.g, c.b, *covers, BLEND_OVER(p, c.r, c.g, c.b, *covers);
l.red, l.green, l.blue);
} }
} }
covers++; covers++;
p += buffer->stride(); p += buffer->stride();
y++;
} while(--len); } while(--len);
} }
@@ -115,16 +109,14 @@ blend_color_hspan_copy_solid(int x, int y, unsigned len,
const PatternHandler* pattern) const PatternHandler* pattern)
{ {
uint8* p = buffer->row(y) + (x << 2); uint8* p = buffer->row(y) + (x << 2);
rgb_color l = pattern->LowColor().GetColor32();
if (covers) { if (covers) {
// non-solid opacity // non-solid opacity
do { do {
if(*covers) { if (*covers) {
if(*covers == 255) { if (*covers == 255) {
ASSIGN_COPY(p, colors->r, colors->g, colors->b, colors->a); ASSIGN_OVER(p, colors->r, colors->g, colors->b);
} else { } else {
BLEND_COPY(p, colors->r, colors->g, colors->b, *covers, BLEND_OVER(p, colors->r, colors->g, colors->b, *covers);
l.red, l.green, l.blue);
} }
} }
covers++; covers++;
@@ -135,15 +127,14 @@ blend_color_hspan_copy_solid(int x, int y, unsigned len,
// solid full opcacity // solid full opcacity
if (cover == 255) { if (cover == 255) {
do { do {
ASSIGN_COPY(p, colors->r, colors->g, colors->b, colors->a); ASSIGN_OVER(p, colors->r, colors->g, colors->b);
p += 4; p += 4;
++colors; ++colors;
} while(--len); } while(--len);
// solid partial opacity // solid partial opacity
} else if (cover) { } else if (cover) {
do { do {
BLEND_COPY(p, colors->r, colors->g, colors->b, cover, BLEND_OVER(p, colors->r, colors->g, colors->b, cover);
l.red, l.green, l.blue);
p += 4; p += 4;
++colors; ++colors;
} while(--len); } while(--len);
@@ -0,0 +1,155 @@
/*
* Copyright 2006, Stephan Aßmus <superstippi@gmx.de>. All rights reserved.
* Distributed under the terms of the MIT License.
*
* DrawingMode implementing B_OP_COPY for text on B_RGBA32.
*
*/
#ifndef DRAWING_MODE_COPY_TEXT_H
#define DRAWING_MODE_COPY_TEXT_H
#include "DrawingModeCopy.h"
// blend_pixel_copy_text
void
blend_pixel_copy_text(int x, int y, const color_type& c, uint8 cover,
agg_buffer* buffer, const PatternHandler* pattern)
{
uint8* p = buffer->row(y) + (x << 2);
if (cover == 255) {
ASSIGN_COPY(p, c.r, c.g, c.b, c.a);
} else {
rgb_color l = pattern->LowColor().GetColor32();
BLEND_COPY(p, c.r, c.g, c.b, cover,
l.red, l.green, l.blue);
}
}
// blend_hline_copy_text
void
blend_hline_copy_text(int x, int y, unsigned len,
const color_type& c, uint8 cover,
agg_buffer* buffer, const PatternHandler* pattern)
{
if (cover == 255) {
// cache the color as 32bit value
uint32 v;
uint8* p8 = (uint8*)&v;
p8[0] = (uint8)c.b;
p8[1] = (uint8)c.g;
p8[2] = (uint8)c.r;
p8[3] = 255;
// row offset as 32bit pointer
uint32* p32 = (uint32*)(buffer->row(y)) + x;
do {
*p32 = v;
p32++;
} while(--len);
} else {
uint8* p = buffer->row(y) + (x << 2);
rgb_color l = pattern->LowColor().GetColor32();
do {
BLEND_COPY(p, c.r, c.g, c.b, cover,
l.red, l.green, l.blue);
p += 4;
} while(--len);
}
}
// blend_solid_hspan_copy_text
void
blend_solid_hspan_copy_text(int x, int y, unsigned len,
const color_type& c, const uint8* covers,
agg_buffer* buffer,
const PatternHandler* pattern)
{
uint8* p = buffer->row(y) + (x << 2);
rgb_color l = pattern->LowColor().GetColor32();
do {
if (*covers) {
if(*covers == 255) {
ASSIGN_COPY(p, c.r, c.g, c.b, c.a);
} else {
BLEND_COPY(p, c.r, c.g, c.b, *covers,
l.red, l.green, l.blue);
}
}
covers++;
p += 4;
} while(--len);
}
// blend_solid_vspan_copy_text
void
blend_solid_vspan_copy_text(int x, int y, unsigned len,
const color_type& c, const uint8* covers,
agg_buffer* buffer,
const PatternHandler* pattern)
{
uint8* p = buffer->row(y) + (x << 2);
rgb_color l = pattern->LowColor().GetColor32();
do {
if (*covers) {
if (*covers == 255) {
ASSIGN_COPY(p, c.r, c.g, c.b, c.a);
} else {
BLEND_COPY(p, c.r, c.g, c.b, *covers,
l.red, l.green, l.blue);
}
}
covers++;
p += buffer->stride();
} while(--len);
}
// blend_color_hspan_copy_text
void
blend_color_hspan_copy_text(int x, int y, unsigned len,
const color_type* colors, const uint8* covers,
uint8 cover,
agg_buffer* buffer,
const PatternHandler* pattern)
{
uint8* p = buffer->row(y) + (x << 2);
rgb_color l = pattern->LowColor().GetColor32();
if (covers) {
// non-solid opacity
do {
if(*covers) {
if(*covers == 255) {
ASSIGN_COPY(p, colors->r, colors->g, colors->b, colors->a);
} else {
BLEND_COPY(p, colors->r, colors->g, colors->b, *covers,
l.red, l.green, l.blue);
}
}
covers++;
p += 4;
++colors;
} while(--len);
} else {
// solid full opcacity
if (cover == 255) {
do {
ASSIGN_COPY(p, colors->r, colors->g, colors->b, colors->a);
p += 4;
++colors;
} while(--len);
// solid partial opacity
} else if (cover) {
do {
BLEND_COPY(p, colors->r, colors->g, colors->b, cover,
l.red, l.green, l.blue);
p += 4;
++colors;
} while(--len);
}
}
}
#endif // DRAWING_MODE_COPY_TEXT_H
@@ -36,7 +36,7 @@ blend_hline_over_solid(int x, int y, unsigned len,
if (pattern->IsSolidLow()) if (pattern->IsSolidLow())
return; return;
if(cover == 255) { if (cover == 255) {
uint32 v; uint32 v;
uint8* p8 = (uint8*)&v; uint8* p8 = (uint8*)&v;
p8[0] = (uint8)c.b; p8[0] = (uint8)c.b;
@@ -24,6 +24,7 @@
#include "DrawingModeBlend.h" #include "DrawingModeBlend.h"
#include "DrawingModeCopy.h" #include "DrawingModeCopy.h"
#include "DrawingModeCopySolid.h" #include "DrawingModeCopySolid.h"
#include "DrawingModeCopyText.h"
#include "DrawingModeErase.h" #include "DrawingModeErase.h"
#include "DrawingModeInvert.h" #include "DrawingModeInvert.h"
#include "DrawingModeMin.h" #include "DrawingModeMin.h"
@@ -126,7 +127,7 @@ PixelFormat::~PixelFormat()
// SetDrawingMode // SetDrawingMode
void void
PixelFormat::SetDrawingMode(drawing_mode mode, source_alpha alphaSrcMode, PixelFormat::SetDrawingMode(drawing_mode mode, source_alpha alphaSrcMode,
alpha_function alphaFncMode) alpha_function alphaFncMode, bool text)
{ {
switch (mode) { switch (mode) {
// these drawing modes discard source pixels // these drawing modes discard source pixels
@@ -171,7 +172,13 @@ PixelFormat::SetDrawingMode(drawing_mode mode, source_alpha alphaSrcMode,
// in these drawing modes, the current high // in these drawing modes, the current high
// and low color are treated equally // and low color are treated equally
case B_OP_COPY: case B_OP_COPY:
if (fPatternHandler->IsSolid()) { if (text) {
fBlendPixel = blend_pixel_copy_text;
fBlendHLine = blend_hline_copy_text;
fBlendSolidHSpan = blend_solid_hspan_copy_text;
fBlendSolidVSpan = blend_solid_vspan_copy_text;
fBlendColorHSpan = blend_color_hspan_copy_text;
} else if (fPatternHandler->IsSolid()) {
fBlendPixel = blend_pixel_copy_solid; fBlendPixel = blend_pixel_copy_solid;
fBlendHLine = blend_hline_copy_solid; fBlendHLine = blend_hline_copy_solid;
fBlendSolidHSpan = blend_solid_hspan_copy_solid; fBlendSolidHSpan = blend_solid_hspan_copy_solid;
@@ -19,9 +19,6 @@
#include <GraphicsDefs.h> #include <GraphicsDefs.h>
// TODO: remove (just DrawingMode)
class DrawingMode;
class PatternHandler; class PatternHandler;
class PixelFormat { class PixelFormat {
@@ -59,14 +56,10 @@ class PixelFormat {
~PixelFormat(); ~PixelFormat();
// TODO: remove set_drawing_mode
void set_drawing_mode(DrawingMode* mode)
{
}
void SetDrawingMode(drawing_mode mode, void SetDrawingMode(drawing_mode mode,
source_alpha alphaSrcMode, source_alpha alphaSrcMode,
alpha_function alphaFncMode); alpha_function alphaFncMode,
bool text);
// AGG "pixel format" interface // AGG "pixel format" interface
unsigned width() const { return fBuffer->width(); } unsigned width() const { return fBuffer->width(); }
@@ -175,8 +175,8 @@ AGGTextRenderer::Unset()
BRect BRect
AGGTextRenderer::RenderString(const char* string, AGGTextRenderer::RenderString(const char* string,
uint32 length, uint32 length,
font_renderer_solid_type* solidRenderer, renderer_type* solidRenderer,
font_renderer_bin_type* binRenderer, renderer_bin_type* binRenderer,
const BPoint& baseLine, const BPoint& baseLine,
const BRect& clippingFrame, const BRect& clippingFrame,
bool dryRun, bool dryRun,
@@ -38,8 +38,8 @@ class AGGTextRenderer {
BRect RenderString(const char* utf8String, BRect RenderString(const char* utf8String,
uint32 length, uint32 length,
font_renderer_solid_type* solidRenderer, renderer_type* solidRenderer,
font_renderer_bin_type* binRenderer, renderer_bin_type* binRenderer,
const BPoint& baseLine, const BPoint& baseLine,
const BRect& clippingFrame, const BRect& clippingFrame,
bool dryRun = false, bool dryRun = false,
@@ -67,8 +67,10 @@ class AGGTextRenderer {
conv_font_curve_type fCurves; conv_font_curve_type fCurves;
conv_font_contour_type fContour; conv_font_contour_type fContour;
agg::scanline_u8 fScanline; scanline_unpacked_type fScanline;
agg::rasterizer_scanline_aa<> fRasterizer; rasterizer_type fRasterizer;
// TODO: both of these are actually in Painter already
// and could be reused by this object
char* fUnicodeBuffer; char* fUnicodeBuffer;
int32 fUnicodeBufferSize; int32 fUnicodeBufferSize;