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=8ada007de5669a9eeaa3aa2f71fc130d28a4d0a6;hp=426cc607db63393981c16fdd61c62569217edd6a;hb=8608d23a021ba74d1a79ee62a3fda1ef4ece09b1;hpb=d15b9def82b922ae3013ea250e4f6fe260417a79 diff --git a/dali-toolkit/internal/text/text-controller-impl.h b/dali-toolkit/internal/text/text-controller-impl.h index 426cc60..8ada007 100644 --- a/dali-toolkit/internal/text/text-controller-impl.h +++ b/dali-toolkit/internal/text/text-controller-impl.h @@ -20,13 +20,13 @@ // EXTERNAL INCLUDES #include -#include #include // INTERNAL INCLUDES #include #include #include +#include #include namespace Dali @@ -107,6 +107,7 @@ struct EventData SELECTION_CHANGED, EDITING, EDITING_WITH_POPUP, + EDITING_WITH_GRAB_HANDLE, GRAB_HANDLE_PANNING, SELECTION_HANDLE_PANNING }; @@ -173,9 +174,14 @@ struct ModifyEvent struct FontDefaults { FontDefaults() - : mDefaultPointSize(0.0f), + : mFontDescription(), + mFontStyle(), + mDefaultPointSize(0.0f), mFontId(0u) { + // Initially use the default platform font + TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get(); + fontClient.GetDefaultPlatformFontDescription( mFontDescription ); } FontId GetFontId( TextAbstraction::FontClient& fontClient ) @@ -183,14 +189,14 @@ struct FontDefaults if( !mFontId ) { Dali::TextAbstraction::PointSize26Dot6 pointSize = mDefaultPointSize*64; - mFontId = fontClient.GetFontId( mDefaultFontFamily, mDefaultFontStyle, pointSize ); + mFontId = fontClient.GetFontId( mFontDescription, pointSize ); } return mFontId; } - std::string mDefaultFontFamily; - std::string mDefaultFontStyle; + TextAbstraction::FontDescription mFontDescription; + std::string mFontStyle; float mDefaultPointSize; FontId mFontId; }; @@ -206,14 +212,15 @@ struct Controller::Impl mFontClient(), mClipboard(), mView(), + mMetrics(), mLayoutEngine(), mModifyEvents(), - mControlSize(), mTextColor( Color::BLACK ), mAlignmentOffset(), mOperationsPending( NO_OPERATION ), mMaximumNumberOfCharacters( 50 ), - mRecalculateNaturalSize( true ) + mRecalculateNaturalSize( true ), + mUserDefinedFontFamily( false ) { mLogicalModel = LogicalModel::New(); mVisualModel = VisualModel::New(); @@ -223,6 +230,10 @@ struct Controller::Impl mView.SetVisualModel( 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 ); @@ -230,6 +241,7 @@ struct Controller::Impl ~Impl() { + delete mFontDefaults; delete mEventData; } @@ -279,6 +291,20 @@ struct Controller::Impl } /** + * @brief Helper to check whether active place-holder text is available. + */ + bool IsFocusedPlaceholderAvailable() const + { + return ( mEventData && !mEventData->mPlaceholderTextActive.empty() ); + } + + bool IsShowingRealText() const + { + return ( !IsShowingPlaceholderText() && + 0u != mLogicalModel->mText.Count() ); + } + + /** * @brief Called when placeholder-text is hidden */ void PlaceholderCleared() @@ -304,14 +330,17 @@ struct Controller::Impl void ResetImfManager() { - // Reset incase we are in a pre-edit state. - ImfManager imfManager = ImfManager::Get(); - if ( imfManager ) + if( mEventData ) { - imfManager.Reset(); // Will trigger a commit message + // Reset incase we are in a pre-edit state. + ImfManager imfManager = ImfManager::Get(); + if ( imfManager ) + { + imfManager.Reset(); // Will trigger a commit message + } + + ClearPreEditFlag(); } - - ClearPreEditFlag(); } bool IsClipboardEmpty() @@ -461,16 +490,18 @@ struct Controller::Impl FontDefaults* mFontDefaults; ///< Avoid allocating this when the user does not specify a font. EventData* mEventData; ///< Avoid allocating everything for text input until EnableTextInput(). TextAbstraction::FontClient mFontClient; ///< Handle to the font client. - Clipboard mClipboard; ///< Handle to the system clipboard + 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. std::vector mModifyEvents; ///< Temporary stores the text set until the next relayout. - Size mControlSize; ///< The size of the control. Vector4 mTextColor; ///< The regular text color Vector2 mAlignmentOffset; ///< Vertical and horizontal offset of the whole text inside the control due to alignment. OperationsMask mOperationsPending; ///< Operations pending to be done to layout the text. Length mMaximumNumberOfCharacters; ///< Maximum number of characters that can be inserted. + bool mRecalculateNaturalSize:1; ///< Whether the natural size needs to be recalculated. + bool mUserDefinedFontFamily:1; ///< Whether the Font family was set by the user instead of being left as sytem default. }; } // namespace Text