X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=base%2Fdali-toolkit%2Fpublic-api%2Fcontrols%2Fcontrol-impl.cpp;h=d26e2f403498d1fd43658e28ee8dfff1b97cb0b3;hp=018e4f0c31f9a18d9161635c08fb810c08674b41;hb=c92d73a3eeaaa36b37c72d812ca4c65c20d237a8;hpb=022b76df6f53c2860f2684ef1ffee81af1805e2e diff --git a/base/dali-toolkit/public-api/controls/control-impl.cpp b/base/dali-toolkit/public-api/controls/control-impl.cpp index 018e4f0..d26e2f4 100644 --- a/base/dali-toolkit/public-api/controls/control-impl.cpp +++ b/base/dali-toolkit/public-api/controls/control-impl.cpp @@ -1,22 +1,22 @@ -// -// Copyright (c) 2014 Samsung Electronics Co., Ltd. -// -// Licensed under the Flora License, Version 1.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://floralicense.org/license/ -// -// 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. -// +/* + * Copyright (c) 2014 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 -#include #include #include @@ -239,24 +239,24 @@ public: // Construction & Destruction Impl(Control& controlImpl) : mControlImpl(controlImpl), - mInitialized( false ), + mBackground( NULL ), + mKeyEventSignalV2(), mPinchGestureDetector(), mPanGestureDetector(), mTapGestureDetector(), mLongPressGestureDetector(), mStartingPinchScale(), - mLockSetSize( false ), - mWidthPolicy( Toolkit::Control::Fixed ), - mHeightPolicy( Toolkit::Control::Fixed ), mSize(), mSetSize(), mMinimumSize(), mMaximumSize( MAX_FLOAT_VALUE, MAX_FLOAT_VALUE, MAX_FLOAT_VALUE ), + mLockSetSize( false ), + mWidthPolicy( Toolkit::Control::Fixed ), + mHeightPolicy( Toolkit::Control::Fixed ), + mFlags( Control::CONTROL_BEHAVIOUR_NONE ), mIsKeyboardNavigationSupported(false), mIsKeyboardFocusGroup(false), - mKeyEventSignalV2(), - mBackground( NULL ), - mFlags( Control::CONTROL_BEHAVIOUR_NONE ) + mInitialized( false ) { } @@ -497,41 +497,30 @@ public: // Data Control& mControlImpl; - - bool mInitialized:1; - + Background* mBackground; ///< Only create the background if we use it ConnectionTracker mConnectionTracker; // signal connection tracker + Toolkit::Control::KeyEventSignalV2 mKeyEventSignalV2; // Gesture Detection - PinchGestureDetector mPinchGestureDetector; PanGestureDetector mPanGestureDetector; TapGestureDetector mTapGestureDetector; LongPressGestureDetector mLongPressGestureDetector; - Vector3 mStartingPinchScale; ///< The scale when a pinch gesture starts - // Relayout and size negotiation - - bool mLockSetSize; ///< Used to avoid. Can't be a bitfield as a reference to this member is used in SetSizeLock helper class. - - Toolkit::Control::SizePolicy mWidthPolicy; ///< Stores the width policy. - Toolkit::Control::SizePolicy mHeightPolicy; ///< Stores the height policy. - Vector3 mSize; ///< Stores the current control's size. Vector3 mSetSize; ///< Always stores the size set through the Actor's API. Useful when reset to the initial size is needed. Vector3 mMinimumSize; ///< Stores the control's minimum size. Vector3 mMaximumSize; ///< Stores the control's maximum size. - bool mIsKeyboardNavigationSupported; ///< Stores whether keyboard navigation is supported by the control. - bool mIsKeyboardFocusGroup; ///< Stores whether the control is a focus group. - - Toolkit::Control::KeyEventSignalV2 mKeyEventSignalV2; - - // Background - Background* mBackground; ///< Only create the background if we use it + bool mLockSetSize; ///< Used to avoid. Can't be a bitfield as a reference to this member is used in SetSizeLock helper class. - ControlBehaviour mFlags; ///< Flags passed in from constructor + Toolkit::Control::SizePolicy mWidthPolicy:3; ///< Stores the width policy. 3 bits covers 8 values + Toolkit::Control::SizePolicy mHeightPolicy:3; ///< Stores the height policy. 3 bits covers 8 values + ControlBehaviour mFlags:4; ///< Flags passed in from constructor. Need to increase this size when new enums are added + bool mIsKeyboardNavigationSupported:1; ///< Stores whether keyboard navigation is supported by the control. + bool mIsKeyboardFocusGroup:1; ///< Stores whether the control is a focus group. + bool mInitialized:1; // Properties - these need to be members of Internal::Control::Impl as they need to functions within this class. static PropertyRegistration PROPERTY_1; @@ -577,15 +566,12 @@ void Control::Initialize() // Calling deriving classes OnInitialize(); - if( mImpl->mFlags & REQUIRES_THEME_CHANGE_SIGNALS ) + if( mImpl->mFlags & REQUIRES_STYLE_CHANGE_SIGNALS ) { Toolkit::StyleManager styleManager = Toolkit::StyleManager::Get(); - // Register for font/theme changes - styleManager.ThemeChangeSignal().Connect( this, &ControlImpl::OnThemeChange ); - - // Set theme - GetImpl( styleManager ).ApplyThemeStyle( GetOwner() ); + // Register for style changes + styleManager.StyleChangeSignal().Connect( this, &ControlImpl::DoStyleChange ); } mImpl->mInitialized = true; @@ -744,6 +730,11 @@ Actor Control::GetBackgroundActor() const return Actor(); } +void Control::OnThemeChange( Toolkit::StyleManager styleManager ) +{ + GetImpl( styleManager ).ApplyThemeStyle( GetOwner() ); +} + void Control::OnPinch(PinchGesture pinch) { if (pinch.state == Gesture::Started) @@ -776,7 +767,7 @@ void Control::OnChildAdd(Actor& child) return; } - // Request for relayout. + // Request for relayout as we may need to position the new child and old ones RelayoutRequest(); // Notify derived classes. @@ -791,7 +782,7 @@ void Control::OnChildRemove(Actor& child) return; } - // Request for relayout. + // Request for relayout as we may need to re-position the old child RelayoutRequest(); // Notify derived classes. @@ -856,6 +847,11 @@ bool Control::OnAccessibilityPan(PanGesture gesture) return false; // Accessibility pan gesture is not handled by default } +bool Control::OnAccessibilityTouch(const TouchEvent& touchEvent) +{ + return false; // Accessibility touch event is not handled by default +} + bool Control::OnAccessibilityValueChange(bool isIncrease) { return false; // Accessibility value change action is not handled by default @@ -894,12 +890,32 @@ bool Control::DoAction(BaseObject* object, const std::string& actionName, const { bool ret = false; + if( object && (actionName == Toolkit::Control::ACTION_CONTROL_ACTIVATED) ) + { + Toolkit::Control control = Toolkit::Control::DownCast( BaseHandle( object ) ); + if( control ) + { + // if cast succeeds there is an implementation so no need to check + control.GetImplementation().OnActivated(); + } + } + return ret; } -void Control::DoActivatedAction(const PropertyValueContainer& attributes) +void Control::DoStyleChange( Toolkit::StyleManager styleManager, StyleChange change ) { - OnActivated(); + if( change.themeChange ) + { + OnThemeChange( styleManager ); + } + else if( change.defaultFontChange || change.defaultFontSizeChange ) + { + // This OnStyleChange(StyleChange change ) is deprecated, use OnFontChange instead + OnStyleChange( change ); + + OnFontChange( change.defaultFontChange, change.defaultFontSizeChange ); + } } Toolkit::Control::KeyEventSignalV2& Control::KeyEventSignal() @@ -1038,7 +1054,12 @@ void Control::ClearKeyInputFocus() void Control::RelayoutRequest() { - Internal::RelayoutController::Get().Request(); + // unfortunate double negative but thats to guarantee new controls get size negotiation + // by default and have to "opt-out" if they dont want it + if( !(mImpl->mFlags & NO_SIZE_NEGOTIATION) ) + { + Internal::RelayoutController::Request(); + } } void Control::Relayout( Vector2 size, ActorSizeContainer& container ) @@ -1184,11 +1205,6 @@ void Control::NegotiateSize( Vector2 allocatedSize, ActorSizeContainer& containe Relayout( size, container ); } -void Control::OnThemeChange( Toolkit::StyleManager styleManager ) -{ - GetImpl( styleManager ).ApplyThemeStyle( GetOwner() ); -} - bool Control::EmitKeyEventSignal( const KeyEvent& event ) { // Guard against destruction during signal emission