Wt
3.3.0
|
A widget that is painted using vector graphics. More...
#include <Wt/WPaintedWidget>
Public Types | |
enum | Method { InlineSvgVml, HtmlCanvas, PngImage } |
Enumeration that indicates a rendering method. More... | |
Public Member Functions | |
WPaintedWidget (WContainerWidget *parent=0) | |
Create a new painted widget. | |
~WPaintedWidget () | |
Destructor. | |
void | setPreferredMethod (Method method) |
Sets the preferred rendering method. | |
Method | preferredMethod () const |
Returns the preferred rendering method. | |
void | update (WFlags< PaintFlag > flags=0) |
Lets the widget repaint itself. | |
virtual void | resize (const WLength &width, const WLength &height) |
Resizes the widget. | |
void | addArea (WAbstractArea *area) |
Adds an interactive area. | |
void | insertArea (int index, WAbstractArea *area) |
Inserts an interactive area. | |
void | removeArea (WAbstractArea *area) |
Removes an interactive area. | |
WAbstractArea * | area (int index) const |
Returns the interactive area at the given index. | |
const std::vector < WAbstractArea * > | areas () const |
Returns the interactive areas set for this widget. | |
Protected Member Functions | |
virtual void | layoutSizeChanged (int width, int height) |
Virtual method that indicates a size change. | |
virtual Method | getMethod () const |
Returns the actual method used for rendering. | |
virtual void | paintEvent (WPaintDevice *paintDevice)=0 |
Paints the widget. | |
virtual void | enableAjax () |
Progresses to an Ajax-enabled widget. |
A widget that is painted using vector graphics.
A painted widget is rendered from basic drawing primitives. Rendering is done not on the server but on the browser, using different rendering methods:
Browser | Methods | Default method |
Firefox 1.5+ | HtmlCanvas, InlineSVG, PngImage | HtmlCanvas |
Internet Explorer 6.0+ | InlineVML, PngImage | InlineVML |
Internet Explorer 9+ | HtmlCanvas, InlineSVG, PngImage | HtmlCanvas |
Safari | HtmlCanvas, InlineSVG, PngImage | HtmlCanvas |
Opera | InlineSVG, HtmlCanvas*, PngImage | InlineSVG |
other | ? | HtmlCanvas, PngImage |
* HtmlCanvas occasionally suffers from rendering artefacts in Opera.
The different rendering methods correspond to different WPaintDevice implementations, from which this widget choses a suitable one depending on the browser capabilities and configuration.
If no JavaScript is available, the JavaScript-based HtmlCanvas will not be used, and InlineSVG will be used instead. The method used may be changed by using setPreferredMethod().
In some browsers, InlineSVG requires that the document is rendered as XHTML. This must be enabled in the configuration file using the <send-xhtml-mime-type>
option. By default, this option is off. Firefox 4 and Chrome do support svg in normal html mode.
The PngImage is the most portable rendering method, and may be the fastest if the painting is of high complexity and/or the image is fairly small.
To use a WPaintedWidget, you must derive from it and reimplement paintEvent(WPaintDevice *paintDevice). To paint on a WPaintDevice, you will need to use a WPainter. Repainting is triggered by calling the update() method.
Usage example:
class MyPaintedWidget : public Wt::WPaintedWidget { public: MyPaintedWidget(Wt::WContainerWidget *parent = 0) : Wt::WPaintedWidget(parent), foo_(100) { resize(200, 200); // provide a default size } void setFoo(int foo) { foo_ = foo; update(); // trigger a repaint } protected: void paintEvent(Wt::WPaintDevice *paintDevice) { Wt::WPainter painter(paintDevice); painter.drawLine(20, 20, foo_, foo_); ... } private: int foo_; };
Styling through CSS is not applicable.
Enumeration that indicates a rendering method.
InlineSvgVml |
SVG (Most browsers) or VML (Internet Explorer < 9) embedded in the page. |
HtmlCanvas |
The WHATWG HTML 5 canvas element. |
PngImage |
Using a PNG image resource. |
Reimplemented from Wt::WObject.
void Wt::WPaintedWidget::addArea | ( | WAbstractArea * | area | ) |
Adds an interactive area.
Adds the area
which listens to events in a specific region of the widget. Areas are organized in a list, to which the given area
is appended. When areas overlap, the area with the lowest index receives the event.
Ownership of the area
is transferred to the widget.
WAbstractArea * Wt::WPaintedWidget::area | ( | int | index | ) | const |
Returns the interactive area at the given index.
Returns 0
if index
was invalid.
const std::vector< WAbstractArea * > Wt::WPaintedWidget::areas | ( | ) | const |
Returns the interactive areas set for this widget.
void Wt::WPaintedWidget::enableAjax | ( | ) | [protected, virtual] |
Progresses to an Ajax-enabled widget.
This method is called when the progressive bootstrap method is used, and support for AJAX has been detected. The default behavior will upgrade the widget's event handling to use AJAX instead of full page reloads, and propagate the call to its children.
You may want to reimplement this method if you want to make changes to widget when AJAX is enabled. You should always call the base implementation.
Reimplemented from Wt::WWebWidget.
WPaintedWidget::Method Wt::WPaintedWidget::getMethod | ( | ) | const [protected, virtual] |
Returns the actual method used for rendering.
The default method considers browser capabilites and the preferred method to make an actual choice for the implementation.
You may want to reimplement this method to override this choice.
void Wt::WPaintedWidget::insertArea | ( | int | index, |
WAbstractArea * | area | ||
) |
Inserts an interactive area.
Inserts the area
which listens to events in the coresponding area of the widget. Areas are organized in a list, and the area is inserted at index index
. When areas overlap, the area with the lowest index receives the event.
Ownership of the Area
is transferred to the widget.
void Wt::WPaintedWidget::layoutSizeChanged | ( | int | width, |
int | height | ||
) | [protected, virtual] |
Virtual method that indicates a size change.
This method propagates the client-side width and height of the widget when the widget is contained by a layout manager and setLayoutSizeAware(true) was called.
Reimplemented from Wt::WWidget.
virtual void Wt::WPaintedWidget::paintEvent | ( | WPaintDevice * | paintDevice | ) | [protected, pure virtual] |
Paints the widget.
You should reimplement this method to paint the contents of the widget, using the given paintDevice.
Implemented in Wt::Chart::WCartesianChart, and Wt::Chart::WPieChart.
Method Wt::WPaintedWidget::preferredMethod | ( | ) | const |
Returns the preferred rendering method.
void Wt::WPaintedWidget::removeArea | ( | WAbstractArea * | area | ) |
Removes an interactive area.
Removes the area
from this widget, returning the ownership.
Resizes the widget.
Specifies a fixed size for this widget, setting CSS width
and height
properties. By default a widget has automatic width and height, which sets a size for the widget following CSS rules.
When the widget is not managed by a layout manager, the automatic (natural) size of a widget depends on whether they widget is a block or inline widget:
When inserted in a layout manager, the size set will be used as a widget's preferred size, but the widget may be given a different size by the layout manager based on available space and stretch factors. The actual size given by a layout manager may be retrieved by making the widget "layout size aware", using setLayoutSizeAware(). If you have defined a "wtResize()"
JavaScript method for the widget, then this method will also be called.
The default width and height of a widget is WLength::Auto.
Reimplemented from Wt::WWebWidget.
void Wt::WPaintedWidget::setPreferredMethod | ( | Method | method | ) |
Sets the preferred rendering method.
When method
is supported by the browser, then it is chosen for rendering.
void Wt::WPaintedWidget::update | ( | WFlags< PaintFlag > | flags = 0 | ) |
Lets the widget repaint itself.
Repainting is not immediate, but happens after when the event loop is exited.
Unless a Wt::PaintUpdate paint flag is set, the widget is first cleared.