2 * Copyright (c) 2015 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 * @file message-field-example.cpp
20 * @brief Basic usage of TextField control
24 #include <dali-toolkit/dali-toolkit.h>
27 using namespace Dali::Toolkit;
31 const char* DESKTOP_IMAGE( DEMO_IMAGE_DIR "woodEffect.jpg" );
32 const Vector2 DESKTOP_SIZE( Vector2( 1440, 1600 ) );
33 const Vector2 PHOTOBOX_SIZE( Vector2(330.0f, 80.0f ) );
34 const float MAX_OFFSCREEN_RENDERING_SIZE = 2048.f;
35 const float SCREEN_BORDER = 5.0f; // Border around screen that Popups and handles will not exceed
38 * @brief The main class of the demo.
40 class TextMessageFieldExample : public ConnectionTracker
44 TextMessageFieldExample( Application& application )
45 : mApplication( application ),
46 mTargetActorPosition(),
49 // Connect to the Application's Init signal
50 mApplication.InitSignal().Connect( this, &TextMessageFieldExample::Create );
53 ~TextMessageFieldExample()
55 // Nothing to do here.
59 * One-time setup in response to Application InitSignal.
61 void Create( Application& application )
63 Stage stage = Stage::GetCurrent();
64 mStageSize = stage.GetSize();
66 stage.KeyEventSignal().Connect(this, &TextMessageFieldExample::OnKeyEvent);
69 Actor rootActor = Actor::New();
70 rootActor.SetName("rootActor");
71 rootActor.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
72 rootActor.SetSize( mStageSize );
73 rootActor.SetAnchorPoint( AnchorPoint::TOP_LEFT );
75 stage.Add( rootActor );
77 const Size mTargetActorSize( mStageSize.width, DESKTOP_SIZE.height );
80 ImageView desktop = ImageView::New( DESKTOP_IMAGE );
81 desktop.SetName("desktopActor");
82 desktop.SetAnchorPoint( AnchorPoint::TOP_LEFT );
83 desktop.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
84 desktop.SetSize( mTargetActorSize );
86 rootActor.Add( desktop ); // Add desktop (content) to offscreen actor
89 Control photoBoxA = Control::New();
91 Dali::Property::Map border;
92 border.Insert( "rendererType", "borderRenderer" );
93 border.Insert( "borderColor", Color::WHITE );
94 border.Insert( "borderSize", 1.f );
95 photoBoxA.SetProperty( Control::Property::BACKGROUND, border );
97 photoBoxA.SetName("photoBoxA");
98 photoBoxA.SetAnchorPoint( AnchorPoint::CENTER );
99 photoBoxA.SetParentOrigin( ParentOrigin::CENTER );
100 photoBoxA.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
101 photoBoxA.SetSize( PHOTOBOX_SIZE );
102 photoBoxA.SetPosition( 0.0f, -500.0f, 1.0f );
103 desktop.Add( photoBoxA );
106 TextField field = TextField::New();
107 field.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
108 field.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
109 field.SetPadding( Padding( 1.0f, 1.0f, 1.0f, 1.0f ) );
110 field.SetAnchorPoint( AnchorPoint::TOP_LEFT );
111 field.SetProperty( TextField::Property::TEXT, "Enter Title name" );
112 field.SetProperty( TextField::Property::DECORATION_BOUNDING_BOX, Rect<int>( SCREEN_BORDER, SCREEN_BORDER, mStageSize.width - SCREEN_BORDER*2, mStageSize.height - SCREEN_BORDER*2 ) );
113 photoBoxA.Add( field );
115 mPanGestureDetector = PanGestureDetector::New();
116 mPanGestureDetector.DetectedSignal().Connect(this, &TextMessageFieldExample::OnPanGesture );
117 mPanGestureDetector.Attach( desktop );
121 * Main key event handler
123 void OnKeyEvent(const KeyEvent& event)
125 if(event.state == KeyEvent::Down)
127 if( IsKey( event, DALI_KEY_ESCAPE) || IsKey( event, DALI_KEY_BACK ) )
134 void OnPanGesture( Actor actor, const PanGesture& gesture )
136 if( gesture.state == Gesture::Continuing )
138 Vector2 position = Vector2( gesture.displacement );
139 mTargetActorPosition.y = mTargetActorPosition.y + position.y;
140 mTargetActorPosition.y = std::min( mTargetActorPosition.y, -mTargetActorSize.height );
141 mTargetActorPosition.y = std::max( mTargetActorPosition.y, ( mTargetActorSize.height - mStageSize.height*0.25f ) );
142 actor.SetPosition( 0.0f, mTargetActorPosition.y );
148 Application& mApplication;
149 PanGestureDetector mPanGestureDetector;
151 Vector2 mTargetActorPosition;
152 Vector2 mTargetActorSize;
156 void RunTest( Application& application )
158 TextMessageFieldExample test( application );
160 application.MainLoop();
163 /** Entry point for Linux & Tizen applications */
164 int main( int argc, char **argv )
166 Application application = Application::New( &argc, &argv, DEMO_THEME_PATH );
168 RunTest( application );