X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Ftext-controller-impl.h;h=55278701f17d18eaf446a766bf67aa0e83a2b088;hp=b220be6123730c3e0ce039365390ac3ce5a0cdad;hb=a267f3da043b1b792ffc64d1848542aa761e44c0;hpb=6b7c807d4a72e4fae1bbcc7aa64c024f5f84944d diff --git a/dali-toolkit/internal/text/text-controller-impl.h b/dali-toolkit/internal/text/text-controller-impl.h old mode 100644 new mode 100755 index b220be6..5527870 --- a/dali-toolkit/internal/text/text-controller-impl.h +++ b/dali-toolkit/internal/text/text-controller-impl.h @@ -1,8 +1,8 @@ -#ifndef __DALI_TOOLKIT_TEXT_CONTROLLER_IMPL_H__ -#define __DALI_TOOLKIT_TEXT_CONTROLLER_IMPL_H__ +#ifndef DALI_TOOLKIT_TEXT_CONTROLLER_IMPL_H +#define DALI_TOOLKIT_TEXT_CONTROLLER_IMPL_H /* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * 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. @@ -24,11 +24,11 @@ // INTERNAL INCLUDES #include -#include -#include #include +#include #include -#include +#include +#include namespace Dali { @@ -39,8 +39,13 @@ namespace Toolkit namespace Text { +const float DEFAULT_TEXTFIT_MIN = 10.f; +const float DEFAULT_TEXTFIT_MAX = 100.f; +const float DEFAULT_TEXTFIT_STEP = 1.f; + //Forward declarations struct CursorInfo; +struct FontDefaults; struct Event { @@ -63,6 +68,7 @@ struct Event int mInt; unsigned int mUint; float mFloat; + bool mBool; }; Event( Type eventType ) @@ -95,7 +101,7 @@ struct EventData TEXT_PANNING }; - EventData( DecoratorPtr decorator ); + EventData( DecoratorPtr decorator, InputMethodContext& inputMethodContext ); ~EventData(); @@ -105,7 +111,8 @@ struct EventData } DecoratorPtr mDecorator; ///< Pointer to the decorator. - ImfManager mImfManager; ///< The Input Method Framework Manager. + InputMethodContext mInputMethodContext; ///< The Input Method Framework Manager. + FontDefaults* mPlaceholderFont; ///< The placeholder default font. std::string mPlaceholderTextActive; ///< The text to display when the TextField is empty with key-input focus. std::string mPlaceholderTextInactive; ///< The text to display when the TextField is empty and inactive. Vector4 mPlaceholderTextColor; ///< The in/active placeholder text color. @@ -116,6 +123,8 @@ struct EventData */ std::vector mEventQueue; ///< The queue of touch events etc. + Vector mInputStyleChangedQueue; ///< Queue of changes in the input style. Used to emit the signal in the iddle callback. + InputStyle mInputStyle; ///< The style to be set to the new inputed text. State mPreviousState; ///< Stores the current state before it's updated with the new one. @@ -130,6 +139,9 @@ struct EventData float mCursorHookPositionX; ///< Used to move the cursor with the keys or when scrolling the text vertically with the handles. + Controller::NoTextTap::Action mDoubleTapAction; ///< Action to be done when there is a double tap on top of 'no text' + Controller::NoTextTap::Action mLongPressAction; ///< Action to be done when there is a long press on top of 'no text' + bool mIsShowingPlaceholderText : 1; ///< True if the place-holder text is being displayed. bool mPreEditFlag : 1; ///< True if the model contains text in pre-edit state. bool mDecoratorUpdated : 1; ///< True if the decorator was updated during event processing. @@ -143,11 +155,18 @@ struct EventData bool mUpdateLeftSelectionPosition : 1; ///< True if the visual position of the left selection handle must be recalculated. bool mUpdateRightSelectionPosition : 1; ///< True if the visual position of the right selection handle must be recalculated. bool mIsLeftHandleSelected : 1; ///< Whether is the left handle the one which is selected. + bool mIsRightHandleSelected : 1; ///< Whether is the right handle the one which is selected. bool mUpdateHighlightBox : 1; ///< True if the text selection high light box must be updated. bool mScrollAfterUpdatePosition : 1; ///< Whether to scroll after the cursor position is updated. bool mScrollAfterDelete : 1; ///< Whether to scroll after delete characters. bool mAllTextSelected : 1; ///< True if the selection handles are selecting all the text. bool mUpdateInputStyle : 1; ///< Whether to update the input style after moving the cursor. + bool mPasswordInput : 1; ///< True if password input is enabled. + bool mCheckScrollAmount : 1; ///< Whether to check scrolled amount after updating the position + bool mIsPlaceholderPixelSize : 1; ///< True if the placeholder font size is set as pixel size. + bool mIsPlaceholderElideEnabled : 1; ///< True if the placeholder text's elide is enabled. + bool mPlaceholderEllipsisFlag : 1; ///< True if the text controller sets the placeholder ellipsis. + bool mShiftSelectionFlag : 1; ///< True if the text selection using Shift key is enabled. }; struct ModifyEvent @@ -167,6 +186,7 @@ struct FontDefaults FontDefaults() : mFontDescription(), mDefaultPointSize( 0.f ), + mFitPointSize( 0.f ), mFontId( 0u ), familyDefined( false ), weightDefined( false ), @@ -192,6 +212,7 @@ struct FontDefaults TextAbstraction::FontDescription mFontDescription; ///< The default font's description. float mDefaultPointSize; ///< The default font's point size. + float mFitPointSize; ///< The fit font's point size. FontId mFontId; ///< The font's id of the default font. bool familyDefined:1; ///< Whether the default font's family name is defined. bool weightDefined:1; ///< Whether the default font's weight is defined. @@ -283,10 +304,11 @@ struct OutlineDefaults struct Controller::Impl { - Impl( ControlInterface& controlInterface ) + Impl( ControlInterface* controlInterface, + EditableControlInterface* editableControlInterface ) : mControlInterface( controlInterface ), - mLogicalModel(), - mVisualModel(), + mEditableControlInterface( editableControlInterface ), + mModel(), mFontDefaults( NULL ), mUnderlineDefaults( NULL ), mShadowDefaults( NULL ), @@ -297,37 +319,60 @@ struct Controller::Impl mClipboard(), mView(), mMetrics(), - mLayoutEngine(), mModifyEvents(), mTextColor( Color::BLACK ), mTextUpdateInfo(), mOperationsPending( NO_OPERATION ), mMaximumNumberOfCharacters( 50u ), + mHiddenInput( NULL ), mRecalculateNaturalSize( true ), mMarkupProcessorEnabled( false ), mClipboardHideEnabled( true ), - mAutoScrollEnabled( false ), - mAutoScrollDirectionRTL( false ) + mIsAutoScrollEnabled( false ), + mUpdateTextDirection( true ), + mIsTextDirectionRTL( false ), + mUnderlineSetByString( false ), + mShadowSetByString( false ), + mOutlineSetByString( false ), + mFontStyleSetByString( false ), + mShouldClearFocusOnEscape( true ), + mLayoutDirection( LayoutDirection::LEFT_TO_RIGHT ), + mTextFitMinSize( DEFAULT_TEXTFIT_MIN ), + mTextFitMaxSize( DEFAULT_TEXTFIT_MAX ), + mTextFitStepSize( DEFAULT_TEXTFIT_STEP ), + mTextFitEnabled( false ) { - mLogicalModel = LogicalModel::New(); - mVisualModel = VisualModel::New(); + mModel = Model::New(); mFontClient = TextAbstraction::FontClient::Get(); mClipboard = Clipboard::Get(); - mView.SetVisualModel( mVisualModel ); + mView.SetVisualModel( mModel->mVisualModel ); // Use this to access FontClient i.e. to get down-scaled Emoji metrics. mMetrics = Metrics::New( mFontClient ); mLayoutEngine.SetMetrics( mMetrics ); // Set the text properties to default - mVisualModel->SetUnderlineEnabled( false ); - mVisualModel->SetUnderlineHeight( 0.0f ); + mModel->mVisualModel->SetUnderlineEnabled( false ); + mModel->mVisualModel->SetUnderlineHeight( 0.0f ); + + Toolkit::StyleManager styleManager = Toolkit::StyleManager::Get(); + if( styleManager ) + { + bool temp; + Property::Map config = Toolkit::DevelStyleManager::GetConfigurations( styleManager ); + if( config["clearFocusOnEscape"].Get( temp ) ) + { + mShouldClearFocusOnEscape = temp; + } + } } ~Impl() { + delete mHiddenInput; + delete mFontDefaults; delete mUnderlineDefaults; delete mShadowDefaults; @@ -336,8 +381,10 @@ struct Controller::Impl delete mEventData; } + // Text Controller Implementation. + /** - * @brief Request a relayout using the ControlInterface. + * @copydoc Text::Controller::RequestRelayout() */ void RequestRelayout(); @@ -392,7 +439,7 @@ struct Controller::Impl bool IsShowingRealText() const { return ( !IsShowingPlaceholderText() && - 0u != mLogicalModel->mText.Count() ); + 0u != mModel->mLogicalModel->mText.Count() ); } /** @@ -405,7 +452,7 @@ struct Controller::Impl mEventData->mIsShowingPlaceholderText = false; // Remove mPlaceholderTextColor - mVisualModel->SetTextColor( mTextColor ); + mModel->mVisualModel->SetTextColor( mTextColor ); } } @@ -419,14 +466,14 @@ struct Controller::Impl } } - void ResetImfManager() + void ResetInputMethodContext() { if( mEventData ) { // Reset incase we are in a pre-edit state. - if( mEventData->mImfManager ) + if( mEventData->mInputMethodContext ) { - mEventData->mImfManager.Reset(); // Will trigger a message ( commit, get surrounding ) + mEventData->mInputMethodContext.Reset(); // Will trigger a message ( commit, get surrounding ) } ClearPreEditFlag(); @@ -434,9 +481,14 @@ struct Controller::Impl } /** - * @brief Helper to notify IMF manager with surrounding text & cursor changes. + * @brief Helper to notify InputMethodContext with surrounding text & cursor changes. + */ + void NotifyInputMethodContext(); + + /** + * @brief Helper to notify InputMethodContext with multi line status. */ - void NotifyImfManager(); + void NotifyInputMethodContextMultiLineStatus(); /** * @brief Retrieve the current cursor position. @@ -470,6 +522,12 @@ struct Controller::Impl return !result; // If NumberOfItems greater than 0, return false } + bool IsClipboardVisible() + { + bool result( mClipboard && mClipboard.IsVisible() ); + return result; + } + /** * @brief Calculates the start character index of the first paragraph to be updated and * the end character index of the last paragraph to be updated. @@ -577,10 +635,10 @@ struct Controller::Impl void SendSelectionToClipboard( bool deleteAfterSending ); - void GetTextFromClipboard( unsigned int itemIndex, std::string& retrievedString ); + void RequestGetTextFromClipboard(); void RepositionSelectionHandles(); - void RepositionSelectionHandles( float visualX, float visualY ); + void RepositionSelectionHandles( float visualX, float visualY, Controller::NoTextTap::Action action ); void SetPopupButtons(); @@ -665,6 +723,18 @@ struct Controller::Impl */ void ScrollTextToMatchCursor( const CursorInfo& cursorInfo ); +public: + + /** + * @brief Gets implementation from the controller handle. + * @param controller The text controller + * @return The implementation of the Controller + */ + static Impl& GetImplementation( Text::Controller& controller ) + { + return *controller.mImpl; + } + private: // Declared private and left undefined to avoid copies. Impl( const Impl& ); @@ -673,9 +743,9 @@ private: public: - ControlInterface& mControlInterface; ///< Reference to the text controller. - LogicalModelPtr mLogicalModel; ///< Pointer to the logical model. - VisualModelPtr mVisualModel; ///< Pointer to the visual model. + ControlInterface* mControlInterface; ///< Reference to the text controller. + EditableControlInterface* mEditableControlInterface; ///< Reference to the editable text controller. + ModelPtr mModel; ///< Pointer to the text's model. FontDefaults* mFontDefaults; ///< Avoid allocating this when the user does not specify a font. UnderlineDefaults* mUnderlineDefaults; ///< Avoid allocating this when the user does not specify underline parameters. ShadowDefaults* mShadowDefaults; ///< Avoid allocating this when the user does not specify shadow parameters. @@ -686,24 +756,33 @@ public: Clipboard mClipboard; ///< Handle to the system clipboard View mView; ///< The view interface to the rendering back-end. MetricsPtr mMetrics; ///< A wrapper around FontClient used to get metrics & potentially down-scaled Emoji metrics. - LayoutEngine mLayoutEngine; ///< The layout engine. + Layout::Engine mLayoutEngine; ///< The layout engine. Vector mModifyEvents; ///< Temporary stores the text set until the next relayout. Vector4 mTextColor; ///< The regular text color - /** - * 0,0 means that the top-left corner of the layout matches the top-left corner of the UI control. - * Typically this will have a negative value with scrolling occurs. - */ - Vector2 mScrollPosition; ///< The text is offset by this position when scrolling. TextUpdateInfo mTextUpdateInfo; ///< Info of the characters updated. OperationsMask mOperationsPending; ///< Operations pending to be done to layout the text. Length mMaximumNumberOfCharacters; ///< Maximum number of characters that can be inserted. + HiddenText* mHiddenInput; ///< Avoid allocating this when the user does not specify hidden input mode. + Vector2 mTextFitContentSize; ///< Size of Text fit content bool mRecalculateNaturalSize:1; ///< Whether the natural size needs to be recalculated. bool mMarkupProcessorEnabled:1; ///< Whether the mark-up procesor is enabled. bool mClipboardHideEnabled:1; ///< Whether the ClipboardHide function work or not - bool mAutoScrollEnabled:1; ///< Whether auto text scrolling is enabled. - CharacterDirection mAutoScrollDirectionRTL:1; ///< Direction of auto scrolling, true if rtl - + bool mIsAutoScrollEnabled:1; ///< Whether auto text scrolling is enabled. + bool mUpdateTextDirection:1; ///< Whether the text direction needs to be updated. + CharacterDirection mIsTextDirectionRTL:1; ///< Whether the text direction is right to left or not + + bool mUnderlineSetByString:1; ///< Set when underline is set by string (legacy) instead of map + bool mShadowSetByString:1; ///< Set when shadow is set by string (legacy) instead of map + bool mOutlineSetByString:1; ///< Set when outline is set by string (legacy) instead of map + bool mFontStyleSetByString:1; ///< Set when font style is set by string (legacy) instead of map + bool mShouldClearFocusOnEscape:1; ///< Whether text control should clear key input focus + LayoutDirection::Type mLayoutDirection; ///< Current system language direction + + float mTextFitMinSize; ///< Minimum Font Size for text fit. Default 10 + float mTextFitMaxSize; ///< Maximum Font Size for text fit. Default 100 + float mTextFitStepSize; ///< Step Size for font intervalse. Default 1 + bool mTextFitEnabled : 1; ///< Whether the text's fit is enabled. }; } // namespace Text @@ -712,4 +791,4 @@ public: } // namespace Dali -#endif // __DALI_TOOLKIT_TEXT_CONTROLLER_H__ +#endif // DALI_TOOLKIT_TEXT_CONTROLLER_H