Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
3e8cf5c4
Kaydet (Commit)
3e8cf5c4
authored
Eyl 05, 2014
tarafından
Jan Holesovsky
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
drawinglayer: Improve the README.
Change-Id: I40ae115a03f1a289c940f9f96e3d496d1eba1a48
üst
9fb82a17
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
83 additions
and
3 deletions
+83
-3
README
drawinglayer/README
+83
-3
No files found.
drawinglayer/README
Dosyayı görüntüle @
3e8cf5c4
Somewhat of a middle layer between rendering subsystems and application cores
.
Drawing API that can specify what to draw via a kind of display list
.
(What are "rendering subsystems" and "application cores"?)
Example of the DrawingLayer use is eg. in svx/source/xoutdev/xtabhtch.cxx:121.
A stripped down version with extended comments:
It offers a nice and easy API to render complex shapes. (Pure "marketing".)
// Create a hatch primitive (here a rectangle that will be filled with
// the appropriate hatching, but has no border).
// This will not draw it yet; it's so far only constructed to add it to a
// display list later.
const drawinglayer::primitive2d::Primitive2DReference aHatchPrimitive(
new drawinglayer::primitive2d::PolyPolygonHatchPrimitive2D(...));
// Create a rectangle around the hatch, to give it a border.
const drawinglayer::primitive2d::Primitive2DReference aBlackRectanglePrimitive(
new drawinglayer::primitive2d::PolygonHairlinePrimitive2D(...));
// Here we want to render to a virtual device (to later obtain the bitmap
// out of that), so prepare it.
VirtualDevice aVirtualDevice;
// Create processor and draw primitives, to get it ready for rendering.
boost::scoped_ptr<drawinglayer::processor2d::BaseProcessor2D> pProcessor2D(
drawinglayer::processor2d::createPixelProcessor2DFromOutputDevice(...));
if (pProcessor2D)
{
// Fill-in the display list.
drawinglayer::primitive2d::Primitive2DSequence aSequence(2);
aSequence[0] = aHatchPrimitive;
aSequence[1] = aBlackRectanglePrimitive;
// Render it to the virtual device.
pProcessor2D->process(aSequence);
pProcessor2D.reset();
}
// Obtain the bitmap that was rendered from the virtual device, to re-use
// it in the widget.
aRetval = aVirtualDevice.GetBitmap(Point(0, 0), aVirtualDevice.GetOutputSizePixel());
== DrawingLayer glossary ==
Primitives - classes that represent what should be drawn. It holds the data
what to draw, but does not contain any kind of the rendering. Some of the
primitives are 'Basic primitives', that are primitives that cannot be
decomposed. The rest of the primitives can be decomposed to the basic
primitives.
Decomposition - a way how to break down the more complicated primitives into
the basic primitives, and represent them via them; this logically makes the
plain Primitive2DSequence display list a hierarchy.
Eg. PolygonMarkerPrimitive2D can be decomposed to 2 hairlines
PolyPolygonHairlinePrimitive2D's, each with different color.
Processor - a class that goes through the hierarchy of the Primitives, and
renders it some way. Various processors, like VclPixelProcessor2D (renders to
the screen), VclMetafileProcessor2D (renders to the VCL metafile, eg. for
printing), etc.
== How to Implement a new Primitive ("something new to draw") ==
* Create an ancestor of BasePrimitive2D
(or of its ancestor if it fits the purpose better)
* Assign it an ID [in drawinglayer_primitivetypes2d.hxx]
* Implement its decomposition
[virtual Primitive2DSequence create2DDecomposition(...)]
* Extend the (various) processor(s)
If you need more than relying on just the decomposition
== Where is DrawingLayer used ==
* SdrObject(s) (rectangles, Circles, predefined shapes etc.)
* Selections
* Various smaller cases to 'just draw something'
* Draw to a virtual device, and use the resulting bitmap (like the example
above)
* Custom widgets (like the Header / Footer indicator button)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment