Wt examples
3.2.3
|
00001 00002 /* 00003 * Copyright (C) 2008 Emweb bvba, Kessel-Lo, Belgium. 00004 * 00005 * See the LICENSE file for terms of use. 00006 */ 00007 00008 #include "ShapesWidget.h" 00009 00010 #include <Wt/WPainter> 00011 #include <Wt/WPainterPath> 00012 #include <Wt/WPointF> 00013 #include <Wt/WRectF> 00014 00015 #include <math.h> 00016 #include <iostream> 00017 #include <boost/lexical_cast.hpp> 00018 00019 namespace { 00020 // the blue emweb color 00021 WColor emweb(0x04, 0x7c, 0x93); 00022 } 00023 00024 ShapesWidget::ShapesWidget(WContainerWidget *parent) 00025 : WPaintedWidget(parent), 00026 angle_(0), 00027 size_(1) 00028 { 00029 resize(710, 400); 00030 } 00031 00032 void ShapesWidget::setAngle(double angle) 00033 { 00034 angle = std::max(-30.0, std::min(30.0, angle)); 00035 00036 if (angle_ != angle) { 00037 angle_ = angle; 00038 update(); 00039 } 00040 } 00041 00042 void ShapesWidget::setRelativeSize(double size) 00043 { 00044 size = std::max(0.1, std::min(1.0, size)); 00045 00046 if (size_ != size) { 00047 size_ = size; 00048 update(); 00049 } 00050 } 00051 00052 void ShapesWidget::paintEvent(WPaintDevice *paintDevice) 00053 { 00054 WPainter painter(paintDevice); 00055 00056 painter.setShadow(WShadow(10, 10, WColor(0, 0, 0, 50), 10)); 00057 painter.setRenderHint(WPainter::Antialiasing); 00058 00059 painter.translate(width().value()/2, height().value()/2); 00060 painter.rotate(angle_); 00061 painter.scale(size_, size_); 00062 painter.translate(-width().value()/2 + 50, -height().value()/2 + 150); 00063 00064 drawEmwebLogo(painter); 00065 } 00066 00067 void ShapesWidget::drawEmwebE(WPainter& painter) 00068 { 00069 WPainterPath p; 00070 00071 /* Path copied from our SVG for half of the E */ 00072 00073 p.moveTo(46.835084,58.783624); 00074 p.cubicTo(45.700172,58.783624,35.350098,58.911502,24.656354,63.283309); 00075 p.cubicTo(8.7595992,69.78907,0,82.38499,0,98.809238); 00076 p.cubicTo(0,115.20152,08.7595992,127.82141,24.656354,134.31119); 00077 p.cubicTo(35.350098,138.69099,45.700172,138.81088,46.835084,138.81088); 00078 p.lineTo(94.509362,138.81088); 00079 p.lineTo(94.509362,117.58323); 00080 p.lineTo(46.835084,117.58323); 00081 p.cubicTo(46.811106,117.58323,39.466151,117.47134,32.608727,114.53815); 00082 p.cubicTo(25.095932,111.34122,21.747144,106.47389,21.747144,98.809238); 00083 p.cubicTo(21.747144,91.120612,25.095932,86.269265,32.608727,83.064338); 00084 p.cubicTo(39.466151,80.123159,46.811106,80.027251,46.89103,80.027251); 00085 p.lineTo(94.509362,80.027251); 00086 p.lineTo(94.509362,58.783624); 00087 p.lineTo(46.835084,58.783624); 00088 00089 painter.drawPath(p); 00090 00091 painter.save(); 00092 painter.translate(0,-58.783624); 00093 painter.drawPath(p); 00094 painter.restore(); 00095 } 00096 00097 void ShapesWidget::drawEmwebMW(WPainter& painter) 00098 { 00099 WPainterPath p; 00100 00101 /* Path copied from our SVG for one fourth of the MW */ 00102 00103 p.moveTo(120.59634,24.072913); 00104 p.cubicTo(116.12064,34.518895,115.98477,44.605222,115.98477,45.732141); 00105 p.lineTo(115.98477,138.81088); 00106 p.lineTo(137.7399,138.81088); 00107 p.lineTo(137.7399,45.732141); 00108 p.cubicTo(137.7399,45.708164,137.83581,38.53904,140.84892,31.841463); 00109 p.cubicTo(144.14176,24.512492,149.113,21.235634,156.98545,21.235634); 00110 p.cubicTo(164.8499,21.235634,169.81314,24.512492,173.10599,31.841463); 00111 p.cubicTo(176.10311,38.53904,176.215,45.708164,176.215,45.780095); 00112 p.lineTo(176.215,70.41343); 00113 p.lineTo(197.97014,70.41343); 00114 p.lineTo(197.97014,45.732141); 00115 p.cubicTo(197.97014,44.605222,197.83427,34.518895,193.35057,24.072913); 00116 p.cubicTo(186.70894,8.5517985,173.77734,0,156.99344,0); 00117 p.cubicTo(140.17756,0,127.25396,8.5517985,120.59634,24.072913); 00118 00119 /* 00120 * Paint it four times, translated and inverted 00121 */ 00122 00123 painter.drawPath(p); 00124 00125 const double dx = 176. - 115.98477; 00126 00127 painter.save(); 00128 00129 painter.translate(dx, 0); 00130 painter.drawPath(p); 00131 00132 painter.translate(dx, 0); 00133 00134 painter.scale(-1, -1); 00135 painter.translate(0, -138.81088); 00136 painter.translate(-115.98477 - 197.95 - dx, 0); 00137 painter.drawPath(p); 00138 00139 painter.translate(dx, 0); 00140 painter.drawPath(p); 00141 00142 painter.restore(); 00143 } 00144 00145 void ShapesWidget::drawEmwebLogo(WPainter& painter) 00146 { 00147 painter.save(); 00148 painter.setPen(NoPen); 00149 00150 /* 00151 * The emweb logo can be drawn as 3 e's, and one combined m/w 00152 */ 00153 00154 // Emweb 00155 painter.setBrush(black); 00156 drawEmwebE(painter); 00157 00158 // emwEb 00159 painter.save(); 00160 painter.translate(397, 0); 00161 drawEmwebE(painter); 00162 00163 // emweB 00164 painter.translate(210, 0); 00165 painter.scale(-1, 1); 00166 drawEmwebE(painter); 00167 00168 painter.restore(); 00169 00170 // eMWeb 00171 painter.setBrush(emweb); 00172 drawEmwebMW(painter); 00173 00174 painter.restore(); 00175 }