/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 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.
// EXTERNAL INCLUDES
#include <algorithm>
-#include <sstream>
-#include <unistd.h>
+#include <dali/devel-api/actors/actor-devel.h>
#include <dali/devel-api/images/distance-field.h>
#include <dali-toolkit/devel-api/shader-effects/alpha-discard-effect.h>
#include <dali-toolkit/devel-api/shader-effects/distance-field-effect.h>
#include <dali-toolkit/dali-toolkit.h>
#include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
+#include <dali-toolkit/devel-api/accessibility-manager/accessibility-manager.h>
+#include <dali-toolkit/devel-api/controls/table-view/table-view.h>
// INTERNAL INCLUDES
-#include "shared/view.h"
+#include "shared/execute-process.h"
#include "shared/utility.h"
+#include "shared/view.h"
using namespace Dali;
using namespace Dali::Toolkit;
Control CreateBackground( std::string stylename )
{
Control background = Control::New();
- Stage::GetCurrent().Add( background );
background.SetStyleName( stylename );
- background.SetName( "BACKGROUND" );
- background.SetAnchorPoint( AnchorPoint::CENTER );
- background.SetParentOrigin( ParentOrigin::CENTER );
+ background.SetProperty( Actor::Property::NAME, "BACKGROUND" );
+ background.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER );
+ background.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
background.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
return background;
}
void DaliTableView::Initialize( Application& application )
{
- Stage::GetCurrent().KeyEventSignal().Connect( this, &DaliTableView::OnKeyEvent );
- const Vector2 stageSize = Stage::GetCurrent().GetSize();
+ Window window = application.GetWindow();
+ window.KeyEventSignal().Connect( this, &DaliTableView::OnKeyEvent );
+ const Window::WindowSize windowSize = window.GetSize();
// Background
mRootActor = CreateBackground( "LauncherBackground" );
- Stage::GetCurrent().Add( mRootActor );
+ window.Add( mRootActor );
// Add logo
ImageView logo = ImageView::New( LOGO_PATH );
- logo.SetName( "LOGO_IMAGE" );
- logo.SetAnchorPoint( AnchorPoint::TOP_CENTER );
- logo.SetParentOrigin( Vector3( 0.5f, 0.1f, 0.5f ) );
+ logo.SetProperty( Actor::Property::NAME, "LOGO_IMAGE" );
+ logo.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_CENTER );
+ logo.SetProperty( Actor::Property::PARENT_ORIGIN, Vector3( 0.5f, 0.1f, 0.5f ) );
logo.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
// The logo should appear on top of everything.
- logo.SetDrawMode( DrawMode::OVERLAY_2D );
+ logo.SetProperty( Actor::Property::DRAW_MODE, DrawMode::OVERLAY_2D );
mRootActor.Add( logo );
// Show version in a popup when log is tapped
// Scrollview occupying the majority of the screen
mScrollView = ScrollView::New();
- mScrollView.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER );
- mScrollView.SetParentOrigin( Vector3( 0.5f, 1.0f - 0.05f, 0.5f ) );
+ mScrollView.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_CENTER );
+ mScrollView.SetProperty( Actor::Property::PARENT_ORIGIN, Vector3( 0.5f, 1.0f - 0.05f, 0.5f ) );
mScrollView.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
mScrollView.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::HEIGHT );
- mScrollView.SetSizeModeFactor( Vector3( 0.0f, 0.6f, 0.0f ) );
+ mScrollView.SetProperty( Actor::Property::SIZE_MODE_FACTOR, Vector3( 0.0f, 0.6f, 0.0f ) );
- const float buttonsPageMargin = ( 1.0f - TABLE_RELATIVE_SIZE.x ) * 0.5f * stageSize.width;
- mScrollView.SetPadding( Padding( buttonsPageMargin, buttonsPageMargin, 0.0f, 0.0f ) );
+ const float buttonsPageMargin = ( 1.0f - TABLE_RELATIVE_SIZE.x ) * 0.5f * windowSize.GetWidth();
+ mScrollView.SetProperty( Actor::Property::PADDING, Padding( buttonsPageMargin, buttonsPageMargin, 0.0f, 0.0f ) );
mScrollView.SetAxisAutoLock( true );
mScrollView.ScrollCompletedSignal().Connect( this, &DaliTableView::OnScrollComplete );
mScrollView.ScrollStartedSignal().Connect( this, &DaliTableView::OnScrollStart );
mScrollView.TouchSignal().Connect( this, &DaliTableView::OnScrollTouched );
- mPageWidth = stageSize.width * TABLE_RELATIVE_SIZE.x * 0.5f;
+ mPageWidth = windowSize.GetWidth() * TABLE_RELATIVE_SIZE.x * 0.5f;
// Populate background and bubbles - needs to be scrollViewLayer so scroll ends show
Actor bubbleContainer = Actor::New();
bubbleContainer.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
- bubbleContainer.SetAnchorPoint( AnchorPoint::CENTER );
- bubbleContainer.SetParentOrigin( ParentOrigin::CENTER );
+ bubbleContainer.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER );
+ bubbleContainer.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
SetupBackground( bubbleContainer );
mRootActor.Add( bubbleContainer );
ApplyCubeEffectToPages();
Dali::Window winHandle = application.GetWindow();
- winHandle.AddAvailableOrientation( Dali::Window::PORTRAIT );
- winHandle.RemoveAvailableOrientation( Dali::Window::LANDSCAPE );
- winHandle.AddAvailableOrientation( Dali::Window::PORTRAIT_INVERSE );
- winHandle.RemoveAvailableOrientation( Dali::Window::LANDSCAPE_INVERSE );
+
+ if( windowSize.GetWidth() <= windowSize.GetHeight() )
+ {
+ winHandle.AddAvailableOrientation( Dali::Window::PORTRAIT );
+ winHandle.RemoveAvailableOrientation( Dali::Window::LANDSCAPE );
+ winHandle.AddAvailableOrientation( Dali::Window::PORTRAIT_INVERSE );
+ winHandle.RemoveAvailableOrientation( Dali::Window::LANDSCAPE_INVERSE );
+ }
+ else
+ {
+ winHandle.AddAvailableOrientation( Dali::Window::LANDSCAPE );
+ winHandle.RemoveAvailableOrientation( Dali::Window::PORTRAIT );
+ winHandle.AddAvailableOrientation( Dali::Window::LANDSCAPE_INVERSE );
+ winHandle.RemoveAvailableOrientation( Dali::Window::PORTRAIT_INVERSE );
+ }
// Set initial orientation
unsigned int degrees = 0;
Rotate( degrees );
- winHandle.ShowIndicator( Dali::Window::INVISIBLE );
-
// Background animation
mAnimationTimer = Timer::New( BACKGROUND_ANIMATION_DURATION );
mAnimationTimer.TickSignal().Connect( this, &DaliTableView::PauseBackgroundAnimation );
{
mFocusEffect[i].actor = ImageView::New();
mFocusEffect[i].actor.SetStyleName( "FocusActor" );
- mFocusEffect[i].actor.SetParentOrigin( ParentOrigin::CENTER );
+ mFocusEffect[i].actor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
mFocusEffect[i].actor.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
- mFocusEffect[i].actor.SetInheritScale( false );
- mFocusEffect[i].actor.SetColorMode( USE_OWN_COLOR );
+ mFocusEffect[i].actor.SetProperty( Actor::Property::INHERIT_SCALE, false );
+ mFocusEffect[i].actor.SetProperty( Actor::Property::COLOR_MODE, USE_OWN_COLOR );
KeyFrames alphaKeyFrames = KeyFrames::New();
alphaKeyFrames.Add( 0.0f, KEYBOARD_FOCUS_FINAL_ALPHA );
keyboardFocusManager.SetFocusIndicatorActor( mFocusEffect[0].actor );
- // Connect to the on & off stage signals of the indicator which represents when it is enabled & disabled respectively
- mFocusEffect[0].actor.OnStageSignal().Connect( this, &DaliTableView::OnFocusIndicatorEnabled );
- mFocusEffect[0].actor.OffStageSignal().Connect( this, &DaliTableView::OnFocusIndicatorDisabled );
+ // Connect to the on & off scene signals of the indicator which represents when it is enabled & disabled respectively
+ mFocusEffect[0].actor.OnSceneSignal().Connect( this, &DaliTableView::OnFocusIndicatorEnabled );
+ mFocusEffect[0].actor.OffSceneSignal().Connect( this, &DaliTableView::OnFocusIndicatorDisabled );
}
void DaliTableView::OnFocusIndicatorEnabled( Actor /* actor */ )
void DaliTableView::Populate()
{
- const Vector2 stageSize = Stage::GetCurrent().GetSize();
+ const Window::WindowSize windowSize = mApplication.GetWindow().GetSize();
mTotalPages = ( mExampleList.size() + EXAMPLES_PER_PAGE - 1 ) / EXAMPLES_PER_PAGE;
{
// Create Table
TableView page = TableView::New( ROWS_PER_PAGE, EXAMPLES_PER_ROW );
- page.SetAnchorPoint( AnchorPoint::CENTER );
- page.SetParentOrigin( ParentOrigin::CENTER );
+ page.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER );
+ page.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
page.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
mScrollView.Add( page );
accessibilityManager.SetAccessibilityAttribute( tile, Dali::Toolkit::AccessibilityManager::ACCESSIBILITY_HINT,
"You can run this example" );
- tile.SetPadding( Padding( margin, margin, margin, margin ) );
+ tile.SetProperty( Actor::Property::PADDING, Padding( margin, margin, margin, margin ) );
page.AddChild( tile, TableView::CellPosition( row, column ) );
iter++;
// Update Ruler info.
mScrollRulerX = new FixedRuler( mPageWidth );
mScrollRulerY = new DefaultRuler();
- mScrollRulerX->SetDomain( RulerDomain( 0.0f, (mTotalPages+1) * stageSize.width * TABLE_RELATIVE_SIZE.x * 0.5f, true ) );
+ mScrollRulerX->SetDomain( RulerDomain( 0.0f, (mTotalPages+1) * windowSize.GetWidth() * TABLE_RELATIVE_SIZE.x * 0.5f, true ) );
mScrollRulerY->Disable();
mScrollView.SetRulerX( mScrollRulerX );
mScrollView.SetRulerY( mScrollRulerY );
void DaliTableView::Rotate( unsigned int degrees )
{
// Resize the root actor
- Vector2 stageSize = Stage::GetCurrent().GetSize();
- Vector3 targetSize( stageSize.x, stageSize.y, 1.0f );
+ const Window::WindowSize windowSize = mApplication.GetWindow().GetSize();
+ const Vector2 originalSize( windowSize.GetWidth(), windowSize.GetHeight() );
+ Vector3 targetSize( originalSize.x, originalSize.y, 1.0f );
if( degrees == 90 || degrees == 270 )
{
- targetSize = Vector3( stageSize.y, stageSize.x, 1.0f );
+ targetSize = Vector3( originalSize.y, originalSize.x, 1.0f );
}
if( mRotateAnimation )
Toolkit::ImageView focusableTile = ImageView::New();
focusableTile.SetStyleName( "DemoTile" );
- focusableTile.SetParentOrigin( ParentOrigin::CENTER );
+ focusableTile.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
focusableTile.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS );
- focusableTile.SetSizeModeFactor( sizeMultiplier );
- focusableTile.SetName( name );
+ focusableTile.SetProperty( Actor::Property::SIZE_MODE_FACTOR, sizeMultiplier );
+ focusableTile.SetProperty( Actor::Property::NAME, name );
// Set the tile to be keyboard focusable
- focusableTile.SetKeyboardFocusable( true );
+ focusableTile.SetProperty( Actor::Property::KEYBOARD_FOCUSABLE, true );
// Register a property with the ImageView. This allows us to inject the scroll-view position into the shader.
Property::Value value = Vector3( 0.0f, 0.0f, 0.0f );
// Create an ImageView for the 9-patch border around the tile.
ImageView borderImage = ImageView::New();
borderImage.SetStyleName("DemoTileBorder");
- borderImage.SetAnchorPoint( AnchorPoint::CENTER );
- borderImage.SetParentOrigin( ParentOrigin::CENTER );
+ borderImage.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER );
+ borderImage.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
borderImage.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
- borderImage.SetOpacity( 0.8f );
+ borderImage.SetProperty( Actor::Property::OPACITY, 0.8f );
focusableTile.Add( borderImage );
TextLabel label = TextLabel::New();
- label.SetAnchorPoint( AnchorPoint::CENTER );
- label.SetParentOrigin( ParentOrigin::CENTER );
+ label.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER );
+ label.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
label.SetStyleName( "LauncherLabel" );
label.SetProperty( TextLabel::Property::MULTI_LINE, true );
label.SetProperty( TextLabel::Property::TEXT, title );
label.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::HEIGHT );
// Pad around the label as its size is the same as the 9-patch border. It will overlap it without padding.
- label.SetPadding( Padding( TILE_LABEL_PADDING, TILE_LABEL_PADDING, TILE_LABEL_PADDING, TILE_LABEL_PADDING ) );
+ label.SetProperty( Actor::Property::PADDING, Padding( TILE_LABEL_PADDING, TILE_LABEL_PADDING, TILE_LABEL_PADDING, TILE_LABEL_PADDING ) );
focusableTile.Add( label );
// Connect to the touch events
return focusableTile;
}
-bool DaliTableView::OnTilePressed( Actor actor, const TouchData& event )
+bool DaliTableView::OnTilePressed( Actor actor, const TouchEvent& event )
{
return DoTilePress( actor, event.GetState( 0 ) );
}
// ignore Example button presses when scrolling or button animating.
if( ( !mScrolling ) && ( !mPressedAnimation ) )
{
- std::string name = actor.GetName();
+ std::string name = actor.GetProperty< std::string >( Dali::Actor::Property::NAME );
const ExampleListIter end = mExampleList.end();
for( ExampleListIter iter = mExampleList.begin(); iter != end; ++iter )
{
mPressedAnimation.Reset();
if( mPressedActor )
{
- std::string name = mPressedActor.GetName();
+ std::string name = mPressedActor.GetProperty< std::string >( Dali::Actor::Property::NAME );
+
+ ExecuteProcess( name, mApplication );
- std::stringstream stream;
- stream << DEMO_EXAMPLE_BIN << name.c_str();
- pid_t pid = fork();
- if( pid == 0)
- {
- execlp( stream.str().c_str(), name.c_str(), NULL );
- DALI_ASSERT_ALWAYS(false && "exec failed!");
- }
mPressedActor.Reset();
}
}
accessibilityManager.SetCurrentFocusActor(mPages[mScrollView.GetCurrentPage()].GetChildAt(0) );
}
-bool DaliTableView::OnScrollTouched( Actor actor, const TouchData& event )
+bool DaliTableView::OnScrollTouched( Actor actor, const TouchEvent& event )
{
if( PointState::DOWN == event.GetState( 0 ) )
{
void DaliTableView::SetupInnerPageCubeEffect()
{
- const Vector2 stageSize = Stage::GetCurrent().GetSize();
+ const Window::WindowSize windowDimensions = mApplication.GetWindow().GetSize();
+ const Vector2 windowSize(windowDimensions.GetWidth(), windowDimensions.GetHeight());
Dali::Path path = Dali::Path::New();
Dali::Property::Array points;
points.Resize(3);
- points[0] = Vector3( stageSize.x*0.5, 0.0f, stageSize.x*0.5f);
+ points[0] = Vector3( windowSize.x*0.5, 0.0f, windowSize.x*0.5f);
points[1] = Vector3( 0.0f, 0.0f, 0.0f );
- points[2] = Vector3( -stageSize.x*0.5f, 0.0f, stageSize.x*0.5f);
+ points[2] = Vector3( -windowSize.x*0.5f, 0.0f, windowSize.x*0.5f);
path.SetProperty( Path::Property::POINTS, points );
Dali::Property::Array controlPoints;
controlPoints.Resize(4);
- controlPoints[0] = Vector3( stageSize.x*0.5f, 0.0f, stageSize.x*0.3f );
- controlPoints[1] = Vector3( stageSize.x*0.3f, 0.0f, 0.0f );
- controlPoints[2] = Vector3(-stageSize.x*0.3f, 0.0f, 0.0f );
- controlPoints[3] = Vector3(-stageSize.x*0.5f, 0.0f, stageSize.x*0.3f );
+ controlPoints[0] = Vector3( windowSize.x*0.5f, 0.0f, windowSize.x*0.3f );
+ controlPoints[1] = Vector3( windowSize.x*0.3f, 0.0f, 0.0f );
+ controlPoints[2] = Vector3(-windowSize.x*0.3f, 0.0f, 0.0f );
+ controlPoints[3] = Vector3(-windowSize.x*0.5f, 0.0f, windowSize.x*0.3f );
path.SetProperty( Path::Property::CONTROL_POINTS, controlPoints );
mScrollViewEffect = ScrollViewPagePathEffect::New(path,
Vector3(-1.0f,0.0f,0.0f),
Toolkit::ScrollView::Property::SCROLL_FINAL_X,
- Vector3(stageSize.x*TABLE_RELATIVE_SIZE.x,stageSize.y*TABLE_RELATIVE_SIZE.y,0.0f),mTotalPages);
+ Vector3(windowSize.x*TABLE_RELATIVE_SIZE.x,windowSize.y*TABLE_RELATIVE_SIZE.y,0.0f),mTotalPages);
}
void DaliTableView::OnKeyEvent( const KeyEvent& event )
Random::Range( -size.y, size.y ),
Random::Range( BUBBLE_MIN_Z, BUBBLE_MAX_Z ) );
- child.SetPosition( childPos );
+ child.SetProperty( Actor::Property::POSITION, childPos );
// Define bubble horizontal parallax and vertical wrapping
Constraint animConstraint = Constraint::New < Vector3 > ( child, Actor::Property::POSITION, AnimateBubbleConstraint( childPos, Random::Range( -0.85f, 0.25f ) ) );
int shapeType = static_cast<int>( Random::Range( 0.0f, NUMBER_OF_SHAPE_IMAGES - 1 ) + 0.5f );
ImageView dfActor = ImageView::New();
- dfActor.SetSize( Vector2( randSize, randSize ) );
- dfActor.SetParentOrigin( ParentOrigin::CENTER );
+ dfActor.SetProperty( Actor::Property::SIZE, Vector2( randSize, randSize ) );
+ dfActor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
// Set the Image URL and the custom shader at the same time
Dali::Property::Map effect = Toolkit::CreateDistanceFieldEffect();
mVersionPopup = Dali::Toolkit::Popup::New();
Toolkit::TextLabel titleActor = Toolkit::TextLabel::New( "Version information" );
- titleActor.SetName( "titleActor" );
+ titleActor.SetProperty( Actor::Property::NAME, "titleActor" );
titleActor.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, HorizontalAlignment::CENTER );
titleActor.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Color::WHITE );
Toolkit::TextLabel contentActor = Toolkit::TextLabel::New( stream.str() );
- contentActor.SetName( "contentActor" );
+ contentActor.SetProperty( Actor::Property::NAME, "contentActor" );
contentActor.SetProperty( Toolkit::TextLabel::Property::MULTI_LINE, true );
contentActor.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, HorizontalAlignment::CENTER );
contentActor.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Color::WHITE );
- contentActor.SetPadding( Padding( 0.0f, 0.0f, 20.0f, 0.0f ) );
+ contentActor.SetProperty( Actor::Property::PADDING, Padding( 0.0f, 0.0f, 20.0f, 0.0f ) );
mVersionPopup.SetTitle( titleActor );
mVersionPopup.SetContent( contentActor );
mVersionPopup.SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::WIDTH );
- mVersionPopup.SetSizeModeFactor( Vector3( 0.75f, 1.0f, 1.0f ) );
+ mVersionPopup.SetProperty( Actor::Property::SIZE_MODE_FACTOR, Vector3( 0.75f, 1.0f, 1.0f ) );
mVersionPopup.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::HEIGHT );
mVersionPopup.OutsideTouchedSignal().Connect( this, &DaliTableView::HideVersionPopup );
- Stage::GetCurrent().Add( mVersionPopup );
+ mApplication.GetWindow().Add( mVersionPopup );
}
mVersionPopup.SetDisplayState( Popup::SHOWN );