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 WGridLayout *layout = new WGridLayout();
00036 emweb->setLayout(layout, AlignCenter | AlignTop);
00037
00038 WSlider *scaleSlider = new WSlider(Horizontal);
00039 scaleSlider->setMinimum(0);
00040 scaleSlider->setMaximum(20);
00041 scaleSlider->setValue(10);
00042 scaleSlider->setTickInterval(5);
00043 scaleSlider->setTickPosition(WSlider::TicksBothSides);
00044 scaleSlider->resize(300, 50);
00045 scaleSlider->valueChanged.connect(SLOT(this, PaintExample::scaleShape));
00046
00047 layout->addWidget(scaleSlider, 0, 1, AlignCenter | AlignMiddle);
00048
00049 WSlider *rotateSlider = new WSlider(Vertical);
00050 rotateSlider->setMinimum(-30);
00051 rotateSlider->setMaximum(30);
00052 rotateSlider->setValue(0);
00053 rotateSlider->setTickInterval(10);
00054 rotateSlider->setTickPosition(WSlider::TicksBothSides);
00055 rotateSlider->resize(50, 400);
00056 rotateSlider->valueChanged.connect(SLOT(this, PaintExample::rotateShape));
00057
00058 layout->addWidget(rotateSlider, 1, 0, AlignCenter | AlignMiddle);
00059
00060 shapes_ = new ShapesWidget();
00061 shapes_->setAngle(0.0);
00062 shapes_->setRelativeSize(0.5);
00063 shapes_->setPreferredMethod(WPaintedWidget::InlineSvgVml);
00064
00065 layout->addWidget(shapes_, 1, 1, AlignCenter | AlignMiddle);
00066 }
00067
00068 void PaintExample::rotateShape(int v)
00069 {
00070 shapes_->setAngle(v / 2.0);
00071
00072
00073 shapes_->setPreferredMethod(v < 0 ? WPaintedWidget::InlineSvgVml
00074 : WPaintedWidget::HtmlCanvas);
00075 }
00076
00077 void PaintExample::scaleShape(int v)
00078 {
00079 shapes_->setRelativeSize(0.1 + 0.9 * (v/20.0));
00080 }
00081
00082 WApplication *createApplication(const WEnvironment& env)
00083 {
00084 return new PaintExample(env);
00085 }
00086
00087 int main(int argc, char **argv)
00088 {
00089 return WRun(argc, argv, &createApplication);
00090 }