PaintExample.C 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /*
  2. * Copyright (C) 2008 Emweb bvba, Kessel-Lo, Belgium.
  3. *
  4. * See the LICENSE file for terms of use.
  5. */
  6. #include <Wt/WContainerWidget>
  7. #include <Wt/WGridLayout>
  8. #include <Wt/WSlider>
  9. #include <Wt/WText>
  10. #include "PaintExample.h"
  11. #include "ShapesWidget.h"
  12. using namespace Wt;
  13. PaintExample::PaintExample(WContainerWidget *root, bool showTitle)
  14. : WContainerWidget(root)
  15. {
  16. std::string text;
  17. if (showTitle)
  18. text += "<h2>Paint example</h2>";
  19. text +=
  20. "<p>A simple example demonstrating cross-browser vector graphics."
  21. "</p>"
  22. "<p>The emweb logo below is painted using the Wt WPainter API from "
  23. "bezier paths, and rendered to the browser using inline SVG, inline VML "
  24. "or the HTML 5 &lt;canvas&gt; element."
  25. "</p>"
  26. "<p>"
  27. "The example also demonstrates the horizontal and vertical "
  28. "<a href=\"http://www.webtoolkit.eu/wt/doc/reference/html/classWt_1_1WSlider.html\" target=\"_blank\">"
  29. "WSlider</a> widgets. Here,"
  30. "the events of the WSlider widgets are used to scale and rotate the "
  31. "emweb logo."
  32. "</p>"
  33. "<p>"
  34. "In non-IE browsers, a different backend is used for positive or negative "
  35. "angles (SVG or HTML canvas)."
  36. "</p>";
  37. new WText(text, this);
  38. WContainerWidget *emweb = new WContainerWidget(this);
  39. emweb->setMargin(WLength::Auto, Left | Right);
  40. WGridLayout *layout = new WGridLayout();
  41. emweb->setLayout(layout);
  42. WSlider *scaleSlider = new WSlider(Horizontal);
  43. scaleSlider->setMinimum(0);
  44. scaleSlider->setMaximum(20);
  45. scaleSlider->setValue(10);
  46. scaleSlider->setTickInterval(5);
  47. scaleSlider->setTickPosition(WSlider::TicksBothSides);
  48. scaleSlider->resize(300, 50);
  49. scaleSlider->sliderMoved().connect(this, &PaintExample::scaleShape);
  50. layout->addWidget(scaleSlider, 0, 1, AlignCenter | AlignMiddle);
  51. WSlider *rotateSlider = new WSlider(Vertical);
  52. rotateSlider->setMinimum(-30);
  53. rotateSlider->setMaximum(30);
  54. rotateSlider->setValue(0);
  55. rotateSlider->setTickInterval(10);
  56. rotateSlider->setTickPosition(WSlider::TicksBothSides);
  57. rotateSlider->resize(50, 400);
  58. rotateSlider->sliderMoved().connect(this, &PaintExample::rotateShape);
  59. layout->addWidget(rotateSlider, 1, 0, AlignCenter | AlignMiddle);
  60. shapes_ = new ShapesWidget();
  61. shapes_->setAngle(0.0);
  62. shapes_->setRelativeSize(0.5);
  63. shapes_->setPreferredMethod(WPaintedWidget::HtmlCanvas);
  64. layout->addWidget(shapes_, 1, 1, AlignCenter | AlignMiddle);
  65. }
  66. void PaintExample::rotateShape(int v)
  67. {
  68. shapes_->setAngle(v / 2.0);
  69. // Being silly: test alternate rendering method
  70. shapes_->setPreferredMethod(v < 0 ? WPaintedWidget::InlineSvgVml
  71. : WPaintedWidget::HtmlCanvas);
  72. }
  73. void PaintExample::scaleShape(int v)
  74. {
  75. shapes_->setRelativeSize(0.1 + 0.9 * (v/20.0));
  76. }