/*
- * Copyright (c) 2014 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.
#include "shared/view.h"
#include <dali-toolkit/dali-toolkit.h>
-
+#include <dali-toolkit/devel-api/controls/magnifier/magnifier.h>
using namespace Dali;
namespace
{
-const char* BACKGROUND_IMAGE( DALI_IMAGE_DIR "background-magnifier.jpg" );
-const char* TOOLBAR_IMAGE( DALI_IMAGE_DIR "top-bar.png" );
+const char* BACKGROUND_IMAGE( DEMO_IMAGE_DIR "background-magnifier.jpg" );
+const char* TOOLBAR_IMAGE( DEMO_IMAGE_DIR "top-bar.png" );
const char* APPLICATION_TITLE( "Magnifier Example" );
-const Vector3 MAGNIFIER_SIZE(0.25f, 0.25f, 0.0f); ///< Magnifier sides should be 25% of the width of the stage
+const Vector3 MAGNIFIER_SIZE(0.25f, 0.25f, 0.0f); ///< Magnifier sides should be 25% of the width of the window
const float ANIMATION_DURATION(60.0f); ///< Run animation for a minute before repeating.
const float MAGNIFIER_DISPLAY_DURATION(0.125f); ///< Duration in seconds for show/hide manual magnifier animation
const float MAGNIFICATION_FACTOR(2.0f); ///< Amount to magnify by.
-const float MAGNIFIER_INDENT(10.0f); ///< Indentation around edge of stage to define where magnifiers may move.
+const float MAGNIFIER_INDENT(10.0f); ///< Indentation around edge of window to define where magnifiers may move.
const float FINGER_RADIUS_INCHES(0.25f); ///< Average finger radius in inches from the center of index finger to edge.
/**
* MagnifierPathConstraint
* This constraint governs the position of the
* animating magnifier in a swirly pattern around
- * the stage.
+ * the window.
*/
struct MagnifierPathConstraint
{
/**
* Constraint constructor
- * @param[in] stageSize The stage size so that the constraint can create a path
- * within stage bounds.
+ * @param[in] windowSize The window size so that the constraint can create a path
+ * within window bounds.
*/
- MagnifierPathConstraint(const Vector3& stageSize,
+ MagnifierPathConstraint(const Vector3& windowSize,
Vector3 offset = Vector3::ZERO)
- : mStageSize(stageSize),
+ : mWindowSize(windowSize),
mOffset(offset)
{
}
- Vector3 operator()(const Vector3& current,
- const PropertyInput& sizeProperty,
- const PropertyInput& animationTimeProperty)
+ void operator()( Vector3& current, const PropertyInputContainer& inputs )
{
- float time = animationTimeProperty.GetFloat();
- const Vector3& size = sizeProperty.GetVector3();
-
- Vector3 range(mStageSize - size - Vector3::ONE * MAGNIFIER_INDENT * 2.0f);
- Vector3 position(mOffset);
+ float time = inputs[1]->GetFloat();
+ const Vector3& size = inputs[0]->GetVector3();
- position.x += 0.5f * sinf(time * 0.471f) * range.width;
- position.y += 0.5f * sinf(time * 0.8739f) * range.height;
+ current = mOffset;
- return position;
+ Vector3 range( mWindowSize - size - Vector3::ONE * MAGNIFIER_INDENT * 2.0f );
+ current.x += 0.5f * sinf(time * 0.471f) * range.width;
+ current.y += 0.5f * sinf(time * 0.8739f) * range.height;
}
- Vector3 mStageSize; ///< Keep track of the stage size for determining path within stage bounds
+ Vector3 mWindowSize; ///< Keep track of the window size for determining path within window bounds
Vector3 mOffset; ///< Amount to offset magnifier path
};
{
}
- Vector3 operator()(const Vector3& constPosition,
- const PropertyInput& sizeProperty,
- const PropertyInput& parentOriginProperty,
- const PropertyInput& anchorPointProperty,
- const PropertyInput& referenceSizeProperty)
+ void operator()( Vector3& current, const PropertyInputContainer& inputs )
{
- const Vector3& size = sizeProperty.GetVector3();
- const Vector3 origin = parentOriginProperty.GetVector3();
- const Vector3& anchor = anchorPointProperty.GetVector3();
- const Vector3& referenceSize = referenceSizeProperty.GetVector3();
+ const Vector3& size = inputs[0]->GetVector3();
+ const Vector3 origin = inputs[1]->GetVector3();
+ const Vector3& anchor = inputs[2]->GetVector3();
+ const Vector3& referenceSize = inputs[3]->GetVector3();
Vector3 offset(mOffsetOrigin * referenceSize);
- Vector3 newPosition( constPosition + offset );
-
// Get actual position of Actor relative to parent's Top-Left.
- Vector3 position(constPosition + offset + origin * referenceSize);
+ Vector3 position(current + offset + origin * referenceSize);
+
+ current += offset;
// if top-left corner is outside of Top-Left bounds, then push back in screen.
Vector3 corner(position - size * anchor - mMinIndent);
if(mFlipHorizontal && corner.x < 0.0f)
{
corner.x = 0.0f;
- newPosition.x += size.width;
+ current.x += size.width;
}
if(mFlipVertical && corner.y < 0.0f)
{
corner.y = 0.0f;
- newPosition.y += size.height;
+ current.y += size.height;
}
- newPosition.x -= std::min(corner.x, 0.0f);
- newPosition.y -= std::min(corner.y, 0.0f);
+ current.x -= std::min(corner.x, 0.0f);
+ current.y -= std::min(corner.y, 0.0f);
// if bottom-right corner is outside of Bottom-Right bounds, then push back in screen.
corner += size - referenceSize + mMinIndent + mMaxIndent;
if(mFlipHorizontal && corner.x > 0.0f)
{
corner.x = 0.0f;
- newPosition.x -= size.width;
+ current.x -= size.width;
}
if(mFlipVertical && corner.y > 0.0f)
{
corner.y = 0.0f;
- newPosition.y -= size.height;
+ current.y -= size.height;
}
- newPosition.x -= std::max(corner.x, 0.0f);
- newPosition.y -= std::max(corner.y, 0.0f);
-
- return newPosition;
+ current.x -= std::max(corner.x, 0.0f);
+ current.y -= std::max(corner.y, 0.0f);
}
Vector3 mOffsetOrigin; ///< Manual Parent Offset Origin.
: mApplication( application ),
mView(),
mAnimationTime(0.0f),
+ mAnimationTimeProperty( Property::INVALID_INDEX ),
mMagnifierShown(false)
{
// Connect to the Application's Init signal
*/
void Create( Application& application )
{
- Stage::GetCurrent().KeyEventSignal().Connect(this, &ExampleController::OnKeyEvent);
-
- mStageSize = Stage::GetCurrent().GetSize();
+ Window window = application.GetWindow();
+ window.KeyEventSignal().Connect(this, &ExampleController::OnKeyEvent);
+ mWindowSize = window.GetSize();
// The Init signal is received once (only) during the Application lifetime
- // Hide the indicator bar
- application.GetWindow().ShowIndicator( Dali::Window::INVISIBLE );
-
// Creates a default view with a default tool bar.
- // The view is added to the stage.
+ // The view is added to the window.
Toolkit::ToolBar toolBar;
mContent = DemoHelper::CreateView( application,
mView,
TOOLBAR_IMAGE,
APPLICATION_TITLE );
- mContent.SetLeaveRequired(true);
- mContent.TouchedSignal().Connect( this, &ExampleController::OnTouched );
+ mContent.SetProperty( Actor::Property::LEAVE_REQUIRED,true);
+ mContent.TouchSignal().Connect( this, &ExampleController::OnTouched );
// Create magnifier (controlled by human touch)
Layer overlay = Layer::New();
- overlay.SetRelayoutEnabled( false );
- overlay.SetSensitive(false);
- overlay.SetParentOrigin( ParentOrigin::CENTER );
- overlay.SetSize(mStageSize);
- Stage::GetCurrent().Add(overlay);
+ overlay.SetProperty( Actor::Property::SENSITIVE,false);
+ overlay.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
+ overlay.SetProperty( Actor::Property::SIZE, mWindowSize);
+ window.Add(overlay);
mMagnifier = Toolkit::Magnifier::New();
- mMagnifier.SetRelayoutEnabled( false );
- mMagnifier.SetSourceActor( mView.GetBackgroundLayer() );
- mMagnifier.SetSize( MAGNIFIER_SIZE * mStageSize.width ); // Size of magnifier is in relation to stage width
- mMagnifier.SetMagnificationFactor( MAGNIFICATION_FACTOR );
- mMagnifier.SetScale(Vector3::ZERO);
+ mMagnifier.SetSourceActor( mView );
+ mMagnifier.SetProperty( Actor::Property::SIZE, MAGNIFIER_SIZE * mWindowSize.width ); // Size of magnifier is in relation to window width
+ mMagnifier.SetProperty( Toolkit::Magnifier::Property::MAGNIFICATION_FACTOR, MAGNIFICATION_FACTOR );
+ mMagnifier.SetProperty( Actor::Property::SCALE,Vector3::ZERO);
overlay.Add( mMagnifier );
// Apply constraint to animate the position of the magnifier.
- Constraint constraint = Constraint::New<Vector3>(Actor::Property::POSITION,
- LocalSource(Actor::Property::SIZE),
- LocalSource(Actor::Property::PARENT_ORIGIN),
- LocalSource(Actor::Property::ANCHOR_POINT),
- ParentSource(Actor::Property::SIZE),
- ConfinementConstraint(ParentOrigin::CENTER, Vector2::ONE * MAGNIFIER_INDENT, Vector2::ONE * MAGNIFIER_INDENT));
+ Constraint constraint = Constraint::New<Vector3>( mMagnifier, Actor::Property::POSITION, ConfinementConstraint(Vector3( 0.5f, 0.5f, 0.0f ), Vector2::ONE * MAGNIFIER_INDENT, Vector2::ONE * MAGNIFIER_INDENT) );
+ constraint.AddSource( LocalSource(Actor::Property::SIZE) );
+ constraint.AddSource( LocalSource(Actor::Property::PARENT_ORIGIN) );
+ constraint.AddSource( LocalSource(Actor::Property::ANCHOR_POINT) );
+ constraint.AddSource( ParentSource(Actor::Property::SIZE) );
constraint.SetRemoveAction(Constraint::Discard);
- mMagnifier.ApplyConstraint( constraint );
+ constraint.Apply();
// Create bouncing magnifier automatically bounces around screen.
mBouncingMagnifier = Toolkit::Magnifier::New();
- mBouncingMagnifier.SetRelayoutEnabled( false );
- mBouncingMagnifier.SetSourceActor( mView.GetBackgroundLayer() );
- mBouncingMagnifier.SetSize( MAGNIFIER_SIZE * mStageSize.width ); // Size of magnifier is in relation to stage width
- mBouncingMagnifier.SetMagnificationFactor( MAGNIFICATION_FACTOR );
+ mBouncingMagnifier.SetSourceActor( mView );
+ mBouncingMagnifier.SetProperty( Actor::Property::SIZE, MAGNIFIER_SIZE * mWindowSize.width ); // Size of magnifier is in relation to window width
+ mBouncingMagnifier.SetProperty( Toolkit::Magnifier::Property::MAGNIFICATION_FACTOR, MAGNIFICATION_FACTOR );
overlay.Add( mBouncingMagnifier );
- mAnimationTimeProperty = mBouncingMagnifier.RegisterProperty("animation-time", 0.0f);
+ mAnimationTimeProperty = mBouncingMagnifier.RegisterProperty("animationTime", 0.0f);
ContinueAnimation();
// Apply constraint to animate the position of the magnifier.
- constraint = Constraint::New<Vector3>(Actor::Property::POSITION,
- LocalSource(Actor::Property::SIZE),
- LocalSource(mAnimationTimeProperty),
- MagnifierPathConstraint(mStageSize, mStageSize * 0.5f));
- mBouncingMagnifier.ApplyConstraint( constraint );
+ constraint = Constraint::New<Vector3>( mBouncingMagnifier, Actor::Property::POSITION, MagnifierPathConstraint(mWindowSize, mWindowSize * 0.5f) );
+ constraint.AddSource( LocalSource(Actor::Property::SIZE) );
+ constraint.AddSource( LocalSource(mAnimationTimeProperty) );
+ constraint.Apply();
// Apply constraint to animate the source of the magnifier.
- constraint = Constraint::New<Vector3>(mBouncingMagnifier.GetPropertyIndex( Toolkit::Magnifier::SOURCE_POSITION_PROPERTY_NAME ),
- LocalSource(Actor::Property::SIZE),
- LocalSource(mAnimationTimeProperty),
- MagnifierPathConstraint(mStageSize));
- mBouncingMagnifier.ApplyConstraint( constraint );
+ constraint = Constraint::New<Vector3>( mBouncingMagnifier, Toolkit::Magnifier::Property::SOURCE_POSITION, MagnifierPathConstraint(mWindowSize) );
+ constraint.AddSource( LocalSource(Actor::Property::SIZE) );
+ constraint.AddSource( LocalSource(mAnimationTimeProperty) );
+ constraint.Apply();
}
/**
{
if(event.GetPointCount() > 0)
{
- const TouchPoint& point = event.GetPoint(0);
- switch(point.state)
+ switch( event.GetState( 0 ) )
{
- case TouchPoint::Down:
- case TouchPoint::Motion:
+ case PointState::DOWN:
+ case PointState::MOTION:
{
ShowMagnifier();
break;
}
- case TouchPoint::Up:
- case TouchPoint::Leave:
- case TouchPoint::Interrupted:
+ case PointState::UP:
+ case PointState::LEAVE:
+ case PointState::INTERRUPTED:
{
HideMagnifier();
break;
}
- default:
+ case PointState::STATIONARY:
{
break;
}
} // end switch
- Vector3 touchPoint(point.screen);
+ Vector3 touchPoint( event.GetScreenPosition( 0 ) );
- SetMagnifierPosition(touchPoint - mStageSize * 0.5f);
+ SetMagnifierPosition(touchPoint - mWindowSize * 0.5f);
}
return false;
if(!mMagnifierShown)
{
Animation animation = Animation::New(MAGNIFIER_DISPLAY_DURATION);
- animation.AnimateTo(Property(mMagnifier, Actor::Property::SCALE), Vector3::ONE, AlphaFunctions::EaseIn);
+ animation.AnimateTo(Property(mMagnifier, Actor::Property::SCALE), Vector3::ONE, AlphaFunction::EASE_IN);
animation.Play();
mMagnifierShown = true;
}
if(mMagnifierShown)
{
Animation animation = Animation::New(MAGNIFIER_DISPLAY_DURATION);
- animation.AnimateTo(Property(mMagnifier, Actor::Property::SCALE), Vector3::ZERO, AlphaFunctions::EaseOut);
+ animation.AnimateTo(Property(mMagnifier, Actor::Property::SCALE), Vector3::ZERO, AlphaFunction::EASE_OUT);
animation.Play();
mMagnifierShown = false;
}
/**
* Manually sets the magnifier position
- * @param[in] position The magnifier's position relative to center of stage
+ * @param[in] position The magnifier's position relative to center of window
*/
void SetMagnifierPosition(const Vector3 position)
{
- mMagnifier.SetSourcePosition( position );
+ mMagnifier.SetProperty( Toolkit::Magnifier::Property::SOURCE_POSITION, position );
// position magnifier glass such that bottom edge is touching/near top of finger.
Vector3 glassPosition(position);
- glassPosition.y -= mStageSize.width * MAGNIFIER_SIZE.height * 0.5f + Stage::GetCurrent().GetDpi().height * FINGER_RADIUS_INCHES;
+ glassPosition.y -= mWindowSize.width * MAGNIFIER_SIZE.height * 0.5f + mApplication.GetWindow().GetDpi().GetHeight() * FINGER_RADIUS_INCHES;
- mMagnifier.SetPosition( glassPosition );
+ mMagnifier.SetProperty( Actor::Property::POSITION, glassPosition );
}
void OnKeyEvent(const KeyEvent& event)
{
- if(event.state == KeyEvent::Down)
+ if(event.GetState() == KeyEvent::DOWN)
{
if( IsKey( event, Dali::DALI_KEY_ESCAPE) || IsKey( event, Dali::DALI_KEY_BACK) )
{
private:
Application& mApplication; ///< Application instance
- Toolkit::View mView; ///< The view
+ Toolkit::Control mView; ///< The view
Layer mContent; ///< The content layer
Toolkit::Magnifier mMagnifier; ///< The manually controlled magnifier
Toolkit::Magnifier mBouncingMagnifier; ///< The animating magnifier (swirly animation)
- Vector3 mStageSize; ///< The size of the stage
+ Vector3 mWindowSize; ///< The size of the window
float mAnimationTime; ///< Keep track of start animation time.
Property::Index mAnimationTimeProperty; ///< Animation time property (responsible for swirly animation)
bool mMagnifierShown; ///< Flag indicating whether the magnifier is being shown or not.
};
-void RunTest( Application& application )
+int DALI_EXPORT_API main( int argc, char **argv )
{
+ Application application = Application::New( &argc, &argv, DEMO_THEME_PATH );
ExampleController test( application );
-
application.MainLoop();
-}
-
-// Entry point for Linux & Tizen applications
-//
-int main( int argc, char **argv )
-{
- Application application = Application::New( &argc, &argv );
-
- RunTest( application );
-
return 0;
}