-//
-// 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 <dali-toolkit/public-api/controls/control-impl.h>
// 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 )
{
}
// 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;
// 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;
return Actor();
}
+void Control::OnThemeChange( Toolkit::StyleManager styleManager )
+{
+ GetImpl( styleManager ).ApplyThemeStyle( GetOwner() );
+}
+
void Control::OnPinch(PinchGesture pinch)
{
if (pinch.state == Gesture::Started)
return;
}
- // Request for relayout.
+ // Request for relayout as we may need to position the new child and old ones
RelayoutRequest();
// Notify derived classes.
return;
}
- // Request for relayout.
+ // Request for relayout as we may need to re-position the old child
RelayoutRequest();
// Notify derived classes.
{
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()
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 )
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