line profile is now cached by being a member of Painter, as was suggested by Maxim, it's too heavy an object for being created on the fly

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10905 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stephan Aßmus
2005-01-20 15:23:23 +00:00
parent db94952b4f
commit 30fd3eb18a
2 changed files with 22 additions and 7 deletions
+3
View File
@@ -184,6 +184,7 @@ class Painter {
void _RebuildClipping(); void _RebuildClipping();
void _UpdateFont(); void _UpdateFont();
void _UpdateLineWidth();
// drawing functions stroke/fill // drawing functions stroke/fill
void _DrawTriangle( BPoint pt1, void _DrawTriangle( BPoint pt1,
@@ -229,6 +230,8 @@ class Painter {
font_renderer_solid_type* fFontRendererSolid; font_renderer_solid_type* fFontRendererSolid;
font_renderer_bin_type* fFontRendererBin; font_renderer_bin_type* fFontRendererBin;
agg::line_profile_aa fLineProfile;
// for internal coordinate rounding/transformation, // for internal coordinate rounding/transformation,
// does not concern rendering // does not concern rendering
bool fSubpixelPrecise; bool fSubpixelPrecise;
+19 -7
View File
@@ -44,6 +44,7 @@ Painter::Painter()
fRenderer(NULL), fRenderer(NULL),
fFontRendererSolid(NULL), fFontRendererSolid(NULL),
fFontRendererBin(NULL), fFontRendererBin(NULL),
fLineProfile(),
fSubpixelPrecise(false), fSubpixelPrecise(false),
fScale(1.0), fScale(1.0),
fPenSize(1.0), fPenSize(1.0),
@@ -56,6 +57,7 @@ Painter::Painter()
fTextRenderer(new AGGTextRenderer()) fTextRenderer(new AGGTextRenderer())
{ {
_UpdateFont(); _UpdateFont();
_UpdateLineWidth();
} }
// destructor // destructor
@@ -114,6 +116,8 @@ rgb_color color = fPatternHandler->HighColor().GetColor32();
fOutlineRasterizer = new outline_rasterizer_type(*fOutlineRenderer); fOutlineRasterizer = new outline_rasterizer_type(*fOutlineRenderer);
#endif #endif
// attach our line profile to the renderer, it keeps a pointer
fOutlineRenderer->profile(fLineProfile);
// the renderer used for filling paths // the renderer used for filling paths
fRenderer = new renderer_type(*fBaseRenderer); fRenderer = new renderer_type(*fBaseRenderer);
@@ -133,7 +137,6 @@ rgb_color color = fPatternHandler->HighColor().GetColor32();
fFontRendererBin = new font_renderer_bin_type(*fBaseRenderer); fFontRendererBin = new font_renderer_bin_type(*fBaseRenderer);
_RebuildClipping(); _RebuildClipping();
} }
} }
@@ -206,6 +209,7 @@ Painter::SetScale(float scale)
{ {
fScale = scale; fScale = scale;
_RebuildClipping(); _RebuildClipping();
_UpdateLineWidth();
} }
// SetPenSize // SetPenSize
@@ -213,6 +217,7 @@ void
Painter::SetPenSize(float size) Painter::SetPenSize(float size)
{ {
fPenSize = size; fPenSize = size;
_UpdateLineWidth();
} }
// SetOrigin // SetOrigin
@@ -809,6 +814,16 @@ Painter::_UpdateFont()
fTextRenderer->SetPointSize(fFont.Size()); fTextRenderer->SetPointSize(fFont.Size());
} }
// _UpdateLineWidth
void
Painter::_UpdateLineWidth()
{
float width = fPenSize;
_Transform(&width);
fLineProfile.width(width);
}
// #pragma mark - // #pragma mark -
// _DrawTriangle // _DrawTriangle
@@ -920,12 +935,12 @@ Painter::_StrokePath(VertexSource& path, const pattern& p) const
{ {
fPatternHandler->SetPattern(p); fPatternHandler->SetPattern(p);
float width = fPenSize;
_Transform(&width);
#if ALIASED_DRAWING #if ALIASED_DRAWING
if (width > 1.0) { if (width > 1.0) {
agg::conv_stroke<VertexSource> stroke(path); agg::conv_stroke<VertexSource> stroke(path);
float width = fPenSize;
_Transform(&width);
stroke.width(width); stroke.width(width);
fRasterizer->add_path(stroke); fRasterizer->add_path(stroke);
@@ -934,9 +949,6 @@ Painter::_StrokePath(VertexSource& path, const pattern& p) const
fOutlineRasterizer->add_path(path); fOutlineRasterizer->add_path(path);
} }
#else #else
agg::line_profile_aa prof;
prof.width(width);
fOutlineRenderer->profile(prof);
fOutlineRasterizer->add_path(path); fOutlineRasterizer->add_path(path);
#endif #endif
} }