00001
00002
00003
00004
00005
00006
00007 #include <Wt/WContainerWidget>
00008 #include <Wt/WGridLayout>
00009 #include <Wt/WSlider>
00010 #include <Wt/WText>
00011
00012 #include "PaintExample.h"
00013 #include "ShapesWidget.h"
00014
00015 using namespace Wt;
00016
00017 PaintExample::PaintExample(const WEnvironment& env)
00018 : WApplication(env)
00019 {
00020 setTitle("Paint example");
00021
00022 useStyleSheet("painting.css");
00023
00024 new WText("<h2>Paint example</h2>"
00025 "<p>A simple example demonstrating cross-browser vector graphics."
00026 "</p>"
00027 "<p>The emweb logo below is painted using the Wt WPainter API, and "
00028 "rendered to the browser using inline SVG, inline VML or the "
00029 "HTML 5 <canvas> element."
00030 "</p>",
00031 root());
00032
00033 WContainerWidget *emweb = new WContainerWidget(root());
00034 emweb->setMargin(WLength(), Left | Right);
00035
00036 WGridLayout *layout = new WGridLayout();
00037 emweb->setLayout(layout, AlignCenter | AlignTop);
00038
00039 WSlider *scaleSlider = new WSlider(Horizontal);
00040 scaleSlider->setMinimum(0);
00041 scaleSlider->setMaximum(20);
00042 scaleSlider->setValue(10);
00043 scaleSlider->setTickInterval(5);
00044 scaleSlider->setTickPosition(WSlider::TicksBothSides);
00045 scaleSlider->resize(300, 50);
00046 scaleSlider->valueChanged.connect(SLOT(this, PaintExample::scaleShape));
00047
00048 layout->addWidget(scaleSlider, 0, 1, AlignCenter | AlignMiddle);
00049
00050 WSlider *rotateSlider = new WSlider(Vertical);
00051 rotateSlider->setMinimum(-30);
00052 rotateSlider->setMaximum(30);
00053 rotateSlider->setValue(0);
00054 rotateSlider->setTickInterval(10);
00055 rotateSlider->setTickPosition(WSlider::TicksBothSides);
00056 rotateSlider->resize(50, 400);
00057 rotateSlider->valueChanged.connect(SLOT(this, PaintExample::rotateShape));
00058
00059 layout->addWidget(rotateSlider, 1, 0, AlignCenter | AlignMiddle);
00060
00061 shapes_ = new ShapesWidget();
00062 shapes_->setAngle(0.0);
00063 shapes_->setRelativeSize(0.5);
00064 shapes_->setPreferredMethod(WPaintedWidget::InlineSvgVml);
00065
00066 layout->addWidget(shapes_, 1, 1, AlignCenter | AlignMiddle);
00067 }
00068
00069 void PaintExample::rotateShape(int v)
00070 {
00071 shapes_->setAngle(v / 2.0);
00072
00073
00074 shapes_->setPreferredMethod(v < 0 ? WPaintedWidget::InlineSvgVml
00075 : WPaintedWidget::HtmlCanvas);
00076 }
00077
00078 void PaintExample::scaleShape(int v)
00079 {
00080 shapes_->setRelativeSize(0.1 + 0.9 * (v/20.0));
00081 }
00082
00083 WApplication *createApplication(const WEnvironment& env)
00084 {
00085 return new PaintExample(env);
00086 }
00087
00088 int main(int argc, char **argv)
00089 {
00090 return WRun(argc, argv, &createApplication);
00091 }