diff options
author | minho.sun <minho.sun@samsung.com> | 2017-03-06 15:54:47 +0900 |
---|---|---|
committer | Richard Huang <r.huang@samsung.com> | 2017-03-09 17:48:35 +0000 |
commit | dbe9b795d03114abef61adda554b558a38c94d8e (patch) | |
tree | 20a793eb1af5d0b961ec54decee0234ff030e229 | |
parent | fde46e3e0078d155bd9d9dc2e97b409b49453e59 (diff) | |
download | dali-demo-dbe9b795d03114abef61adda554b558a38c94d8e.tar.gz dali-demo-dbe9b795d03114abef61adda554b558a38c94d8e.tar.bz2 dali-demo-dbe9b795d03114abef61adda554b558a38c94d8e.zip |
Focus Integration Sample
You can check the InputFocus is given to focused Control.
After that, when key is pressed, focused control's KeyEvent callback will be called.
Change-Id: I93c605e7bcde5505099948445c762873f57e8381
Signed-off-by: minho.sun <minho.sun@samsung.com>
-rw-r--r-- | com.samsung.dali-demo.xml | 3 | ||||
-rw-r--r-- | examples-reel/dali-examples-reel.cpp | 1 | ||||
-rw-r--r-- | examples/focus-integration/focus-integration.cpp | 204 | ||||
-rwxr-xr-x | resources/po/en_GB.po | 3 | ||||
-rwxr-xr-x | resources/po/en_US.po | 3 | ||||
-rw-r--r-- | shared/dali-demo-strings.h | 2 |
6 files changed, 216 insertions, 0 deletions
diff --git a/com.samsung.dali-demo.xml b/com.samsung.dali-demo.xml index 17056782..e26f63ac 100644 --- a/com.samsung.dali-demo.xml +++ b/com.samsung.dali-demo.xml @@ -197,4 +197,7 @@ <ui-application appid="pivot.example" exec="/usr/apps/com.samsung.dali-demo/bin/pivot.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true"> <label>Clipping</label> </ui-application> + <ui-application appid="focus-integration.example" exec="/usr/apps/com.samsung.dali-demo/bin/focus-integration.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true"> + <label>Focus Integration</label> + </ui-application> </manifest> diff --git a/examples-reel/dali-examples-reel.cpp b/examples-reel/dali-examples-reel.cpp index 2995ea89..adc351d8 100644 --- a/examples-reel/dali-examples-reel.cpp +++ b/examples-reel/dali-examples-reel.cpp @@ -44,6 +44,7 @@ int DALI_EXPORT_API main(int argc, char **argv) demo.AddExample(Example("dissolve-effect.example", DALI_DEMO_STR_TITLE_DISSOLVE_TRANSITION)); demo.AddExample(Example("effects-view.example", DALI_DEMO_STR_TITLE_EFFECTS_VIEW)); demo.AddExample(Example("flex-container.example", DALI_DEMO_STR_TITLE_FLEXBOX_PLAYGROUND)); + demo.AddExample(Example("focus-integration.example", DALI_DEMO_STR_TITLE_FOCUS_INTEGRATION)); demo.AddExample(Example("gradients.example", DALI_DEMO_STR_TITLE_COLOR_GRADIENT)); demo.AddExample(Example("image-scaling-and-filtering.example", DALI_DEMO_STR_TITLE_IMAGE_FITTING_SAMPLING)); demo.AddExample(Example("image-scaling-irregular-grid.example", DALI_DEMO_STR_TITLE_IMAGE_SCALING)); diff --git a/examples/focus-integration/focus-integration.cpp b/examples/focus-integration/focus-integration.cpp new file mode 100644 index 00000000..10520b9a --- /dev/null +++ b/examples/focus-integration/focus-integration.cpp @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "shared/view.h" +#include <dali-toolkit/dali-toolkit.h> + +using namespace Dali; +using namespace Dali::Toolkit; + +namespace +{ + +const char* const BACKGROUND_IMAGE = DEMO_IMAGE_DIR "background-gradient.jpg"; +const char* const TOOLBAR_IMAGE = DEMO_IMAGE_DIR "top-bar.png"; +const char* const TOOLBAR_TITLE = "Focus Integration"; +const Vector4 BACKGROUND_COLOUR( 1.0f, 1.0f, 1.0f, 0.15f ); + +// Layout sizes +const int MARGIN_SIZE = 10; +const int TOP_MARGIN = 85; +const std::string ITEMNAME[] = { "TextLabel", "TextField", "TextEditor", "PushButton", "RadioButton", "CheckBoxButton" }; + +} // namespace + +/** + * @brief Shows how integrated DALi Focus works. + */ +class FocusIntegrationExample: public ConnectionTracker +{ +public: + + FocusIntegrationExample( Application& application ) + : mApplication( application ) + { + // Connect to the Application's Init signal + mApplication.InitSignal().Connect( this, &FocusIntegrationExample::Create ); + } + + void Create( Application& application ) + { + mStage = Stage::GetCurrent(); + mContentLayer = DemoHelper::CreateView( application, + mView, + mToolBar, + BACKGROUND_IMAGE, + TOOLBAR_IMAGE, + TOOLBAR_TITLE ); + + TableView contentTable = TableView::New(2, 1); + contentTable.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH); + contentTable.SetResizePolicy(ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT); + contentTable.SetAnchorPoint(AnchorPoint::TOP_LEFT); + contentTable.SetParentOrigin(ParentOrigin::TOP_LEFT); + contentTable.SetCellPadding(Size(MARGIN_SIZE, MARGIN_SIZE * 0.5f)); + contentTable.SetKeyboardFocusable(true); + + for( unsigned int i = 0; i < contentTable.GetRows(); ++i ) + { + contentTable.SetFitHeight( i ); + } + contentTable.SetPosition( 0.0f, TOP_MARGIN ); + mContentLayer.Add( contentTable ); + + // Create label to display which control's KeyEvent callback is called + mEventLabel = TextLabel::New("Controls don't get KeyEvent yet"); + mEventLabel.SetSize( mStage.GetSize().width, mStage.GetSize().height*0.1f ); + mEventLabel.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH); + mEventLabel.SetProperty( TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" ); + mEventLabel.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" ); + mEventLabel.SetBackgroundColor( Color::WHITE ); + contentTable.Add( mEventLabel ); + + mContainer = TableView::New( 4, 3 ); + mContainer.SetSize( mStage.GetSize().width, mStage.GetSize().height*0.4f ); + mContainer.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH); + mContainer.SetBackgroundColor( BACKGROUND_COLOUR ); + mContainer.SetCellPadding( Size( MARGIN_SIZE, MARGIN_SIZE ) ); + mContainer.SetRelativeHeight( 0, 0.2f); + mContainer.SetRelativeHeight( 1, 0.3f); + mContainer.SetRelativeHeight( 2, 0.2f); + mContainer.SetRelativeHeight( 3, 0.3f); + mContainer.SetKeyboardFocusable(true); + contentTable.Add( mContainer ); + + // Make name label for each controls + for(int i = 0; i < 6; i++) + { + TextLabel itemLabel = TextLabel::New( ITEMNAME[i] ); + itemLabel.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); + itemLabel.SetBackgroundColor( BACKGROUND_COLOUR ); + itemLabel.SetProperty( TextLabel::Property::POINT_SIZE, 14.0f ); + itemLabel.SetProperty( TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" ); + itemLabel.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" ); + mContainer.AddChild( itemLabel, TableView::CellPosition( (i/3)*2, i%3 ) ); + } + + TextLabel textLabel = TextLabel::New("TextLabel"); + mContainer.AddChild( textLabel, TableView::CellPosition( 1, 0 ) ); + + TextField textField = TextField::New(); + textField.SetBackgroundColor( Color::WHITE ); + textField.SetProperty( TextField::Property::TEXT, "Text" ); + mContainer.AddChild( textField, TableView::CellPosition( 1, 1 ) ); + + TextEditor textEditor = TextEditor::New(); + textEditor.SetBackgroundColor( Color::WHITE ); + textEditor.SetProperty( TextEditor::Property::TEXT, "Text\nText" ); + mContainer.AddChild( textEditor, TableView::CellPosition( 1, 2 ) ); + + PushButton pushButton = PushButton::New(); + mContainer.AddChild( pushButton, TableView::CellPosition( 3, 0 ) ); + + RadioButton radioButton = RadioButton::New(); + mContainer.AddChild( radioButton, TableView::CellPosition( 3, 1 ) ); + + CheckBoxButton checkBoxButton = CheckBoxButton::New(); + mContainer.AddChild( checkBoxButton, TableView::CellPosition( 3, 2 ) ); + + // Set name and keyboard focusable for each controls + for(int i = 0; i<6; i++) + { + Control control = Control::DownCast( mContainer.GetChildAt( TableView::CellPosition( (i/3)*2+1, i%3 ) ) ); + control.SetKeyboardFocusable(true); + control.SetName(ITEMNAME[i]); + control.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); + control.KeyEventSignal().Connect( this, &FocusIntegrationExample::OnControlKeyEvent ); + } + + KeyboardFocusManager::Get().PreFocusChangeSignal().Connect( this, &FocusIntegrationExample::OnPreFocusChange ); + } + + // Callback for KeyboardFocusManager + Actor OnPreFocusChange( Actor current, Actor next, Control::KeyboardFocus::Direction direction ) + { + if( !current && !next ) + { + next = mContainer.GetChildAt( TableView::CellPosition( 1, 0 ) ); + } + return next; + } + + // Callback for each controls. + // Display current control name. + bool OnControlKeyEvent( Control control, const KeyEvent& event ) + { + std::string controlName = control.GetName(); + mEventLabel.SetProperty( TextLabel::Property::TEXT, controlName+"'s KeyEvent works\n" ); + + return false; + } + +private: + + /** + * Main key event handler + */ + void OnKeyEvent(const KeyEvent& event) + { + if(event.state == KeyEvent::Down) + { + if( IsKey( event, DALI_KEY_ESCAPE) || IsKey( event, DALI_KEY_BACK ) ) + { + mApplication.Quit(); + } + } + } + +private: + + Application& mApplication; + Stage mStage; + TableView mContainer; + TextLabel mEventLabel; + Toolkit::Control mView; ///< The View instance. + Toolkit::ToolBar mToolBar; ///< The View's Toolbar. + Layer mContentLayer; ///< Content layer. +}; + +// Entry point for Linux & Tizen applications +// +int DALI_EXPORT_API main( int argc, char **argv ) +{ + Application application = Application::New( &argc, &argv ); + + FocusIntegrationExample test( application ); + + application.MainLoop(); + + return 0; +} diff --git a/resources/po/en_GB.po b/resources/po/en_GB.po index 6ab45311..ed2233a0 100755 --- a/resources/po/en_GB.po +++ b/resources/po/en_GB.po @@ -168,3 +168,6 @@ msgstr "Draw triangle" msgid "DALI_DEMO_STR_TITLE_RENDERING_DRAW_LINE" msgstr "Draw line" + +msgid "DALI_DEMO_STR_TITLE_FOCUS_INTEGRATION" +msgstr "Focus integration" diff --git a/resources/po/en_US.po b/resources/po/en_US.po index bdf64d47..cc16c773 100755 --- a/resources/po/en_US.po +++ b/resources/po/en_US.po @@ -168,3 +168,6 @@ msgstr "Draw triangle" msgid "DALI_DEMO_STR_TITLE_RENDERING_DRAW_LINE" msgstr "Draw line" + +msgid "DALI_DEMO_STR_TITLE_FOCUS_INTEGRATION" +msgstr "Focus integration" diff --git a/shared/dali-demo-strings.h b/shared/dali-demo-strings.h index 11be2f68..fc182de7 100644 --- a/shared/dali-demo-strings.h +++ b/shared/dali-demo-strings.h @@ -46,6 +46,7 @@ extern "C" #define DALI_DEMO_STR_TITLE_EMOJI_TEXT dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_EMOJI_TEXT") #define DALI_DEMO_STR_TITLE_FPP_GAME dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_FPP_GAME") #define DALI_DEMO_STR_TITLE_FLEXBOX_PLAYGROUND dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_FLEXBOX_PLAYGROUND") +#define DALI_DEMO_STR_TITLE_FOCUS_INTEGRATION dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_FOCUS_INTEGRATION") #define DALI_DEMO_STR_TITLE_IMAGE_FITTING_SAMPLING dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_IMAGE_FITTING_SAMPLING") #define DALI_DEMO_STR_TITLE_IMAGE_SCALING dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_IMAGE_SCALING") #define DALI_DEMO_STR_TITLE_IMAGE_VIEW dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_IMAGE_VIEW") @@ -105,6 +106,7 @@ extern "C" #define DALI_DEMO_STR_TITLE_EMOJI_TEXT "Emoji Text" #define DALI_DEMO_STR_TITLE_FPP_GAME "First Person Game" #define DALI_DEMO_STR_TITLE_FLEXBOX_PLAYGROUND "Flexbox Playground" +#define DALI_DEMO_STR_TITLE_FOCUS_INTEGRATION "Focus Integration" #define DALI_DEMO_STR_TITLE_IMAGE_FITTING_SAMPLING "Image Fitting and Sampling" #define DALI_DEMO_STR_TITLE_IMAGE_SCALING "Image Scaling Grid" #define DALI_DEMO_STR_TITLE_IMAGE_VIEW "Image View" |