/home/koen/project/wt/cvs/wt/examples/painting/PaintExample.C

Go to the documentation of this file.
00001 /*
00002  * Copyright (C) 2008 Emweb bvba, Kessel-Lo, Belgium.
00003  *
00004  * See the LICENSE file for terms of use.
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 &lt;canvas&gt; 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   // Being silly: test alternate rendering method
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 }

Generated on Fri Jul 25 17:05:59 2008 for Wt by doxygen 1.5.3