Use Window instead of Stage
[platform/core/uifw/dali-demo.git] / shared / view.h
1 #ifndef DALI_DEMO_HELPER_VIEW_H
2 #define DALI_DEMO_HELPER_VIEW_H
3
4 /*
5  * Copyright (c) 2020 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 #include <dali-toolkit/dali-toolkit.h>
22 #include <dali-toolkit/devel-api/controls/tool-bar/tool-bar.h>
23
24
25 namespace DemoHelper
26 {
27
28 /**
29  * Provide a style for the view and its tool bar.
30  */
31 struct ViewStyle
32 {
33   ViewStyle( float toolBarButtonPercentage, float toolBarTitlePercentage, float toolBarHeight, float toolBarPadding )
34   : mToolBarButtonPercentage( toolBarButtonPercentage ),
35     mToolBarTitlePercentage( toolBarTitlePercentage ),
36     mToolBarHeight( toolBarHeight ),
37     mToolBarPadding( toolBarPadding )
38   {}
39
40   float mToolBarButtonPercentage; ///< The tool bar button width is a percentage of the tool bar width.
41   float mToolBarTitlePercentage;  ///< The tool bar title width is a percentage of the tool bar width.
42   float mToolBarHeight;           ///< The tool bar height (in pixels).
43   float mToolBarPadding;          ///< The tool bar padding (in pixels)..
44 };
45
46 const ViewStyle DEFAULT_VIEW_STYLE( 0.1f, 0.7f, 80.f, 4.f );
47
48 const char*                   DEFAULT_TEXT_STYLE_FONT_FAMILY("HelveticaNue");
49 const float                   DEFAULT_TEXT_STYLE_POINT_SIZE( 8.0f );
50
51 const Dali::Toolkit::Alignment::Padding DEFAULT_PLAY_PADDING(12.0f, 12.0f, 12.0f, 12.0f);
52 const Dali::Toolkit::Alignment::Padding DEFAULT_MODE_SWITCH_PADDING(8.0f, 8.0f, 8.0f, 8.0f);
53
54 Dali::Layer CreateToolbar( Dali::Toolkit::ToolBar& toolBar,
55                            const std::string& toolbarImagePath,
56                            const std::string& title,
57                            const ViewStyle& style )
58 {
59   Dali::Layer toolBarLayer = Dali::Layer::New();
60   toolBarLayer.SetProperty( Dali::Actor::Property::NAME, "TOOLBAR_LAYER" );
61   toolBarLayer.SetProperty( Dali::Actor::Property::ANCHOR_POINT, Dali::AnchorPoint::TOP_CENTER );
62   toolBarLayer.SetProperty( Dali::Actor::Property::PARENT_ORIGIN, Dali::ParentOrigin::TOP_CENTER );
63   toolBarLayer.SetResizePolicy( Dali::ResizePolicy::FILL_TO_PARENT, Dali::Dimension::WIDTH );
64   toolBarLayer.SetProperty( Dali::Actor::Property::SIZE, Dali::Vector2( 0.0f, style.mToolBarHeight ) );
65
66   // Raise tool bar layer to the top.
67   toolBarLayer.RaiseToTop();
68
69   // Tool bar
70   toolBar = Dali::Toolkit::ToolBar::New();
71   toolBar.SetProperty( Dali::Actor::Property::NAME, "TOOLBAR" );
72   Dali::Property::Map background;
73   background["url"] = toolbarImagePath;
74   toolBar.SetProperty( Dali::Toolkit::Control::Property::BACKGROUND, background );
75   toolBar.SetProperty( Dali::Actor::Property::PARENT_ORIGIN, Dali::ParentOrigin::TOP_CENTER );
76   toolBar.SetProperty( Dali::Actor::Property::ANCHOR_POINT, Dali::AnchorPoint::TOP_CENTER );
77   toolBar.SetResizePolicy( Dali::ResizePolicy::FILL_TO_PARENT, Dali::Dimension::ALL_DIMENSIONS );
78
79   // Add the tool bar to the tool bar layer.
80   toolBarLayer.Add( toolBar );
81
82   // Tool bar text.
83   if( !title.empty() )
84   {
85     Dali::Toolkit::TextLabel label = Dali::Toolkit::TextLabel::New();
86     label.SetProperty( Dali::Actor::Property::ANCHOR_POINT, Dali::AnchorPoint::TOP_LEFT );
87     label.SetStyleName( "ToolbarLabel" );
88     label.SetProperty( Dali::Toolkit::TextLabel::Property::TEXT, title );
89     label.SetProperty( Dali::Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
90     label.SetProperty( Dali::Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
91     label.SetResizePolicy( Dali::ResizePolicy::FILL_TO_PARENT, Dali::Dimension::HEIGHT );
92
93     // Add title to the tool bar.
94     const float padding( style.mToolBarPadding );
95     toolBar.AddControl( label, style.mToolBarTitlePercentage, Dali::Toolkit::Alignment::HorizontalCenter, Dali::Toolkit::Alignment::Padding( padding, padding, padding, padding ) );
96   }
97
98   return toolBarLayer;
99 }
100
101 Dali::Layer CreateView( Dali::Application& application,
102                         Dali::Toolkit::Control& view,
103                         Dali::Toolkit::ToolBar& toolBar,
104                         const std::string& backgroundImagePath,
105                         const std::string& toolbarImagePath,
106                         const std::string& title,
107                         const ViewStyle& style = DEFAULT_VIEW_STYLE )
108 {
109   Dali::Window window = application.GetWindow();
110
111   // Create default View.
112   view = Dali::Toolkit::Control::New();
113   view.SetProperty( Dali::Actor::Property::ANCHOR_POINT, Dali::AnchorPoint::CENTER );
114   view.SetProperty( Dali::Actor::Property::PARENT_ORIGIN, Dali::ParentOrigin::CENTER );
115   view.SetResizePolicy( Dali::ResizePolicy::FILL_TO_PARENT, Dali::Dimension::ALL_DIMENSIONS );
116
117   // Add the view to the window before setting the background.
118   window.Add( view );
119
120   // Set background image, loading it at screen resolution:
121   if ( !backgroundImagePath.empty() )
122   {
123     Dali::Property::Map map;
124     map[Dali::Toolkit::Visual::Property::TYPE] = Dali::Toolkit::Visual::IMAGE;
125     map[Dali::Toolkit::ImageVisual::Property::URL] = backgroundImagePath;
126     map[Dali::Toolkit::ImageVisual::Property::DESIRED_WIDTH] = window.GetSize().GetWidth();
127     map[Dali::Toolkit::ImageVisual::Property::DESIRED_HEIGHT] = window.GetSize().GetHeight();
128     map[Dali::Toolkit::ImageVisual::Property::FITTING_MODE] = Dali::FittingMode::SCALE_TO_FILL;
129     map[Dali::Toolkit::ImageVisual::Property::SAMPLING_MODE] = Dali::SamplingMode::BOX_THEN_LINEAR;
130     map[Dali::Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING] = true;
131     view.SetProperty( Dali::Toolkit::Control::Property::BACKGROUND, map );
132   }
133
134   // Create default ToolBar
135   Dali::Layer toolBarLayer = CreateToolbar( toolBar, toolbarImagePath, title, style );
136
137   // Add tool bar layer to the view.
138   view.Add( toolBarLayer );
139
140   // Create a content layer.
141   Dali::Layer contentLayer = Dali::Layer::New();
142   contentLayer.SetProperty( Dali::Actor::Property::ANCHOR_POINT, Dali::AnchorPoint::CENTER );
143   contentLayer.SetProperty( Dali::Actor::Property::PARENT_ORIGIN, Dali::ParentOrigin::CENTER );
144   contentLayer.SetResizePolicy( Dali::ResizePolicy::FILL_TO_PARENT, Dali::Dimension::ALL_DIMENSIONS );
145   view.Add( contentLayer );
146   contentLayer.LowerBelow( toolBarLayer );
147
148   return contentLayer;
149 }
150
151 Dali::Toolkit::TextLabel CreateToolBarLabel( const std::string& text )
152 {
153   Dali::Toolkit::TextLabel label = Dali::Toolkit::TextLabel::New( text );
154   label.SetStyleName( "ToolbarLabel" );
155   label.SetProperty( Dali::Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
156   label.SetProperty( Dali::Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
157   label.SetResizePolicy( Dali::ResizePolicy::FILL_TO_PARENT, Dali::Dimension::HEIGHT );
158
159   return label;
160 }
161
162 } // DemoHelper
163
164 #endif // DALI_DEMO_HELPER_VIEW_H