Commit acb0699992cbf6f0ec27b810665e1ca46a01a053
1 parent
b6792215
CanvasView: Example improvement
Add clip-path, mask exmaple view, gradient and picture example view. Change-Id: I1f3e6239313b71f313381c4b691e35c636927d3d
Showing
1 changed file
with
465 additions
and
68 deletions
examples/canvas-view/canvas-view-example.cpp
| ... | ... | @@ -18,10 +18,77 @@ |
| 18 | 18 | #include <dali-toolkit/dali-toolkit.h> |
| 19 | 19 | #include <dali-toolkit/devel-api/controls/canvas-view/canvas-view.h> |
| 20 | 20 | #include <dali/devel-api/adaptor-framework/canvas-renderer-drawable-group.h> |
| 21 | +#include <dali/devel-api/adaptor-framework/canvas-renderer-gradient.h> | |
| 22 | +#include <dali/devel-api/adaptor-framework/canvas-renderer-linear-gradient.h> | |
| 23 | +#include <dali/devel-api/adaptor-framework/canvas-renderer-picture.h> | |
| 24 | +#include <dali/devel-api/adaptor-framework/canvas-renderer-radial-gradient.h> | |
| 21 | 25 | #include <dali/devel-api/adaptor-framework/canvas-renderer-shape.h> |
| 22 | 26 | |
| 23 | 27 | using namespace Dali; |
| 24 | 28 | |
| 29 | +namespace | |
| 30 | +{ | |
| 31 | +const char* VIEW_LABEL[] = { | |
| 32 | + "BasicShapes", | |
| 33 | + "ClipPath/Mask", | |
| 34 | + "Gradient", | |
| 35 | + "Picture"}; | |
| 36 | + | |
| 37 | +enum | |
| 38 | +{ | |
| 39 | + BASIC_SHAPE_VIEW = 0, | |
| 40 | + CLIP_PATH_VIEW, | |
| 41 | + GRADIENT_VIEW, | |
| 42 | + PICTURE_VIEW, | |
| 43 | + NUMBER_OF_VIEWS | |
| 44 | +}; | |
| 45 | + | |
| 46 | +const char* PREV_BUTTON_TEXT("Prev"); | |
| 47 | +const char* LEFT_BUTTON_TEXT("Next"); | |
| 48 | + | |
| 49 | +const char* IMAGES[] = | |
| 50 | + { | |
| 51 | + DEMO_IMAGE_DIR "Kid1.svg", | |
| 52 | +}; | |
| 53 | + | |
| 54 | +const float COMMON_STROKE_DASH_PATTERN[] = {15.0f, 30.0f}; | |
| 55 | + | |
| 56 | +/** | |
| 57 | + * @brief Create shape that have star path. | |
| 58 | + */ | |
| 59 | +Dali::CanvasRenderer::Shape MakeStarShape() | |
| 60 | +{ | |
| 61 | + Dali::CanvasRenderer::Shape star = Dali::CanvasRenderer::Shape::New(); | |
| 62 | + star.AddMoveTo(Vector2(-1.0f, -165.0f)); | |
| 63 | + star.AddLineTo(Vector2(53.0f, -56.0f)); | |
| 64 | + star.AddLineTo(Vector2(174.0f, -39.0f)); | |
| 65 | + star.AddLineTo(Vector2(87.0f, 45.0f)); | |
| 66 | + star.AddLineTo(Vector2(107.0f, 166.0f)); | |
| 67 | + star.AddLineTo(Vector2(-1.0f, 110.0f)); | |
| 68 | + star.AddLineTo(Vector2(-103.0f, 166.0f)); | |
| 69 | + star.AddLineTo(Vector2(-88.0f, 46.0f)); | |
| 70 | + star.AddLineTo(Vector2(-174.0f, -38.0f)); | |
| 71 | + star.AddLineTo(Vector2(-54.0f, -56.0f)); | |
| 72 | + star.Close(); | |
| 73 | + return star; | |
| 74 | +} | |
| 75 | + | |
| 76 | +/** | |
| 77 | + * @brief Create shape that have star path. | |
| 78 | + */ | |
| 79 | +Dali::CanvasRenderer::Shape MakeStar2Shape() | |
| 80 | +{ | |
| 81 | + Dali::CanvasRenderer::Shape star = Dali::CanvasRenderer::Shape::New(); | |
| 82 | + star.AddMoveTo(Vector2(535.0f, 135.0f)); | |
| 83 | + star.AddLineTo(Vector2(660.0f, 455.0f)); | |
| 84 | + star.AddLineTo(Vector2(355.0f, 250.0f)); | |
| 85 | + star.AddLineTo(Vector2(715.0f, 250.0f)); | |
| 86 | + star.AddLineTo(Vector2(410.0f, 455.0f)); | |
| 87 | + star.Close(); | |
| 88 | + return star; | |
| 89 | +} | |
| 90 | + | |
| 91 | +} // namespace | |
| 25 | 92 | /** |
| 26 | 93 | * @brief This demonstrates how to display and control vector primitives using CanvasView. |
| 27 | 94 | * |
| ... | ... | @@ -38,11 +105,14 @@ public: |
| 38 | 105 | */ |
| 39 | 106 | CanvasViewController(Application& application) |
| 40 | 107 | : mApplication(application), |
| 108 | + mCanvasView(), | |
| 41 | 109 | mRoundedRect(), |
| 42 | 110 | mArc(), |
| 43 | 111 | mStar(), |
| 44 | 112 | mTimer(), |
| 45 | - mCount(0) | |
| 113 | + mCount(0), | |
| 114 | + mViewCount(BASIC_SHAPE_VIEW), | |
| 115 | + mLinearGradient() | |
| 46 | 116 | { |
| 47 | 117 | // Connect to the Application's Init signal |
| 48 | 118 | mApplication.InitSignal().Connect(this, &CanvasViewController::Create); |
| ... | ... | @@ -50,21 +120,19 @@ public: |
| 50 | 120 | |
| 51 | 121 | ~CanvasViewController() = default; |
| 52 | 122 | |
| 53 | - void Create(Application& application) | |
| 123 | + /** | |
| 124 | + * @brief Create a view for basic shape example. | |
| 125 | + */ | |
| 126 | + void CreateBasicShape() | |
| 54 | 127 | { |
| 55 | - // The Init signal is received once (only) during the Application lifetime | |
| 56 | - Window window = application.GetWindow(); | |
| 128 | + Window window = mApplication.GetWindow(); | |
| 57 | 129 | Vector2 windowSize = window.GetSize(); |
| 58 | - window.KeyEventSignal().Connect(this, &CanvasViewController::OnKeyEvent); | |
| 59 | 130 | |
| 60 | - Toolkit::CanvasView mCanvasView = Toolkit::CanvasView::New(windowSize); | |
| 61 | - mCanvasView.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); | |
| 62 | - mCanvasView.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER); | |
| 63 | - mCanvasView.SetProperty(Actor::Property::SIZE, windowSize); | |
| 131 | + mTitle.SetProperty(Dali::Toolkit::TextLabel::Property::TEXT, VIEW_LABEL[BASIC_SHAPE_VIEW]); | |
| 64 | 132 | |
| 65 | 133 | Dali::CanvasRenderer::Shape canvasBackground = Dali::CanvasRenderer::Shape::New(); |
| 66 | 134 | canvasBackground.AddRect(Rect<float>(0.0f, 0.0f, windowSize.width, windowSize.height), Vector2::ZERO); |
| 67 | - canvasBackground.SetFillColor(Vector4(1.0f, 1.0f, 1.0f, 1.0f)); | |
| 135 | + canvasBackground.SetFillColor(Color::WHITE); | |
| 68 | 136 | mCanvasView.AddDrawable(canvasBackground); |
| 69 | 137 | |
| 70 | 138 | Dali::CanvasRenderer::Shape shape1 = Dali::CanvasRenderer::Shape::New(); |
| ... | ... | @@ -74,65 +142,46 @@ public: |
| 74 | 142 | shape1.SetStrokeWidth(10.0f); |
| 75 | 143 | shape1.Scale(1.2f); |
| 76 | 144 | shape1.Rotate(Degree(45.0f)); |
| 77 | - shape1.Translate(Vector2(100.0f, 100.0f)); | |
| 145 | + shape1.Translate(Vector2(100.0f, 200.0f)); | |
| 78 | 146 | |
| 79 | 147 | mRoundedRect = Dali::CanvasRenderer::Shape::New(); |
| 80 | 148 | mRoundedRect.AddRect(Rect<float>(10.0f, 350.0f, 200.0f, 140.0f), Vector2(40.0f, 40.0f)); |
| 81 | - mRoundedRect.SetFillColor(Vector4(0.0f, 0.0f, 1.0f, 1.0f)); | |
| 82 | - mRoundedRect.SetOpacity(0.5f); | |
| 83 | - mRoundedRect.SetStrokeColor(Vector4(1.0f, 1.0f, 0.0f, 1.0f)); | |
| 149 | + mRoundedRect.SetFillColor(Color::BLUE); | |
| 150 | + mRoundedRect.SetStrokeColor(Color::YELLOW); | |
| 84 | 151 | mRoundedRect.SetStrokeWidth(10.0f); |
| 85 | 152 | mRoundedRect.SetStrokeJoin(Dali::CanvasRenderer::Shape::StrokeJoin::MITER); |
| 153 | + mRoundedRect.SetOpacity(0.5f); | |
| 86 | 154 | Dali::Vector<float> dashPattern; |
| 87 | - dashPattern.PushBack(15.0f); | |
| 88 | - dashPattern.PushBack(30.0f); | |
| 155 | + for(auto& pattern : COMMON_STROKE_DASH_PATTERN) | |
| 156 | + { | |
| 157 | + dashPattern.PushBack(pattern); | |
| 158 | + } | |
| 89 | 159 | mRoundedRect.SetStrokeDash(dashPattern); |
| 90 | 160 | |
| 91 | - Dali::CanvasRenderer::Shape shape2 = Dali::CanvasRenderer::Shape::New(); | |
| 92 | - shape2.AddMoveTo(Vector2(535.0f, 135.0f)); | |
| 93 | - shape2.AddLineTo(Vector2(660.0f, 455.0f)); | |
| 94 | - shape2.AddLineTo(Vector2(355.0f, 250.0f)); | |
| 95 | - shape2.AddLineTo(Vector2(715.0f, 250.0f)); | |
| 96 | - shape2.AddLineTo(Vector2(410.0f, 455.0f)); | |
| 97 | - shape2.Close(); | |
| 98 | - shape2.SetFillRule(Dali::CanvasRenderer::Shape::FillRule::EVEN_ODD); | |
| 99 | - shape2.SetFillColor(Vector4(1.0f, 0.0f, 0.0f, 1.0f)); | |
| 161 | + Dali::CanvasRenderer::Shape shape2 = MakeStar2Shape(); | |
| 162 | + shape2.SetFillColor(Color::RED); | |
| 100 | 163 | shape2.SetOpacity(0.5f); |
| 101 | - shape2.SetStrokeColor(Vector4(1.0f, 0.0f, 1.0f, 1.0f)); | |
| 102 | - shape2.SetStrokeWidth(20.0f); | |
| 164 | + shape2.SetStrokeColor(Color::MAGENTA); | |
| 165 | + shape2.SetStrokeWidth(10.0f); | |
| 166 | + shape2.SetFillRule(Dali::CanvasRenderer::Shape::FillRule::EVEN_ODD); | |
| 103 | 167 | shape2.SetStrokeJoin(Dali::CanvasRenderer::Shape::StrokeJoin::ROUND); |
| 104 | - shape2.Transform(Matrix3(0.6f, 0.0f, 20.0f, 0.0f, 0.6f, -50.0f, 0.0f, 0.0f, 1.0f)); | |
| 168 | + shape2.Transform(Matrix3(0.6f, 0.0f, 20.0f, 0.0f, 0.6f, 50.0f, 0.0f, 0.0f, 1.0f)); | |
| 105 | 169 | |
| 106 | 170 | mArc = Dali::CanvasRenderer::Shape::New(); |
| 107 | 171 | mArc.AddArc(Vector2(100.0f, 650.0f), 80.0f, 10.0f, 0.0f, true); |
| 108 | 172 | mArc.AddArc(Vector2(100.0f, 650.0f), 80.0f, 10.0f, 0.0f, true); |
| 109 | 173 | mArc.SetOpacity(0.5f); |
| 110 | - mArc.SetStrokeColor(Vector4(0.0f, 1.0f, 0.0f, 1.0f)); | |
| 174 | + mArc.SetStrokeColor(Color::LIME); | |
| 111 | 175 | mArc.SetStrokeWidth(10.0f); |
| 112 | 176 | mArc.SetStrokeCap(Dali::CanvasRenderer::Shape::StrokeCap::ROUND); |
| 113 | 177 | mCanvasView.AddDrawable(mArc); |
| 114 | 178 | |
| 115 | - mStar = Dali::CanvasRenderer::Shape::New(); | |
| 116 | - mStar.AddMoveTo(Vector2(-1.0f, -165.0f)); | |
| 117 | - mStar.AddLineTo(Vector2(53.0f, -56.0f)); | |
| 118 | - mStar.AddLineTo(Vector2(174.0f, -39.0f)); | |
| 119 | - mStar.AddLineTo(Vector2(87.0f, 45.0f)); | |
| 120 | - mStar.AddLineTo(Vector2(107.0f, 166.0f)); | |
| 121 | - mStar.AddLineTo(Vector2(-1.0f, 110.0f)); | |
| 122 | - mStar.AddLineTo(Vector2(-103.0f, 166.0f)); | |
| 123 | - mStar.AddLineTo(Vector2(-88.0f, 46.0f)); | |
| 124 | - mStar.AddLineTo(Vector2(-174.0f, -38.0f)); | |
| 125 | - mStar.AddLineTo(Vector2(-54.0f, -56.0f)); | |
| 126 | - | |
| 127 | - mStar.Close(); | |
| 128 | - | |
| 129 | - mStar.SetFillColor(Vector4(0.0f, 1.0f, 1.0f, 1.0f)); | |
| 130 | - mStar.SetStrokeColor(Vector4(0.5f, 1.0f, 0.5f, 1.0f)); | |
| 179 | + mStar = MakeStarShape(); | |
| 180 | + mStar.SetFillColor(Color::CYAN); | |
| 181 | + mStar.SetStrokeColor(Color::DARK_GRAY); | |
| 131 | 182 | mStar.SetStrokeWidth(30.0f); |
| 132 | - mStar.SetStrokeCap(Dali::CanvasRenderer::Shape::StrokeCap::ROUND); | |
| 133 | 183 | mStar.Scale(0.6f); |
| 134 | - mStar.Translate(Vector2(350.0f, 450.0f)); | |
| 135 | - mStar.SetOpacity(0.5f); | |
| 184 | + mStar.Translate(Vector2(350.0f, 500.0f)); | |
| 136 | 185 | |
| 137 | 186 | mCanvasView.AddDrawable(mStar); |
| 138 | 187 | |
| ... | ... | @@ -148,34 +197,357 @@ public: |
| 148 | 197 | |
| 149 | 198 | mCanvasView.AddDrawable(mGroup2); |
| 150 | 199 | |
| 151 | - mTimer = Timer::New(1000.0f / 32.0f); | |
| 152 | - mTimer.TickSignal().Connect(this, &CanvasViewController::tick); | |
| 153 | 200 | mTimer.Start(); |
| 154 | 201 | |
| 155 | 202 | window.Add(mCanvasView); |
| 156 | 203 | } |
| 157 | 204 | |
| 158 | 205 | /** |
| 206 | + * @brief Create a view for clip-path and mask example. | |
| 207 | + */ | |
| 208 | + void CreateClipPathAndMask() | |
| 209 | + { | |
| 210 | + Window window = mApplication.GetWindow(); | |
| 211 | + Vector2 windowSize = window.GetSize(); | |
| 212 | + | |
| 213 | + mTitle.SetProperty(Dali::Toolkit::TextLabel::Property::TEXT, VIEW_LABEL[CLIP_PATH_VIEW]); | |
| 214 | + | |
| 215 | + Dali::CanvasRenderer::Shape canvasBackground = Dali::CanvasRenderer::Shape::New(); | |
| 216 | + canvasBackground.AddRect(Rect<float>(0.0f, 0.0f, windowSize.width, windowSize.height), Vector2::ZERO); | |
| 217 | + canvasBackground.SetFillColor(Color::WHITE); | |
| 218 | + mCanvasView.AddDrawable(canvasBackground); | |
| 219 | + | |
| 220 | + Dali::CanvasRenderer::Shape shape1 = Dali::CanvasRenderer::Shape::New(); | |
| 221 | + shape1.AddRect(Rect<float>(-50.0f, -50.0f, 100.0f, 100.0f), Vector2::ZERO); | |
| 222 | + shape1.SetFillColor(Vector4(0.0f, 0.5f, 0.0f, 0.5f)); | |
| 223 | + shape1.SetStrokeColor(Vector4(0.5f, 0.0f, 0.0f, 0.5f)); | |
| 224 | + shape1.SetStrokeWidth(10.0f); | |
| 225 | + shape1.Scale(1.2f); | |
| 226 | + shape1.Rotate(Degree(45.0f)); | |
| 227 | + shape1.Translate(Vector2(100.0f, 200.0f)); | |
| 228 | + | |
| 229 | + Dali::CanvasRenderer::Shape shape2 = MakeStar2Shape(); | |
| 230 | + shape2.SetFillRule(Dali::CanvasRenderer::Shape::FillRule::EVEN_ODD); | |
| 231 | + shape2.SetFillColor(Color::RED); | |
| 232 | + shape2.SetOpacity(0.5f); | |
| 233 | + shape2.SetStrokeColor(Color::MAGENTA); | |
| 234 | + shape2.SetStrokeWidth(10.0f); | |
| 235 | + shape2.SetStrokeJoin(Dali::CanvasRenderer::Shape::StrokeJoin::ROUND); | |
| 236 | + shape2.Transform(Matrix3(0.6f, 0.0f, 20.0f, 0.0f, 0.6f, 50.0f, 0.0f, 0.0f, 1.0f)); | |
| 237 | + | |
| 238 | + mStar = MakeStarShape(); | |
| 239 | + mStar.Scale(0.6f); | |
| 240 | + mStar.SetFillColor(Color::CYAN); | |
| 241 | + mStar.Translate(Vector2(240.0f, 240.0f)); | |
| 242 | + | |
| 243 | + Dali::CanvasRenderer::DrawableGroup group1; | |
| 244 | + group1 = Dali::CanvasRenderer::DrawableGroup::New(); | |
| 245 | + group1.AddDrawable(shape1); | |
| 246 | + group1.AddDrawable(shape2); | |
| 247 | + group1.SetClipPath(mStar); | |
| 248 | + mCanvasView.AddDrawable(group1); | |
| 249 | + | |
| 250 | + Dali::CanvasRenderer::Shape shape3 = Dali::CanvasRenderer::Shape::New(); | |
| 251 | + shape3.AddRect(Rect<float>(140.0f, 500.0f, 200.0f, 140.0f), Vector2(40.0f, 40.0f)); | |
| 252 | + shape3.SetFillColor(Color::BLUE); | |
| 253 | + shape3.SetOpacity(0.5f); | |
| 254 | + shape3.SetStrokeColor(Color::YELLOW); | |
| 255 | + shape3.SetStrokeWidth(10.0f); | |
| 256 | + shape3.SetStrokeJoin(Dali::CanvasRenderer::Shape::StrokeJoin::MITER); | |
| 257 | + Dali::Vector<float> dashPattern; | |
| 258 | + for(auto& pattern : COMMON_STROKE_DASH_PATTERN) | |
| 259 | + { | |
| 260 | + dashPattern.PushBack(pattern); | |
| 261 | + } | |
| 262 | + shape3.SetStrokeDash(dashPattern); | |
| 263 | + | |
| 264 | + mArc = Dali::CanvasRenderer::Shape::New(); | |
| 265 | + mArc.AddArc(Vector2(240.0f, 550.0f), 100.0f, 10.0f, 0.0f, true); | |
| 266 | + mArc.AddArc(Vector2(240.0f, 550.0f), 100.0f, 10.0f, 0.0f, true); | |
| 267 | + mArc.SetOpacity(0.5f); | |
| 268 | + mArc.SetFillColor(Color::GREEN); | |
| 269 | + | |
| 270 | + shape3.SetMask(mArc, Dali::CanvasRenderer::Drawable::MaskType::ALPHA); | |
| 271 | + mCanvasView.AddDrawable(shape3); | |
| 272 | + | |
| 273 | + mTimer.Start(); | |
| 274 | + | |
| 275 | + window.Add(mCanvasView); | |
| 276 | + } | |
| 277 | + | |
| 278 | + /** | |
| 279 | + * @brief Create a view for gradient example. | |
| 280 | + */ | |
| 281 | + void CreateGradient() | |
| 282 | + { | |
| 283 | + Window window = mApplication.GetWindow(); | |
| 284 | + Vector2 windowSize = window.GetSize(); | |
| 285 | + mTitle.SetProperty(Dali::Toolkit::TextLabel::Property::TEXT, VIEW_LABEL[GRADIENT_VIEW]); | |
| 286 | + | |
| 287 | + Dali::CanvasRenderer::Shape canvasBackground = Dali::CanvasRenderer::Shape::New(); | |
| 288 | + canvasBackground.AddRect(Rect<float>(0.0f, 0.0f, windowSize.width, windowSize.height), Vector2::ZERO); | |
| 289 | + canvasBackground.SetFillColor(Color::WHITE); | |
| 290 | + mCanvasView.AddDrawable(canvasBackground); | |
| 291 | + | |
| 292 | + Dali::Vector<float> dashPattern; | |
| 293 | + for(auto& pattern : COMMON_STROKE_DASH_PATTERN) | |
| 294 | + { | |
| 295 | + dashPattern.PushBack(pattern); | |
| 296 | + } | |
| 297 | + | |
| 298 | + Dali::Vector<Dali::CanvasRenderer::Gradient::ColorStop> radialGradientStops; | |
| 299 | + radialGradientStops.PushBack({0.0f, Color::LIGHT_SEA_GREEN}); | |
| 300 | + radialGradientStops.PushBack({1.0f, Color::BLUE_VIOLET}); | |
| 301 | + | |
| 302 | + Dali::CanvasRenderer::RadialGradient radialGradient = Dali::CanvasRenderer::RadialGradient::New(); | |
| 303 | + radialGradient.SetBounds(Vector2(240, 170), 70); | |
| 304 | + radialGradient.SetColorStops(radialGradientStops); | |
| 305 | + radialGradient.SetSpread(Dali::CanvasRenderer::Gradient::Spread::REFLECT); | |
| 306 | + | |
| 307 | + Dali::CanvasRenderer::Shape roundedRect = Dali::CanvasRenderer::Shape::New(); | |
| 308 | + roundedRect.AddRect(Rect<float>(50.0f, 100.0f, 380.0f, 140.0f), Vector2(40.0f, 40.0f)); | |
| 309 | + roundedRect.SetStrokeColor(Color::YELLOW); | |
| 310 | + roundedRect.SetStrokeWidth(10.0f); | |
| 311 | + roundedRect.SetStrokeJoin(Dali::CanvasRenderer::Shape::StrokeJoin::MITER); | |
| 312 | + roundedRect.SetStrokeDash(dashPattern); | |
| 313 | + roundedRect.SetFillGradient(radialGradient); | |
| 314 | + mCanvasView.AddDrawable(roundedRect); | |
| 315 | + | |
| 316 | + Dali::CanvasRenderer::RadialGradient radialGradient2 = Dali::CanvasRenderer::RadialGradient::New(); | |
| 317 | + radialGradient2.SetBounds(Vector2(240, 320), 70); | |
| 318 | + radialGradient2.SetColorStops(radialGradientStops); | |
| 319 | + radialGradient2.SetSpread(Dali::CanvasRenderer::Gradient::Spread::REPEAT); | |
| 320 | + | |
| 321 | + Dali::CanvasRenderer::Shape roundedRect2 = Dali::CanvasRenderer::Shape::New(); | |
| 322 | + roundedRect2.AddRect(Rect<float>(50.0f, 250.0f, 380.0f, 140.0f), Vector2(40.0f, 40.0f)); | |
| 323 | + roundedRect2.SetStrokeColor(Color::YELLOW); | |
| 324 | + roundedRect2.SetStrokeWidth(10.0f); | |
| 325 | + roundedRect2.SetStrokeJoin(Dali::CanvasRenderer::Shape::StrokeJoin::MITER); | |
| 326 | + roundedRect2.SetStrokeDash(dashPattern); | |
| 327 | + roundedRect2.SetFillGradient(radialGradient2); | |
| 328 | + mCanvasView.AddDrawable(roundedRect2); | |
| 329 | + | |
| 330 | + Dali::Vector<Dali::CanvasRenderer::Gradient::ColorStop> stops; | |
| 331 | + stops.PushBack({0.0f, Color::RED}); | |
| 332 | + stops.PushBack({0.5f, Color::BLUE}); | |
| 333 | + stops.PushBack({1.0f, Color::GREEN}); | |
| 334 | + | |
| 335 | + mLinearGradient = Dali::CanvasRenderer::LinearGradient::New(); | |
| 336 | + mLinearGradient.SetBounds(Vector2(-100, -100), Vector2(100, 100)); | |
| 337 | + mLinearGradient.SetColorStops(stops); | |
| 338 | + | |
| 339 | + Dali::Vector<Dali::CanvasRenderer::Gradient::ColorStop> strokeLinearGradientStops; | |
| 340 | + strokeLinearGradientStops.PushBack({0.0f, Color::SLATE_BLUE}); | |
| 341 | + strokeLinearGradientStops.PushBack({1.0f, Color::MAROON}); | |
| 342 | + | |
| 343 | + Dali::CanvasRenderer::LinearGradient strokeLinearGradient = Dali::CanvasRenderer::LinearGradient::New(); | |
| 344 | + strokeLinearGradient.SetBounds(Vector2(-100, -100), Vector2(100, 100)); | |
| 345 | + strokeLinearGradient.SetColorStops(strokeLinearGradientStops); | |
| 346 | + | |
| 347 | + Dali::CanvasRenderer::Shape star = MakeStarShape(); | |
| 348 | + star.SetStrokeWidth(30.0f); | |
| 349 | + star.SetStrokeCap(Dali::CanvasRenderer::Shape::StrokeCap::ROUND); | |
| 350 | + star.Translate(Vector2(240.0f, 600.0f)); | |
| 351 | + star.SetFillGradient(mLinearGradient); | |
| 352 | + star.SetStrokeGradient(strokeLinearGradient); | |
| 353 | + mCanvasView.AddDrawable(star); | |
| 354 | + | |
| 355 | + window.Add(mCanvasView); | |
| 356 | + | |
| 357 | + mTimer.Start(); | |
| 358 | + } | |
| 359 | + | |
| 360 | + /** | |
| 361 | + * @brief Create a view for picture example. | |
| 362 | + */ | |
| 363 | + void CreatePicture() | |
| 364 | + { | |
| 365 | + Window window = mApplication.GetWindow(); | |
| 366 | + Vector2 windowSize = window.GetSize(); | |
| 367 | + mTitle.SetProperty(Dali::Toolkit::TextLabel::Property::TEXT, VIEW_LABEL[PICTURE_VIEW]); | |
| 368 | + | |
| 369 | + Dali::CanvasRenderer::Shape canvasBackground = Dali::CanvasRenderer::Shape::New(); | |
| 370 | + canvasBackground.AddRect(Rect<float>(0.0f, 0.0f, windowSize.width, windowSize.height), Vector2::ZERO); | |
| 371 | + canvasBackground.SetFillColor(Color::WHITE); | |
| 372 | + mCanvasView.AddDrawable(canvasBackground); | |
| 373 | + | |
| 374 | + Dali::CanvasRenderer::Picture picture = Dali::CanvasRenderer::Picture::New(); | |
| 375 | + picture.Load(IMAGES[0]); | |
| 376 | + picture.Translate(Vector2(100, 100)); | |
| 377 | + picture.SetSize(Vector2(200, 200)); | |
| 378 | + mCanvasView.AddDrawable(picture); | |
| 379 | + | |
| 380 | + window.Add(mCanvasView); | |
| 381 | + } | |
| 382 | + | |
| 383 | + /** | |
| 384 | + * @brief Clean up the specified number of view. | |
| 385 | + * @param[in] viewCnt The number of view. | |
| 386 | + */ | |
| 387 | + void ResetView(int viewCnt) | |
| 388 | + { | |
| 389 | + Window window = mApplication.GetWindow(); | |
| 390 | + mCanvasView.RemoveAllDrawables(); | |
| 391 | + window.Remove(mCanvasView); | |
| 392 | + mTimer.Stop(); | |
| 393 | + } | |
| 394 | + | |
| 395 | + /** | |
| 396 | + * @brief Change to the specified number of view. | |
| 397 | + * @param[in] viewCnt The number of view. | |
| 398 | + */ | |
| 399 | + void ChangeView(int viewCnt) | |
| 400 | + { | |
| 401 | + switch(viewCnt) | |
| 402 | + { | |
| 403 | + case BASIC_SHAPE_VIEW: | |
| 404 | + { | |
| 405 | + CreateBasicShape(); | |
| 406 | + break; | |
| 407 | + } | |
| 408 | + case CLIP_PATH_VIEW: | |
| 409 | + { | |
| 410 | + CreateClipPathAndMask(); | |
| 411 | + break; | |
| 412 | + } | |
| 413 | + case GRADIENT_VIEW: | |
| 414 | + { | |
| 415 | + CreateGradient(); | |
| 416 | + break; | |
| 417 | + } | |
| 418 | + case PICTURE_VIEW: | |
| 419 | + { | |
| 420 | + CreatePicture(); | |
| 421 | + break; | |
| 422 | + } | |
| 423 | + } | |
| 424 | + mPrevButton.RaiseToTop(); | |
| 425 | + mNextButton.RaiseToTop(); | |
| 426 | + mTitle.RaiseToTop(); | |
| 427 | + } | |
| 428 | + | |
| 429 | + /** | |
| 430 | + * @brief Create a view and set up the button and timer, and title. | |
| 431 | + */ | |
| 432 | + void Create(Application& application) | |
| 433 | + { | |
| 434 | + // The Init signal is received once (only) during the Application lifetime | |
| 435 | + Window window = application.GetWindow(); | |
| 436 | + Vector2 windowSize = window.GetSize(); | |
| 437 | + window.KeyEventSignal().Connect(this, &CanvasViewController::OnKeyEvent); | |
| 438 | + | |
| 439 | + mPrevButton = Toolkit::PushButton::New(); | |
| 440 | + mPrevButton.SetProperty(Toolkit::Button::Property::LABEL, PREV_BUTTON_TEXT); | |
| 441 | + mPrevButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); | |
| 442 | + mPrevButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT); | |
| 443 | + window.Add(mPrevButton); | |
| 444 | + mPrevButton.ClickedSignal().Connect(this, &CanvasViewController::OnPrevButtonClicked); | |
| 445 | + | |
| 446 | + mNextButton = Toolkit::PushButton::New(); | |
| 447 | + mNextButton.SetProperty(Toolkit::Button::Property::LABEL, LEFT_BUTTON_TEXT); | |
| 448 | + mNextButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_RIGHT); | |
| 449 | + mNextButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_RIGHT); | |
| 450 | + window.Add(mNextButton); | |
| 451 | + mNextButton.ClickedSignal().Connect(this, &CanvasViewController::OnNextButtonClicked); | |
| 452 | + | |
| 453 | + mCanvasView = Toolkit::CanvasView::New(); | |
| 454 | + mCanvasView.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); | |
| 455 | + mCanvasView.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER); | |
| 456 | + mCanvasView.SetProperty(Actor::Property::SIZE, windowSize); | |
| 457 | + | |
| 458 | + mTitle = Toolkit::TextLabel::New(VIEW_LABEL[BASIC_SHAPE_VIEW]); | |
| 459 | + mTitle[Actor::Property::ANCHOR_POINT] = AnchorPoint::TOP_CENTER; | |
| 460 | + mTitle[Actor::Property::PARENT_ORIGIN] = Vector3(0.5f, 0.0f, 0.5f); | |
| 461 | + mTitle[Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT] = "CENTER"; | |
| 462 | + mTitle[Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT] = "CENTER"; | |
| 463 | + mTitle[Toolkit::TextLabel::Property::TEXT_COLOR] = Color::BLACK; | |
| 464 | + window.Add(mTitle); | |
| 465 | + | |
| 466 | + mTimer = Timer::New(1000.0f / 32.0f); | |
| 467 | + mTimer.TickSignal().Connect(this, &CanvasViewController::tick); | |
| 468 | + | |
| 469 | + ChangeView(mViewCount); | |
| 470 | + | |
| 471 | + mPrevButton.RaiseToTop(); | |
| 472 | + mNextButton.RaiseToTop(); | |
| 473 | + mTitle.RaiseToTop(); | |
| 474 | + } | |
| 475 | + | |
| 476 | + /** | |
| 477 | + * @brief Called when prev button clicked. | |
| 478 | + * | |
| 479 | + * Change to previous view. | |
| 480 | + */ | |
| 481 | + bool OnPrevButtonClicked(Toolkit::Button button) | |
| 482 | + { | |
| 483 | + ResetView(mViewCount); | |
| 484 | + mViewCount--; | |
| 485 | + if(mViewCount < BASIC_SHAPE_VIEW) | |
| 486 | + { | |
| 487 | + mViewCount = NUMBER_OF_VIEWS - 1; | |
| 488 | + } | |
| 489 | + ChangeView(mViewCount); | |
| 490 | + return true; | |
| 491 | + } | |
| 492 | + | |
| 493 | + /** | |
| 494 | + * @brief Called when prev button clicked. | |
| 495 | + * | |
| 496 | + * Change to next view. | |
| 497 | + */ | |
| 498 | + bool OnNextButtonClicked(Toolkit::Button button) | |
| 499 | + { | |
| 500 | + ResetView(mViewCount); | |
| 501 | + mViewCount++; | |
| 502 | + if(mViewCount >= NUMBER_OF_VIEWS) | |
| 503 | + { | |
| 504 | + mViewCount = 0; | |
| 505 | + } | |
| 506 | + ChangeView(mViewCount); | |
| 507 | + return true; | |
| 508 | + } | |
| 509 | + | |
| 510 | + /** | |
| 159 | 511 | * @brief Called when set time. |
| 160 | 512 | * |
| 161 | 513 | * Change transformation every call to make it look like vector animation. |
| 162 | 514 | */ |
| 163 | 515 | bool tick() |
| 164 | 516 | { |
| 165 | - mRoundedRect.ResetPath(); | |
| 166 | - mRoundedRect.AddRect(Rect<float>(10.0f, 350.0f, 200.0f, 140.0f), Vector2(float(mCount % 80), float(mCount % 80))); | |
| 517 | + if(mViewCount == BASIC_SHAPE_VIEW) | |
| 518 | + { | |
| 519 | + mRoundedRect.ResetPath(); | |
| 520 | + mRoundedRect.AddRect(Rect<float>(10.0f, 350.0f, 200.0f, 140.0f), Vector2(float(mCount % 80), float(mCount % 80))); | |
| 521 | + | |
| 522 | + mArc.ResetPath(); | |
| 523 | + mArc.AddArc(Vector2(100.0f, 650.0f), 80.0f, 10.0f, float(mCount % 180), true); | |
| 524 | + mArc.AddArc(Vector2(100.0f, 650.0f), 80.0f, 10.0f + float(mCount % 180), float(mCount % 180) / 2.0f, true); | |
| 167 | 525 | |
| 168 | - mArc.ResetPath(); | |
| 169 | - mArc.AddArc(Vector2(100.0f, 650.0f), 80.0f, 10.0f, float(mCount % 180), true); | |
| 170 | - mArc.AddArc(Vector2(100.0f, 650.0f), 80.0f, 10.0f + float(mCount % 180), float(mCount % 180) / 2.0f, true); | |
| 526 | + mStar.Rotate(Degree(mCount * 2.0f)); | |
| 527 | + mStar.Scale(0.6f + (!((mCount / 100) & 0x1) ? float(mCount % 100) * 0.01f : 1 - (float(mCount % 100) * 0.01f))); | |
| 171 | 528 | |
| 172 | - mStar.Rotate(Degree(mCount * 2.0f)); | |
| 173 | - mStar.Scale(float(mCount % 100) * 0.01f + 0.6f); | |
| 529 | + mGroup1.Scale(float(mCount % 50) * 0.005f + 0.8f); | |
| 174 | 530 | |
| 175 | - mGroup1.Scale(float(mCount % 50) * 0.005f + 0.8f); | |
| 531 | + mGroup2.SetOpacity(1.0f - float(mCount % 50) * 0.015f); | |
| 532 | + } | |
| 533 | + else if(mViewCount == CLIP_PATH_VIEW) | |
| 534 | + { | |
| 535 | + mArc.ResetPath(); | |
| 536 | + mArc.AddArc(Vector2(240.0f, 550.0f), 100.0f, 10.0f, float(mCount % 180), true); | |
| 537 | + mArc.AddArc(Vector2(240.0f, 550.0f), 100.0f, 10.0f + float(mCount % 180), float(mCount % 180) / 2.0f, true); | |
| 176 | 538 | |
| 177 | - mGroup2.SetOpacity(1.0f - float(mCount % 50) * 0.015f); | |
| 539 | + mStar.Rotate(Degree(mCount * 2.0f)); | |
| 540 | + mStar.Scale(0.6f + (!((mCount / 100) & 0x1) ? float(mCount % 100) * 0.01f : 1 - (float(mCount % 100) * 0.01f))); | |
| 541 | + } | |
| 542 | + else if(mViewCount == GRADIENT_VIEW) | |
| 543 | + { | |
| 544 | + Dali::Vector<Dali::CanvasRenderer::Gradient::ColorStop> stops; | |
| 545 | + stops.PushBack({0.0f, Vector4(1.0f, 0.0f, 0.0f, 1.0f)}); | |
| 546 | + stops.PushBack({!((mCount / 100) & 0x1) ? float(mCount % 100) / 100.0f : 1 - (float(mCount % 100) / 100.0f), Vector4(0.0f, 0.0f, 1.0f, 1.0f)}); | |
| 547 | + stops.PushBack({1.0f, Vector4(0.0f, 1.0f, 1.0f, 1.0f)}); | |
| 178 | 548 | |
| 549 | + mLinearGradient.SetColorStops(stops); | |
| 550 | + } | |
| 179 | 551 | mCount++; |
| 180 | 552 | return true; |
| 181 | 553 | } |
| ... | ... | @@ -183,7 +555,6 @@ public: |
| 183 | 555 | /** |
| 184 | 556 | * @brief Called when any key event is received. |
| 185 | 557 | * |
| 186 | - * Will use this to quit the application if Back or the Escape key is received | |
| 187 | 558 | * @param[in] event The key event information |
| 188 | 559 | */ |
| 189 | 560 | void OnKeyEvent(const KeyEvent& event) |
| ... | ... | @@ -194,18 +565,44 @@ public: |
| 194 | 565 | { |
| 195 | 566 | mApplication.Quit(); |
| 196 | 567 | } |
| 568 | + else if(IsKey(event, Dali::DALI_KEY_CURSOR_LEFT)) | |
| 569 | + { | |
| 570 | + ResetView(mViewCount); | |
| 571 | + mViewCount--; | |
| 572 | + if(mViewCount < BASIC_SHAPE_VIEW) | |
| 573 | + { | |
| 574 | + mViewCount = NUMBER_OF_VIEWS - 1; | |
| 575 | + } | |
| 576 | + ChangeView(mViewCount); | |
| 577 | + } | |
| 578 | + else if(IsKey(event, Dali::DALI_KEY_CURSOR_RIGHT)) | |
| 579 | + { | |
| 580 | + ResetView(mViewCount); | |
| 581 | + mViewCount++; | |
| 582 | + if(mViewCount >= NUMBER_OF_VIEWS) | |
| 583 | + { | |
| 584 | + mViewCount = BASIC_SHAPE_VIEW; | |
| 585 | + } | |
| 586 | + ChangeView(mViewCount); | |
| 587 | + } | |
| 197 | 588 | } |
| 198 | 589 | } |
| 199 | 590 | |
| 200 | 591 | private: |
| 201 | - Application& mApplication; | |
| 202 | - Dali::CanvasRenderer::Shape mRoundedRect; | |
| 203 | - Dali::CanvasRenderer::Shape mArc; | |
| 204 | - Dali::CanvasRenderer::Shape mStar; | |
| 205 | - Dali::CanvasRenderer::DrawableGroup mGroup1; | |
| 206 | - Dali::CanvasRenderer::DrawableGroup mGroup2; | |
| 207 | - Timer mTimer; | |
| 208 | - int mCount; | |
| 592 | + Application& mApplication; | |
| 593 | + Toolkit::CanvasView mCanvasView; | |
| 594 | + Dali::CanvasRenderer::Shape mRoundedRect; | |
| 595 | + Dali::CanvasRenderer::Shape mArc; | |
| 596 | + Dali::CanvasRenderer::Shape mStar; | |
| 597 | + Dali::CanvasRenderer::DrawableGroup mGroup1; | |
| 598 | + Dali::CanvasRenderer::DrawableGroup mGroup2; | |
| 599 | + Timer mTimer; | |
| 600 | + int mCount; | |
| 601 | + int mViewCount; | |
| 602 | + Dali::CanvasRenderer::LinearGradient mLinearGradient; | |
| 603 | + Toolkit::PushButton mPrevButton; | |
| 604 | + Toolkit::PushButton mNextButton; | |
| 605 | + Toolkit::TextLabel mTitle; | |
| 209 | 606 | }; |
| 210 | 607 | |
| 211 | 608 | int DALI_EXPORT_API main(int argc, char** argv) | ... | ... |