-
- return mFontId;
- }
-
- std::string mDefaultFontFamily;
- std::string mDefaultFontStyle;
- float mDefaultPointSize;
- FontId mFontId;
-};
-
-struct Controller::Impl
-{
- Impl( ControlInterface& controlInterface )
- : mControlInterface( controlInterface ),
- mLogicalModel(),
- mVisualModel(),
- mFontDefaults( NULL ),
- mTextInput( NULL ),
- mFontClient(),
- mView(),
- mLayoutEngine(),
- mNewText(),
- mControlSize(),
- mOperationsPending( NO_OPERATION ),
- mRecalculateNaturalSize( true )
- {
- mLogicalModel = LogicalModel::New();
- mVisualModel = VisualModel::New();
-
- mFontClient = TextAbstraction::FontClient::Get();
-
- mView.SetVisualModel( mVisualModel );
- }
-
- ~Impl()
- {
- delete mTextInput;
- }
-
- ControlInterface& mControlInterface; ///< Reference to the text controller.
- LogicalModelPtr mLogicalModel; ///< Pointer to the logical model.
- VisualModelPtr mVisualModel; ///< Pointer to the visual model.
- FontDefaults* mFontDefaults; ///< Avoid allocating this when the user does not specify a font.
- Controller::TextInput* mTextInput; ///< Avoid allocating everything for text input until EnableTextInput().
- TextAbstraction::FontClient mFontClient; ///< Handle to the font client.
- View mView; ///< The view interface to the rendering back-end.
- LayoutEngine mLayoutEngine; ///< The layout engine.
- std::string mNewText; ///< Temporary stores the text set until the next relayout.
- Size mControlSize; ///< The size of the control.
- OperationsMask mOperationsPending; ///< Operations pending to be done to layout the text.
- bool mRecalculateNaturalSize:1; ///< Whether the natural size needs to be recalculated.
-};
-
-ControllerPtr Controller::New( ControlInterface& controlInterface )
-{
- return ControllerPtr( new Controller( controlInterface ) );
-}
-
-void Controller::SetText( const std::string& text )
-{
- // Keep until size negotiation
- mImpl->mNewText = text;
-
- // All operations need to be done. (convert to utf32, get break info, ..., layout, ...)
- mImpl->mOperationsPending = ALL_OPERATIONS;
-
- // The natural size needs to be re-calculated.
- mImpl->mRecalculateNaturalSize = true;
-
- // Reset buffers.
- mImpl->mLogicalModel->SetText( NULL, 0u );
- mImpl->mLogicalModel->SetScripts( NULL, 0u );
- mImpl->mLogicalModel->SetFonts( NULL, 0u );
- mImpl->mLogicalModel->SetLineBreakInfo( NULL, 0u );
- mImpl->mLogicalModel->SetWordBreakInfo( NULL, 0u );
- mImpl->mLogicalModel->SetBidirectionalInfo( NULL, 0u );
- mImpl->mLogicalModel->SetVisualToLogicalMap( NULL, 0u );
- mImpl->mVisualModel->SetGlyphs( NULL, NULL, NULL, 0u );
- mImpl->mVisualModel->SetGlyphPositions( NULL, 0u );
- mImpl->mVisualModel->SetLines( NULL, 0u );
-
- if( mImpl->mTextInput )
- {
- // Cancel previously queued events
- mImpl->mTextInput->mEventQueue.clear();
-
- // TODO - Hide selection decorations
- }
-}
-
-void Controller::GetText( std::string& text ) const
-{
- if( !mImpl->mNewText.empty() )
- {
- text = mImpl->mNewText;
- }
- else
- {
- // TODO - Convert from UTF-32