1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
/**
* \mainpage Flake
*
* The Flake library is a low level library for all kinds of graphical content
* to be placed on any Calligra canvas. This includes a line to text-areas or
* even movies. Just as important, this library will include tools to manipulate
* the graphical content. At least at the level of Flake objects. This goes from
* moving/rotating the object to a basis for complex brushes for a paint program.
* <b>Who uses Flake</b><br>
* <img src="../flake.png">
* Flake is a middle layer between the applications and the content providers.
* The applications will allow flake to be plugged in by implementing the
* KoCanvasController interface while providers of content (like a chart engine
* or a text component) will extend KoShape and optionally KoToolBase to do their
* work.
*
* A <b>shape</b> is a rectangle or a text or a movie. A shape paints itself and has content.
* A <b>Tool</b> get user input. Tools do things on data, tools do things on shapes.
* Both shapes and tools are plugins. So they are independent of applications.
* For example; I have a textshape that paints text. It comes with a texttool that
* takes mouse and keyboard events and alters the text that the textshape shows.
* This idea of combining a shape and a text is done in flake by "ID"s . Each
* shape has an ID and a tool has an ID. If they have the same ID they belong
* together.
* Example; I select a text shape and the toolbox will show a icon to activate the
* text tool.
*
* The way that a shape is kept separate from the application and from the Flake
* layer is similar to how a widget in a GUI is kept separate from the application.
* The shape inherits from the abstract KoShape class and all the logic embedded in
* the KoShape class is enough for the flake layer to do all things with it like
* positioning and moving as well as rotating and deleting it.
* Just like a widget does not know the difference between painting on one app, or
* another a shape will not know the difference. The flake library will take care
* of all details.
*
* It is common to combine a shape-plugin with one or more tools which are made
* specifically to work on that shape type. So, a text shape comes with a tool that
* knows how to address the shape not only by the abstract KoShape class, but also
* by the KoTextShape API and is therefor able to alter the data that that shape
* displays. In this case text.
* Flake natively only has a vector shape. All other types of shapes (including the
* text one used in the example above) are plugins and not part of Flake itself.
*
*
* Use KoShape as a base object for any application-specific graphical
* content, and extend KoShapeContainer for objects that can contain others.
*
* KoShape is the base class for all flake objects. Flake objects extend it
* to allow themselves to be manipulated by the KoToolBase s. The content of such an
* object is independent and based on the model of the data this object represents.
*
* If you want to be a supplier of shape objects; create a library with a KoShapeFactoryBase
* class and install a .desktop service file with the following content:
*
@verbatim
[Desktop Entry]
Encoding=UTF-8
Name=My Flake Shapes Plugin
ServiceTypes=Calligra/Shape
Type=Service
X-KDE-Library=myflakeshapesplugin
X-Flake-MinVersion=1
X-Flake-PluginVersion=1
@endverbatim
*
*/
|