Commit 22bee1156d5f2ee94626045853609bdf960a9cb0

Authored by Tom Robinson
Committed by Adeel Kazmi
1 parent c5c60701

Clipping draw order fix

Change-Id: I3c5aa4922e891cf1ca194676d1bcf2e3493c5eb1
com.samsung.dali-demo.xml
... ... @@ -194,6 +194,9 @@
194 194 <ui-application appid="clipping.example" exec="/usr/apps/com.samsung.dali-demo/bin/clipping.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
195 195 <label>Clipping</label>
196 196 </ui-application>
  197 + <ui-application appid="clipping-draw-order.example" exec="/usr/apps/com.samsung.dali-demo/bin/clipping-draw-order.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
  198 + <label>Clipping Draw Order</label>
  199 + </ui-application>
197 200 <ui-application appid="pivot.example" exec="/usr/apps/com.samsung.dali-demo/bin/pivot.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
198 201 <label>Clipping</label>
199 202 </ui-application>
... ...
examples-reel/dali-examples-reel.cpp
... ... @@ -42,6 +42,7 @@ int DALI_EXPORT_API main(int argc, char **argv)
42 42 demo.AddExample(Example("builder.example", DALI_DEMO_STR_TITLE_SCRIPT_BASED_UI));
43 43 demo.AddExample(Example("buttons.example", DALI_DEMO_STR_TITLE_BUTTONS));
44 44 demo.AddExample(Example("clipping.example", DALI_DEMO_STR_TITLE_CLIPPING));
  45 + demo.AddExample(Example("clipping-draw-order.example", DALI_DEMO_STR_TITLE_CLIPPING_DRAW_ORDER));
45 46 demo.AddExample(Example("dissolve-effect.example", DALI_DEMO_STR_TITLE_DISSOLVE_TRANSITION));
46 47 demo.AddExample(Example("effects-view.example", DALI_DEMO_STR_TITLE_EFFECTS_VIEW));
47 48 demo.AddExample(Example("flex-container.example", DALI_DEMO_STR_TITLE_FLEXBOX_PLAYGROUND));
... ...
examples/clipping-draw-order/clipping-draw-order.cpp 0 → 100644
  1 +/*
  2 + * Copyright (c) 2017 Samsung Electronics Co., Ltd.
  3 + *
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + *
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + *
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + *
  16 + */
  17 +
  18 +#include <dali-toolkit/dali-toolkit.h>
  19 +
  20 +using namespace Dali;
  21 +using namespace Dali::Toolkit;
  22 +
  23 +const char* images[] = {
  24 + DEMO_IMAGE_DIR "gallery-small-1.jpg",
  25 + DEMO_IMAGE_DIR "gallery-small-2.jpg",
  26 + DEMO_IMAGE_DIR "gallery-small-3.jpg",
  27 + DEMO_IMAGE_DIR "gallery-small-4.jpg",
  28 + DEMO_IMAGE_DIR "gallery-small-5.jpg"
  29 +};
  30 +
  31 +// This verification example confirms drawing order is the same, with or without clipping enabled.
  32 +class ClippingDrawOrderVerification : public ConnectionTracker
  33 +{
  34 +public:
  35 +
  36 + ClippingDrawOrderVerification( Application& application )
  37 + : mApplication( application )
  38 + {
  39 + // Connect to the Application's Init signal.
  40 + mApplication.InitSignal().Connect( this, &ClippingDrawOrderVerification::Create );
  41 + }
  42 +
  43 + ~ClippingDrawOrderVerification()
  44 + {
  45 + // Nothing to do here.
  46 + }
  47 +
  48 + // The Init signal is received once (only) during the Application lifetime.
  49 + void Create( Application& application )
  50 + {
  51 + // Get a handle to the stage
  52 + Stage stage = Stage::GetCurrent();
  53 + stage.SetBackgroundColor( Color::WHITE );
  54 +
  55 + // Create the title label.
  56 + TextLabel title = TextLabel::New( "Clipping draw order verification" );
  57 + title.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
  58 + title.SetProperty( TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
  59 + title.SetAnchorPoint( AnchorPoint::CENTER );
  60 + title.SetParentOrigin( ParentOrigin::CENTER );
  61 +
  62 + // Create the description label.
  63 + TextLabel description = TextLabel::New( "The bottom tree should have the same draw order as the top tree.\nThey should look identical except \"C\" is clipped on the bottom tree." );
  64 + description.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
  65 + description.SetProperty( TextLabel::Property::MULTI_LINE, true );
  66 + description.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER );
  67 + description.SetParentOrigin( Vector3( 0.5f, 1.0f, 0.5f ) );
  68 + stage.Add( description );
  69 +
  70 + /*
  71 + * Create a 4-row TableView.
  72 + * It will be segmented as follows:
  73 + *
  74 + * +---------------+
  75 + * | Title |
  76 + * +---------------+
  77 + * | Tree |
  78 + * | Without |
  79 + * | Clipping |
  80 + * +---------------+
  81 + * | Tree |
  82 + * | With |
  83 + * | Clipping |
  84 + * +---------------+
  85 + * | Explanation |
  86 + * +---------------+
  87 + */
  88 + TableView view = TableView::New( 4, 1 );
  89 + view.SetAnchorPoint( AnchorPoint::CENTER );
  90 + view.SetParentOrigin( ParentOrigin::CENTER );
  91 + view.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
  92 +
  93 + view.SetCellAlignment( Toolkit::TableView::CellPosition( 0, 0 ), HorizontalAlignment::CENTER, VerticalAlignment::CENTER );
  94 + view.SetCellAlignment( Toolkit::TableView::CellPosition( 1, 0 ), HorizontalAlignment::CENTER, VerticalAlignment::CENTER );
  95 + view.SetCellAlignment( Toolkit::TableView::CellPosition( 2, 0 ), HorizontalAlignment::CENTER, VerticalAlignment::CENTER );
  96 + view.SetCellAlignment( Toolkit::TableView::CellPosition( 3, 0 ), HorizontalAlignment::CENTER, VerticalAlignment::CENTER );
  97 +
  98 + view.SetCellPadding( Vector2( 14.0f, 7.0f ) );
  99 +
  100 + view.SetRelativeWidth( 0u, 1.0f );
  101 +
  102 + view.SetFitHeight( 0u );
  103 + view.SetRelativeHeight( 1u, 0.5f );
  104 + view.SetRelativeHeight( 2u, 0.5f );
  105 + view.SetFitHeight( 3u );
  106 +
  107 + // Add the title and description to the TableView.
  108 + view.AddChild( title, TableView::CellPosition( 0u, 0u ) );
  109 + view.AddChild( description, TableView::CellPosition( 3u, 0u ) );
  110 +
  111 + /*
  112 + For each of the 2 tree views, we create a small tree of actors as follows:
  113 + ( Note: Clipping is only enabled for B on the bottom tree ).
  114 +
  115 + A
  116 + / \
  117 + Clipping enabled -> B D
  118 + | |
  119 + C E
  120 +
  121 + The correct draw order is "ABCDE" (the same as if clipping was not enabled).
  122 + */
  123 + const float treeYStart = 0.12f;
  124 + const float depthGap = 0.35f;
  125 +
  126 + for( int tree = 0; tree < 2; ++tree )
  127 + {
  128 + Control container = Control::New();
  129 + container.SetAnchorPoint( AnchorPoint::TOP_CENTER );
  130 + container.SetParentOrigin( ParentOrigin::TOP_CENTER );
  131 + container.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
  132 + Vector4 backgroundColor = tree == 0 ? Vector4( 0.77f, 1.0f, 0.77f, 1.0f ) : Vector4( 0.8f, 0.8f, 1.0f, 1.0f );
  133 + container.SetProperty( Control::Property::BACKGROUND, backgroundColor );
  134 + ImageView image[5];
  135 +
  136 + // Loop for each of the 5 images & labels.
  137 + for( int i = 0; i < 5; ++i )
  138 + {
  139 + std::stringstream labelStream;
  140 + labelStream << static_cast<char>( static_cast<char>( i ) + 'A' );
  141 + TextLabel textLabel = TextLabel::New( labelStream.str() );
  142 + textLabel.SetAnchorPoint( AnchorPoint::TOP_CENTER );
  143 +
  144 + image[i] = ImageView::New( images[i] );
  145 + image[i].SetAnchorPoint( AnchorPoint::TOP_CENTER );
  146 +
  147 + // Calculate the relative positioning for the images and labels.
  148 + float depth = static_cast<float>( i == 0 ? 0 : ( ( i - 1 ) % 2 ) + 1 );
  149 +
  150 + if( i == 0 )
  151 + {
  152 + image[i].SetParentOrigin( Vector3( 0.5f, treeYStart, 0.5f ) );
  153 + textLabel.SetParentOrigin( Vector3( 1.0f, 0.05f * depth, 0.5f ) );
  154 + }
  155 + else
  156 + {
  157 + float b = i > 2 ? 1.0f : -1.0f;
  158 + image[i].SetParentOrigin( Vector3( 0.5f + ( 0.2f * b ), depthGap, 0.5f ) );
  159 + textLabel.SetParentOrigin( Vector3( 0.98f + 0.215f * b + ( 0.04f * b * depth ), treeYStart + 0.02f + ( 0.16f * depth ), 0.5f ) );
  160 + }
  161 +
  162 + container.Add( textLabel );
  163 + }
  164 +
  165 + // Create the title label.
  166 + std::string treeText = tree == 0 ? "Without Clipping" : "With Clipping";
  167 + TextLabel treeLabel = TextLabel::New( treeText );
  168 + treeLabel.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
  169 + treeLabel.SetProperty( TextLabel::Property::VERTICAL_ALIGNMENT, "BOTTOM" );
  170 + treeLabel.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER );
  171 + treeLabel.SetParentOrigin( ParentOrigin::BOTTOM_CENTER );
  172 + container.Add( treeLabel );
  173 +
  174 + // Enable clipping for the 2nd tree.
  175 + if( tree == 1 )
  176 + {
  177 + image[1].SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN );
  178 + }
  179 +
  180 + // Build the tree structure.
  181 + container.Add( image[0] );
  182 +
  183 + image[0].Add( image[1] );
  184 + image[1].Add( image[2] );
  185 +
  186 + image[0].Add( image[3] );
  187 + image[3].Add( image[4] );
  188 +
  189 + // Add the finished tree to the TableView.
  190 + view.AddChild( container, TableView::CellPosition( 1u + tree, 0u ) );
  191 + }
  192 +
  193 + // Add the finished TableView to the stage.
  194 + stage.Add( view );
  195 +
  196 + // Respond to a click anywhere on the stage
  197 + stage.GetRootLayer().TouchSignal().Connect( this, &ClippingDrawOrderVerification::OnTouch );
  198 + }
  199 +
  200 + bool OnTouch( Actor actor, const TouchData& touch )
  201 + {
  202 + // Quit the application.
  203 + mApplication.Quit();
  204 + return true;
  205 + }
  206 +
  207 +private:
  208 + Application& mApplication;
  209 +};
  210 +
  211 +void RunVerification( Application& application )
  212 +{
  213 + ClippingDrawOrderVerification verification( application );
  214 +
  215 + application.MainLoop();
  216 +}
  217 +
  218 +// Entry point for Linux & Tizen applications.
  219 +int DALI_EXPORT_API main( int argc, char **argv )
  220 +{
  221 + Application application = Application::New( &argc, &argv );
  222 +
  223 + RunVerification( application );
  224 +
  225 + return 0;
  226 +}
... ...
resources/po/en_GB.po
... ... @@ -22,6 +22,9 @@ msgstr &quot;Buttons&quot;
22 22 msgid "DALI_DEMO_STR_TITLE_CLIPPING"
23 23 msgstr "Clipping"
24 24  
  25 +msgid "DALI_DEMO_STR_TITLE_CLIPPING_DRAW_ORDER"
  26 +msgstr "Clipping Draw Order"
  27 +
25 28 msgid "DALI_DEMO_STR_TITLE_COLOR_GRADIENT"
26 29 msgstr "Colour Gradient"
27 30  
... ...
resources/po/en_US.po
... ... @@ -22,6 +22,9 @@ msgstr &quot;Buttons&quot;
22 22 msgid "DALI_DEMO_STR_TITLE_CLIPPING"
23 23 msgstr "Clipping"
24 24  
  25 +msgid "DALI_DEMO_STR_TITLE_CLIPPING_DRAW_ORDER"
  26 +msgstr "Clipping Draw Order"
  27 +
25 28 msgid "DALI_DEMO_STR_TITLE_COLOR_GRADIENT"
26 29 msgstr "Color Gradient"
27 30  
... ...
resources/po/ko.po
... ... @@ -19,6 +19,9 @@ msgstr &quot;버튼&quot;
19 19 msgid "DALI_DEMO_STR_TITLE_CLIPPING"
20 20 msgstr "깎는"
21 21  
  22 +msgid "DALI_DEMO_STR_TITLE_CLIPPING_DRAW_ORDER"
  23 +msgstr "드로잉 순서를 클리핑"
  24 +
22 25 msgid "DALI_DEMO_STR_TITLE_COLOR_GRADIENT"
23 26 msgstr "색상 그라디언트"
24 27  
... ...
shared/dali-demo-strings.h
... ... @@ -40,6 +40,7 @@ extern &quot;C&quot;
40 40 #define DALI_DEMO_STR_TITLE_BUBBLES dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_BUBBLES")
41 41 #define DALI_DEMO_STR_TITLE_BUTTONS dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_BUTTONS")
42 42 #define DALI_DEMO_STR_TITLE_CLIPPING dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_CLIPPING")
  43 +#define DALI_DEMO_STR_TITLE_CLIPPING_DRAW_ORDER dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_CLIPPING_DRAW_ORDER")
43 44 #define DALI_DEMO_STR_TITLE_COLOR_GRADIENT dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_COLOR_GRADIENT")
44 45 #define DALI_DEMO_STR_TITLE_CONTACT_CARDS dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_CONTACT_CARDS")
45 46 #define DALI_DEMO_STR_TITLE_CUBE_TRANSITION dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_CUBE_TRANSITION")
... ... @@ -107,6 +108,7 @@ extern &quot;C&quot;
107 108 #define DALI_DEMO_STR_TITLE_BUBBLES "Bubbles"
108 109 #define DALI_DEMO_STR_TITLE_BUTTONS "Buttons"
109 110 #define DALI_DEMO_STR_TITLE_CLIPPING "Clipping"
  111 +#define DALI_DEMO_STR_TITLE_CLIPPING_DRAW_ORDER "Clipping Draw Order"
110 112 #define DALI_DEMO_STR_TITLE_COLOR_GRADIENT "Color Gradient"
111 113 #define DALI_DEMO_STR_TITLE_CONTACT_CARDS "Contact Cards"
112 114 #define DALI_DEMO_STR_TITLE_CUBE_TRANSITION "Cube Effect"
... ...