#include <Wt/WPaintedWidget>
Public Types | |
enum | Method { InlineSvgVml, HtmlCanvas } |
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) |
Set the preferred rendering method. | |
Method | preferredMethod () const |
Get the preferred rendering method. | |
void | update () |
Let the widget repaint itself. | |
virtual void | resize (const WLength &width, const WLength &height) |
Resize the widget. | |
void | addArea (WAbstractArea *area) |
Add an interactive area. | |
void | insertArea (int index, WAbstractArea *area) |
Insert 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 | paintEvent (WPaintDevice *paintDevice)=0 |
Paint the widget. |
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 | HtmlCanvas |
Internet Explorer 6.0+ | InlineVML | InlineVML |
Safari | HtmlCanvas, InlineSVG | HtmlCanvas |
Opera | InlineSVG, HtmlCanvas* | InlineSVG |
other | ? | HtmlCanvas |
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().
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.
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::WPaintedWidget *paintDevice) { Wt::WPainter painter(paintDevice); painter.drawLine(20, 20, foo_, foo_); ... } private: int foo_; };
Enumeration that indicates a rendering method.
InlineSvgVml | SVG (Most browsers) or VML (Internet Explorer) embedded in the page. |
HtmlCanvas | The WHATWG HTML 5 canvas element. |
Reimplemented from Wt::WObject.
void Wt::WPaintedWidget::setPreferredMethod | ( | Method | method | ) |
Set the preferred rendering method.
When method is supported by the browser, then it is chosen for rendering.
Method Wt::WPaintedWidget::preferredMethod | ( | ) | const [inline] |
void Wt::WPaintedWidget::update | ( | ) |
Let the widget repaint itself.
Repainting is not immediate, but happens after when the event loop is exited.
Resize the widget.
Specify a new size for this widget, by specifying width and height. By default a widget has automatic width and height, see WLength::isAuto().
This applies to CSS-based layout.
Reimplemented from Wt::WWebWidget.
void Wt::WPaintedWidget::addArea | ( | WAbstractArea * | area | ) |
Add 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.
void Wt::WPaintedWidget::insertArea | ( | int | index, | |
WAbstractArea * | area | |||
) |
Insert 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::removeArea | ( | WAbstractArea * | area | ) |
Removes an interactive area.
Removes the area from this widget, returning the ownership.
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 |
virtual void Wt::WPaintedWidget::paintEvent | ( | WPaintDevice * | paintDevice | ) | [protected, pure virtual] |
Paint 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.