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:
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user