[3.0] Added a simple application for testing Styling
[platform/core/uifw/dali-demo.git] / examples / styling / image-channel-control.h
1 #ifndef DALI_DEMO_IMAGE_CHANNEL_CONTROL_H
2 #define DALI_DEMO_IMAGE_CHANNEL_CONTROL_H
3
4 /*
5  * Copyright (c) 2016 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 #include <dali-toolkit/dali-toolkit.h>
21 #include <string>
22
23 namespace Demo
24 {
25
26 namespace Internal
27 {
28 // All type registered types need to have the same name for the body and the handle
29 class ImageChannelControl;
30 }
31
32 /**
33  * Control that allows the RGB channels of an image to be altered.
34  */
35 class ImageChannelControl : public Dali::Toolkit::Control
36 {
37 public:
38   /**
39    * The start and end property ranges for this control
40    */
41   enum PropertyRange
42   {
43     PROPERTY_START_INDEX = Dali::Toolkit::Control::CONTROL_PROPERTY_END_INDEX + 1,
44     PROPERTY_END_INDEX   = PROPERTY_START_INDEX + 1000,
45
46     ANIMATABLE_PROPERTY_START_INDEX = Dali::ANIMATABLE_PROPERTY_REGISTRATION_START_INDEX,
47     ANIMATABLE_PROPERTY_END_INDEX = ANIMATABLE_PROPERTY_START_INDEX+1000
48   };
49
50   struct Property
51   {
52     enum
53     {
54
55       RESOURCE_URL = PROPERTY_START_INDEX,
56       RED_CHANNEL,
57       GREEN_CHANNEL,
58       BLUE_CHANNEL
59     };
60   };
61
62 public: // Construction / destruction
63
64   /**
65    * Create an uninitialized handle
66    */
67   ImageChannelControl();
68
69   /**
70    * Create a new image channel control without an image. Use
71    * SetImage to give this control an image
72    */
73   static ImageChannelControl New();
74
75   /**
76    * Create a new image channel control from a given URL
77    */
78   static ImageChannelControl New( const std::string& url );
79
80   /**
81    * Destructor. This is non-virtual since derived Handle types must not
82    * contain data or virtual methods
83    */
84   ~ImageChannelControl();
85
86   /**
87    * Copy Constructor
88    */
89   ImageChannelControl( const ImageChannelControl& imageChannelControl );
90
91   /**
92    * Assignment Operator
93    */
94   ImageChannelControl& operator=( const ImageChannelControl& imageChannelControl );
95
96   /**
97    * Downcast
98    */
99   static ImageChannelControl DownCast( BaseHandle handle );
100
101 public: // API
102
103   /**
104    * Set the image for this ImageChannelControl
105    * @param[in] url The url of the image resource
106    */
107   void SetImage( const std::string& url );
108
109 public: // Not for public use
110   /**
111    * Create a handle from an implementation
112    */
113   ImageChannelControl( Internal::ImageChannelControl& implementation );
114
115   /**
116    * Allow the creation of an ImageChannelControl handle from an internal CustomActor pointer
117    */
118   ImageChannelControl( Dali::Internal::CustomActor* internal );
119 };
120
121 } // namespace Demo
122
123 #endif // DALI_DEMO_IMAGE_CHANNEL_CONTROL_H