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
+19 -7
View File
@@ -44,6 +44,7 @@ Painter::Painter()
fRenderer(NULL),
fFontRendererSolid(NULL),
fFontRendererBin(NULL),
fLineProfile(),
fSubpixelPrecise(false),
fScale(1.0),
fPenSize(1.0),
@@ -56,6 +57,7 @@ Painter::Painter()
fTextRenderer(new AGGTextRenderer())
{
_UpdateFont();
_UpdateLineWidth();
}
// destructor
@@ -114,6 +116,8 @@ rgb_color color = fPatternHandler->HighColor().GetColor32();
fOutlineRasterizer = new outline_rasterizer_type(*fOutlineRenderer);
#endif
// attach our line profile to the renderer, it keeps a pointer
fOutlineRenderer->profile(fLineProfile);
// the renderer used for filling paths
fRenderer = new renderer_type(*fBaseRenderer);
@@ -133,7 +137,6 @@ rgb_color color = fPatternHandler->HighColor().GetColor32();
fFontRendererBin = new font_renderer_bin_type(*fBaseRenderer);
_RebuildClipping();
}
}
@@ -206,6 +209,7 @@ Painter::SetScale(float scale)
{
fScale = scale;
_RebuildClipping();
_UpdateLineWidth();
}
// SetPenSize
@@ -213,6 +217,7 @@ void
Painter::SetPenSize(float size)
{
fPenSize = size;
_UpdateLineWidth();
}
// SetOrigin
@@ -809,6 +814,16 @@ Painter::_UpdateFont()
fTextRenderer->SetPointSize(fFont.Size());
}
// _UpdateLineWidth
void
Painter::_UpdateLineWidth()
{
float width = fPenSize;
_Transform(&width);
fLineProfile.width(width);
}
// #pragma mark -
// _DrawTriangle
@@ -920,12 +935,12 @@ Painter::_StrokePath(VertexSource& path, const pattern& p) const
{
fPatternHandler->SetPattern(p);
float width = fPenSize;
_Transform(&width);
#if ALIASED_DRAWING
if (width > 1.0) {
agg::conv_stroke<VertexSource> stroke(path);
float width = fPenSize;
_Transform(&width);
stroke.width(width);
fRasterizer->add_path(stroke);
@@ -934,9 +949,6 @@ Painter::_StrokePath(VertexSource& path, const pattern& p) const
fOutlineRasterizer->add_path(path);
}
#else
agg::line_profile_aa prof;
prof.width(width);
fOutlineRenderer->profile(prof);
fOutlineRasterizer->add_path(path);
#endif
}