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( DALI_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 ImageActor photoBoxA = CreateSolidColorActor( Vector4(0,0,0,0), true, Color::WHITE, 1 );
90 photoBoxA.SetName("photoBoxA");
91 photoBoxA.SetAnchorPoint( AnchorPoint::CENTER );
92 photoBoxA.SetParentOrigin( ParentOrigin::CENTER );
93 photoBoxA.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
94 photoBoxA.SetSize( PHOTOBOX_SIZE );
95 photoBoxA.SetPosition( 0.0f, -500.0f, 1.0f );
96 desktop.Add( photoBoxA );
99 TextField field = TextField::New();
100 field.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
101 field.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
102 field.SetPadding( Padding( 1.0f, 1.0f, 1.0f, 1.0f ) );
103 field.SetAnchorPoint( AnchorPoint::TOP_LEFT );
105 field.SetProperty( TextField::Property::TEXT, "Enter Title name" );
106 field.SetProperty( TextField::Property::DECORATION_BOUNDING_BOX, Rect<int>( SCREEN_BORDER, SCREEN_BORDER, mStageSize.width - SCREEN_BORDER*2, mStageSize.height - SCREEN_BORDER*2 ) );
107 photoBoxA.Add( field );
109 mPanGestureDetector = PanGestureDetector::New();
110 mPanGestureDetector.DetectedSignal().Connect(this, &TextMessageFieldExample::OnPanGesture );
111 mPanGestureDetector.Attach( desktop );
115 * Main key event handler
117 void OnKeyEvent(const KeyEvent& event)
119 if(event.state == KeyEvent::Down)
121 if( IsKey( event, DALI_KEY_ESCAPE) || IsKey( event, DALI_KEY_BACK ) )
128 void OnPanGesture( Actor actor, const PanGesture& gesture )
130 if( gesture.state == Gesture::Continuing )
132 Vector2 position = Vector2( gesture.displacement );
133 mTargetActorPosition.y = mTargetActorPosition.y + position.y;
134 mTargetActorPosition.y = std::min( mTargetActorPosition.y, -mTargetActorSize.height );
135 mTargetActorPosition.y = std::max( mTargetActorPosition.y, ( mTargetActorSize.height - mStageSize.height*0.25f ) );
136 actor.SetPosition( 0.0f, mTargetActorPosition.y );
142 Application& mApplication;
143 PanGestureDetector mPanGestureDetector;
145 Vector2 mTargetActorPosition;
146 Vector2 mTargetActorSize;
150 void RunTest( Application& application )
152 TextMessageFieldExample test( application );
154 application.MainLoop();
157 /** Entry point for Linux & Tizen applications */
158 int main( int argc, char **argv )
160 Application application = Application::New( &argc, &argv, DALI_DEMO_THEME_PATH );
162 RunTest( application );