LibreOffice Module drawinglayer (master) 1
|
BaseProcessor2D class. More...
#include <baseprocessor2d.hxx>
Public Member Functions | |
BaseProcessor2D (geometry::ViewInformation2D aViewInformation) | |
constructor/destructor More... | |
virtual | ~BaseProcessor2D () |
void | process (const primitive2d::Primitive2DContainer &rSource) |
the central processing method More... | |
const geometry::ViewInformation2D & | getViewInformation2D () const |
data read access More... | |
Public Member Functions inherited from drawinglayer::primitive2d::Primitive2DDecompositionVisitor | |
virtual void | visit (const Primitive2DReference &)=0 |
virtual void | visit (const Primitive2DContainer &)=0 |
virtual void | visit (Primitive2DContainer &&)=0 |
virtual | ~Primitive2DDecompositionVisitor () |
Protected Member Functions | |
void | updateViewInformation (const geometry::ViewInformation2D &rViewInformation2D) |
virtual void | processBasePrimitive2D (const primitive2d::BasePrimitive2D &rCandidate) |
void | process (const primitive2d::BasePrimitive2D &rCandidate) |
virtual void | visit (const primitive2d::Primitive2DReference &) override final |
virtual void | visit (const primitive2d::Primitive2DContainer &) override final |
virtual void | visit (primitive2d::Primitive2DContainer &&) override final |
Private Attributes | |
geometry::ViewInformation2D | maViewInformation2D |
The ViewInformation2D itself. It's private to isolate accesses to it. More... | |
BaseProcessor2D class.
Base class for all C++ implementations of instances which process primitives.
Instances which process primitives can be renderers, but also stuff for HitTests, BoundRect calculations and/or animation processing. The main usage are renderers, but they are supposed to handle any primitive processing.
The base implementation is constructed with a ViewInformation2D which is accessible throughout the processor implementations. The idea is to construct any processor with a given ViewInformation2D. To be able to handle primitives which need to change the current transformation (as e.g. TransformPrimitive2D) it is allowed for the processor implementation to change its local value using updateViewInformation.
The basic processing method is process(..) which gets handed over the sequence of primitives to process. For convenience of the C++ implementations, the default implementation of process(..) maps all accesses to primitives to single calls to processBasePrimitive2D(..) where the primitive in question is already casted to the C++ implementation class.
The process(..) implementation makes a complete iteration over the given sequence of primitives. If the Primitive is not derived from BasePrimitive2D and thus not part of the C++ implementations, it converts ViewInformation2D to the corresponding API implementation (a uno::Sequence< beans::PropertyValue >) and recursively calls the method process(..) at the primitive with the decomposition derived from that primitive. This is the preparation to handle unknown implementations of the css::graphic::XPrimitive2D interface in the future.
So, to implement a basic processor, it is necessary to override and implement the processBasePrimitive2D(..) method. A minimal renderer has to support the Basic Primitives (see baseprimitive2d.hxx) and the Grouping Primitives (see groupprimitive2d.hxx). These are (currently):
Basic Primitives:
Grouping Primitives:
A processor doing so is a minimal processor. Of course a processor may handle any higher-level primitive (that has a decomposition implementation) for more direct data access or performance reasons, too.
The main part of a processBasePrimitive2D implementation is a switch..case construct, looking like the following:
void foo::processBasePrimitive2D(const BasePrimitive2D& rCandidate) { switch(rCandidate.getPrimitive2DID()) { case PRIMITIVE2D_ID_??? : { process PRIMITIVE2D_ID_??? here...
... break; } ... default : {
process recursively process(rCandidate.get2DDecomposition(getViewInformation2D())); break; } } }
The default case makes the processor work with all complex primitives by recursively using their decomposition.
You can also add a case for ignoring primitives by using:
case PRIMITIVE2D_ID_...IGNORE.A.. : case PRIMITIVE2D_ID_...IGNORE.B.. : case PRIMITIVE2D_ID_...IGNORE.C.. : {
ignore these primitives by neither processing nor recursively processing their decomposition break; }
Another useful case is embedding the processing of a complex primitive by bracketing it with some actions:
case PRIMITIVE2D_ID_SOME_TEXT : {
encapsulate e.g. with changing local variables, e.g. sometimes it's good to know if a basic primitive is part of a text, especially when not handling the text self but by purpose want to handle the decomposed geometries in the processor startText(); process(rCandidate.get2DDecomposition(getViewInformation2D())); endText(); break; }
As an example a processor collecting the outlines of a sequence of primitives only needs to handle some Basic Primitives and create outline and collect outline polygons e.g. for primitives with area like BitmapPrimitive2D (a rectangle) and PolyPolygonColorPrimitive2D. When also handling the Grouping Primitives MaskPrimitive2D (e.g. ignoring its content, using the mask polyPolygon) and TransformPrimitive2D (to have the correct local transformation), a processor creating the outline can be written using just four (4) primitives. As a tipp, it can be helpful to add many for the purpose not interesting higher level primitives to not force their decomposition to be created and/or parsed.
Definition at line 154 of file baseprocessor2d.hxx.
|
explicit |
constructor/destructor
Definition at line 34 of file baseprocessor2d.cxx.
|
virtual |
Definition at line 39 of file baseprocessor2d.cxx.
|
inline |
data read access
Definition at line 192 of file baseprocessor2d.hxx.
Referenced by drawinglayer::processor2d::HitTestProcessor2D::check3DHit(), drawinglayer::processor2d::HitTestProcessor2D::checkFillHitWithTolerance(), drawinglayer::processor2d::HitTestProcessor2D::checkHairlineHitWithTolerance(), drawinglayer::processor2d::D2DPixelProcessor2D::drawPolyPolygonColorTransformed(), drawinglayer::processor2d::HitTestProcessor2D::HitTestProcessor2D(), drawinglayer::processor2d::VclMetafileProcessor2D::impDumpToMetaFile(), drawinglayer::processor2d::D2DPixelProcessor2D::implCreateAlpha_B2DBitmap(), drawinglayer::processor2d::D2DPixelProcessor2D::implCreateAlpha_Direct(), process(), drawinglayer::processor2d::VclPixelProcessor2D::processBackgroundColorPrimitive2D(), drawinglayer::processor2d::ContourExtractor2D::processBasePrimitive2D(), drawinglayer::processor2d::HitTestProcessor2D::processBasePrimitive2D(), drawinglayer::processor2d::LineGeometryExtractor2D::processBasePrimitive2D(), drawinglayer::processor2d::TextAsPolygonExtractor2D::processBasePrimitive2D(), drawinglayer::processor2d::VclPixelProcessor2D::processBitmapPrimitive2D(), drawinglayer::processor2d::CairoPixelProcessor2D::processBitmapPrimitive2D(), drawinglayer::processor2d::D2DPixelProcessor2D::processBitmapPrimitive2D(), drawinglayer::processor2d::VclPixelProcessor2D::processBorderLinePrimitive2D(), drawinglayer::processor2d::VclMetafileProcessor2D::processControlPrimitive2D(), drawinglayer::processor2d::CairoPixelProcessor2D::processFilledRectanglePrimitive2D(), drawinglayer::processor2d::D2DPixelProcessor2D::processFilledRectanglePrimitive2D(), drawinglayer::processor2d::D2DPixelProcessor2D::processFillGraphicPrimitive2D(), drawinglayer::processor2d::VclPixelProcessor2D::processFillHatchPrimitive2D(), drawinglayer::processor2d::D2DPixelProcessor2D::processInvertPrimitive2D(), drawinglayer::processor2d::CairoPixelProcessor2D::processLineRectanglePrimitive2D(), drawinglayer::processor2d::D2DPixelProcessor2D::processLineRectanglePrimitive2D(), drawinglayer::processor2d::D2DPixelProcessor2D::processMarkerArrayPrimitive2D(), drawinglayer::processor2d::CairoPixelProcessor2D::processMaskPrimitive2DPixel(), drawinglayer::processor2d::D2DPixelProcessor2D::processMaskPrimitive2DPixel(), drawinglayer::processor2d::VclPixelProcessor2D::processMetaFilePrimitive2D(), drawinglayer::processor2d::VclPixelProcessor2D::processPatternFillPrimitive2D(), drawinglayer::processor2d::CairoPixelProcessor2D::processPointArrayPrimitive2D(), drawinglayer::processor2d::D2DPixelProcessor2D::processPointArrayPrimitive2D(), drawinglayer::processor2d::CairoPixelProcessor2D::processPolygonHairlinePrimitive2D(), drawinglayer::processor2d::D2DPixelProcessor2D::processPolygonHairlinePrimitive2D(), drawinglayer::processor2d::CairoPixelProcessor2D::processPolygonStrokePrimitive2D(), drawinglayer::processor2d::D2DPixelProcessor2D::processPolygonStrokePrimitive2D(), drawinglayer::processor2d::VclPixelProcessor2D::processPolyPolygonColorPrimitive2D(), drawinglayer::processor2d::CairoPixelProcessor2D::processPolyPolygonColorPrimitive2D(), drawinglayer::processor2d::CairoPixelProcessor2D::processSingleLinePrimitive2D(), drawinglayer::processor2d::D2DPixelProcessor2D::processSingleLinePrimitive2D(), drawinglayer::processor2d::VclMetafileProcessor2D::processStructureTagPrimitive2D(), drawinglayer::processor2d::VclMetafileProcessor2D::processTextHierarchyFieldPrimitive2D(), drawinglayer::processor2d::CairoPixelProcessor2D::processTransformPrimitive2D(), drawinglayer::processor2d::D2DPixelProcessor2D::processTransformPrimitive2D(), drawinglayer::processor2d::CairoPixelProcessor2D::processTransparencePrimitive2D(), drawinglayer::processor2d::D2DPixelProcessor2D::processTransparencePrimitive2D(), drawinglayer::processor2d::VclMetafileProcessor2D::processTransparencePrimitive2D(), drawinglayer::processor2d::D2DPixelProcessor2D::processUnifiedTransparencePrimitive2D(), drawinglayer::processor2d::VclProcessor2D::RenderMaskPrimitive2DPixel(), drawinglayer::processor2d::VclProcessor2D::RenderPagePreviewPrimitive2D(), drawinglayer::processor2d::VclProcessor2D::RenderPolygonHairlinePrimitive2D(), drawinglayer::processor2d::VclProcessor2D::RenderPolygonStrokePrimitive2D(), drawinglayer::processor2d::VclProcessor2D::RenderSvgLinearAtomPrimitive2D(), drawinglayer::processor2d::VclProcessor2D::RenderSvgRadialAtomPrimitive2D(), drawinglayer::processor2d::VclProcessor2D::RenderTransformPrimitive2D(), drawinglayer::processor2d::VclProcessor2D::RenderTransparencePrimitive2D(), and drawinglayer::processor2d::VclProcessor2D::RenderUnifiedTransparencePrimitive2D().
|
protected |
Definition at line 43 of file baseprocessor2d.cxx.
References drawinglayer::primitive2d::BasePrimitive2D::get2DDecomposition(), and getViewInformation2D().
Referenced by drawinglayer::processor2d::VclMetafileProcessor2D::impDumpToMetaFile(), drawinglayer::processor2d::VclMetafileProcessor2D::processBasePrimitive2D(), drawinglayer::processor2d::VclPixelProcessor2D::processBasePrimitive2D(), drawinglayer::processor2d::CairoPixelProcessor2D::processBasePrimitive2D(), drawinglayer::processor2d::ContourExtractor2D::processBasePrimitive2D(), drawinglayer::processor2d::D2DPixelProcessor2D::processBasePrimitive2D(), drawinglayer::processor2d::HitTestProcessor2D::processBasePrimitive2D(), drawinglayer::processor2d::LineGeometryExtractor2D::processBasePrimitive2D(), drawinglayer::processor2d::ObjectInfoPrimitiveExtractor2D::processBasePrimitive2D(), drawinglayer::processor2d::TextAsPolygonExtractor2D::processBasePrimitive2D(), drawinglayer::processor2d::VclPixelProcessor2D::processBorderLinePrimitive2D(), drawinglayer::processor2d::VclMetafileProcessor2D::processControlPrimitive2D(), drawinglayer::processor2d::VclPixelProcessor2D::processControlPrimitive2D(), drawinglayer::processor2d::VclPixelProcessor2D::processFillGradientPrimitive2D(), drawinglayer::processor2d::D2DPixelProcessor2D::processFillGraphicPrimitive2D(), drawinglayer::processor2d::VclPixelProcessor2D::processFillHatchPrimitive2D(), drawinglayer::processor2d::VclMetafileProcessor2D::processGraphicPrimitive2D(), drawinglayer::processor2d::VclPixelProcessor2D::processInvertPrimitive2D(), drawinglayer::processor2d::VclMetafileProcessor2D::processMaskPrimitive2D(), drawinglayer::processor2d::CairoPixelProcessor2D::processMaskPrimitive2DPixel(), drawinglayer::processor2d::D2DPixelProcessor2D::processMaskPrimitive2DPixel(), drawinglayer::processor2d::VclPixelProcessor2D::processMetaFilePrimitive2D(), drawinglayer::processor2d::CairoPixelProcessor2D::processModifiedColorPrimitive2D(), drawinglayer::processor2d::D2DPixelProcessor2D::processModifiedColorPrimitive2D(), drawinglayer::processor2d::VclMetafileProcessor2D::processObjectInfoPrimitive2D(), drawinglayer::processor2d::VclMetafileProcessor2D::processPolygonStrokeArrowPrimitive2D(), drawinglayer::processor2d::CairoPixelProcessor2D::processPolygonStrokePrimitive2D(), drawinglayer::processor2d::D2DPixelProcessor2D::processPolygonStrokePrimitive2D(), drawinglayer::processor2d::VclMetafileProcessor2D::processPolygonStrokePrimitive2D(), drawinglayer::processor2d::VclMetafileProcessor2D::processPolyPolygonGradientPrimitive2D(), drawinglayer::processor2d::VclPixelProcessor2D::processPolyPolygonGradientPrimitive2D(), drawinglayer::processor2d::VclMetafileProcessor2D::processPolyPolygonGraphicPrimitive2D(), drawinglayer::processor2d::VclMetafileProcessor2D::processPolyPolygonHatchPrimitive2D(), drawinglayer::processor2d::VclMetafileProcessor2D::processStructureTagPrimitive2D(), drawinglayer::processor2d::VclPixelProcessor2D::processTextDecoratedPortionPrimitive2D(), drawinglayer::processor2d::VclMetafileProcessor2D::processTextHierarchyBlockPrimitive2D(), drawinglayer::processor2d::VclMetafileProcessor2D::processTextHierarchyBulletPrimitive2D(), drawinglayer::processor2d::VclMetafileProcessor2D::processTextHierarchyFieldPrimitive2D(), drawinglayer::processor2d::VclMetafileProcessor2D::processTextHierarchyLinePrimitive2D(), drawinglayer::processor2d::VclMetafileProcessor2D::processTextHierarchyParagraphPrimitive2D(), drawinglayer::processor2d::VclPixelProcessor2D::processTextSimplePortionPrimitive2D(), drawinglayer::processor2d::CairoPixelProcessor2D::processTransformPrimitive2D(), drawinglayer::processor2d::D2DPixelProcessor2D::processTransformPrimitive2D(), drawinglayer::processor2d::CairoPixelProcessor2D::processTransparencePrimitive2D(), drawinglayer::processor2d::D2DPixelProcessor2D::processTransparencePrimitive2D(), drawinglayer::processor2d::D2DPixelProcessor2D::processUnifiedTransparencePrimitive2D(), drawinglayer::processor2d::VclMetafileProcessor2D::processUnifiedTransparencePrimitive2D(), drawinglayer::processor2d::VclPixelProcessor2D::processUnifiedTransparencePrimitive2D(), drawinglayer::processor2d::VclPixelProcessor2D::processWrongSpellPrimitive2D(), drawinglayer::processor2d::VclProcessor2D::RenderEpsPrimitive2D(), drawinglayer::processor2d::VclProcessor2D::RenderFillGraphicPrimitive2D(), drawinglayer::processor2d::VclProcessor2D::RenderMaskPrimitive2DPixel(), drawinglayer::processor2d::VclProcessor2D::RenderModifiedColorPrimitive2D(), drawinglayer::processor2d::VclProcessor2D::RenderPagePreviewPrimitive2D(), drawinglayer::processor2d::VclProcessor2D::RenderPolygonStrokePrimitive2D(), drawinglayer::processor2d::VclProcessor2D::RenderPolyPolygonGraphicPrimitive2D(), drawinglayer::processor2d::VclProcessor2D::RenderTextSimpleOrDecoratedPortionPrimitive2D(), drawinglayer::processor2d::VclProcessor2D::RenderTransformPrimitive2D(), drawinglayer::processor2d::VclProcessor2D::RenderTransparencePrimitive2D(), drawinglayer::processor2d::VclProcessor2D::RenderUnifiedTransparencePrimitive2D(), and visit().
void drawinglayer::processor2d::BaseProcessor2D::process | ( | const primitive2d::Primitive2DContainer & | rSource | ) |
the central processing method
Definition at line 63 of file baseprocessor2d.cxx.
References processBasePrimitive2D().
|
protectedvirtual |
Reimplemented in drawinglayer::processor2d::VclMetafileProcessor2D, drawinglayer::processor2d::VclPixelProcessor2D, drawinglayer::processor2d::CairoPixelProcessor2D, drawinglayer::processor2d::ContourExtractor2D, drawinglayer::processor2d::D2DPixelProcessor2D, drawinglayer::processor2d::HitTestProcessor2D, drawinglayer::processor2d::LineGeometryExtractor2D, drawinglayer::processor2d::ObjectInfoPrimitiveExtractor2D, and drawinglayer::processor2d::TextAsPolygonExtractor2D.
Definition at line 30 of file baseprocessor2d.cxx.
|
inlineprotected |
Definition at line 165 of file baseprocessor2d.hxx.
Referenced by drawinglayer::processor2d::ContourExtractor2D::processBasePrimitive2D(), drawinglayer::processor2d::HitTestProcessor2D::processBasePrimitive2D(), drawinglayer::processor2d::LineGeometryExtractor2D::processBasePrimitive2D(), drawinglayer::processor2d::TextAsPolygonExtractor2D::processBasePrimitive2D(), drawinglayer::processor2d::CairoPixelProcessor2D::processTransformPrimitive2D(), drawinglayer::processor2d::D2DPixelProcessor2D::processTransformPrimitive2D(), drawinglayer::processor2d::VclProcessor2D::RenderPagePreviewPrimitive2D(), and drawinglayer::processor2d::VclProcessor2D::RenderTransformPrimitive2D().
|
finaloverrideprotectedvirtual |
Implements drawinglayer::primitive2d::Primitive2DDecompositionVisitor.
Definition at line 54 of file baseprocessor2d.cxx.
References process().
|
finaloverrideprotectedvirtual |
Implements drawinglayer::primitive2d::Primitive2DDecompositionVisitor.
Definition at line 50 of file baseprocessor2d.cxx.
References processBasePrimitive2D().
|
finaloverrideprotectedvirtual |
Implements drawinglayer::primitive2d::Primitive2DDecompositionVisitor.
Definition at line 58 of file baseprocessor2d.cxx.
References process().
|
private |
The ViewInformation2D itself. It's private to isolate accesses to it.
Definition at line 158 of file baseprocessor2d.hxx.