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(WContainerWidget *root)
00018 : WContainerWidget(root)
00019 {
00020 new WText("<h2>Paint example</h2>"
00021 "<p>A simple example demonstrating cross-browser vector graphics."
00022 "</p>"
00023 "<p>The emweb logo below is painted using the Wt WPainter API, and "
00024 "rendered to the browser using inline SVG, inline VML or the "
00025 "HTML 5 <canvas> element."
00026 "</p>",
00027 this);
00028
00029 WContainerWidget *emweb = new WContainerWidget(this);
00030 emweb->setMargin(WLength(), Left | Right);
00031
00032 WGridLayout *layout = new WGridLayout();
00033 emweb->setLayout(layout, AlignCenter | AlignTop);
00034
00035 WSlider *scaleSlider = new WSlider(Horizontal);
00036 scaleSlider->setMinimum(0);
00037 scaleSlider->setMaximum(20);
00038 scaleSlider->setValue(10);
00039 scaleSlider->setTickInterval(5);
00040 scaleSlider->setTickPosition(WSlider::TicksBothSides);
00041 scaleSlider->resize(300, 50);
00042 scaleSlider->valueChanged.connect(SLOT(this, PaintExample::scaleShape));
00043
00044 layout->addWidget(scaleSlider, 0, 1, AlignCenter | AlignMiddle);
00045
00046 WSlider *rotateSlider = new WSlider(Vertical);
00047 rotateSlider->setMinimum(-30);
00048 rotateSlider->setMaximum(30);
00049 rotateSlider->setValue(0);
00050 rotateSlider->setTickInterval(10);
00051 rotateSlider->setTickPosition(WSlider::TicksBothSides);
00052 rotateSlider->resize(50, 400);
00053 rotateSlider->valueChanged.connect(SLOT(this, PaintExample::rotateShape));
00054
00055 layout->addWidget(rotateSlider, 1, 0, AlignCenter | AlignMiddle);
00056
00057 shapes_ = new ShapesWidget();
00058 shapes_->setAngle(0.0);
00059 shapes_->setRelativeSize(0.5);
00060 shapes_->setPreferredMethod(WPaintedWidget::InlineSvgVml);
00061
00062 layout->addWidget(shapes_, 1, 1, AlignCenter | AlignMiddle);
00063 }
00064
00065 void PaintExample::rotateShape(int v)
00066 {
00067 shapes_->setAngle(v / 2.0);
00068
00069
00070 shapes_->setPreferredMethod(v < 0 ? WPaintedWidget::InlineSvgVml
00071 : WPaintedWidget::HtmlCanvas);
00072 }
00073
00074 void PaintExample::scaleShape(int v)
00075 {
00076 shapes_->setRelativeSize(0.1 + 0.9 * (v/20.0));
00077 }