X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Ftext-controls%2Ftext-editor-impl.cpp;h=7e64b6e3cb412c4d822069f4b8c8efac97988167;hp=9ce26d6c7b8015c4eb473745633e2b5403837559;hb=8e1f9693459d06c4273f4423d16394615f6dfafe;hpb=f546dd5d83a968e573f8f053a01ce43df32c71a0 diff --git a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp index 9ce26d6..7e64b6e 100644 --- a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -142,8 +143,12 @@ DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, TextEditor, "renderingBackend", DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, TextEditor, "maxLength", INTEGER, MAX_LENGTH ) DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, TextEditor, "selectedTextStart", INTEGER, SELECTED_TEXT_START ) DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, TextEditor, "selectedTextEnd", INTEGER, SELECTED_TEXT_END ) +DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, TextEditor, "horizontalScrollPosition", FLOAT, HORIZONTAL_SCROLL_POSITION ) +DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, TextEditor, "verticalScrollPosition", INTEGER, VERTICAL_SCROLL_POSITION ) DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, TextEditor, "enableEditing", BOOLEAN, ENABLE_EDITING ) DALI_DEVEL_PROPERTY_REGISTRATION_READ_ONLY( Toolkit, TextEditor, "selectedText", STRING, SELECTED_TEXT ) +DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, TextEditor, "fontSizeScale", FLOAT, FONT_SIZE_SCALE ) +DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, TextEditor, "primaryCursorPosition", INTEGER, PRIMARY_CURSOR_POSITION ) DALI_SIGNAL_REGISTRATION( Toolkit, TextEditor, "textChanged", SIGNAL_TEXT_CHANGED ) DALI_SIGNAL_REGISTRATION( Toolkit, TextEditor, "inputStyleChanged", SIGNAL_INPUT_STYLE_CHANGED ) @@ -721,6 +726,47 @@ void TextEditor::SetProperty( BaseObject* object, Property::Index index, const P impl.SetEditable( editable ); break; } + case Toolkit::DevelTextEditor::Property::HORIZONTAL_SCROLL_POSITION: + { + float horizontalScroll = value.Get< float >(); + DALI_LOG_INFO( gLogFilter, Debug::General, "TextEditor %p HORIZONTAL_SCROLL_POSITION %d\n", impl.mController.Get(), horizontalScroll ); + if (horizontalScroll >= 0.0f) + { + impl.ScrollBy( Vector2(horizontalScroll - impl.GetHorizontalScrollPosition(), 0 )); + } + break; + } + case Toolkit::DevelTextEditor::Property::VERTICAL_SCROLL_POSITION: + { + float verticalScroll = value.Get< float >(); + DALI_LOG_INFO( gLogFilter, Debug::General, "TextEditor %p VERTICAL_SCROLL_POSITION %d\n", impl.mController.Get(), verticalScroll ); + if (verticalScroll >= 0.0f) + { + impl.ScrollBy( Vector2(0, verticalScroll - impl.GetVerticalScrollPosition() )); + } + break; + } + case Toolkit::DevelTextEditor::Property::FONT_SIZE_SCALE: + { + const float scale = value.Get< float >(); + DALI_LOG_INFO( gLogFilter, Debug::General, "TextEditor %p FONT_SIZE_SCALE %f\n", impl.mController.Get(), scale ); + + if( !Equals( impl.mController->GetFontSizeScale(), scale ) ) + { + impl.mController->SetFontSizeScale( scale ); + } + break; + } + case Toolkit::DevelTextEditor::Property::PRIMARY_CURSOR_POSITION: + { + uint32_t position = static_cast(value.Get< int >()); + DALI_LOG_INFO( gLogFilter, Debug::General, "TextEditor %p PRIMARY_CURSOR_POSITION %d\n", impl.mController.Get(), position ); + if (impl.mController->SetPrimaryCursorPosition( position )) + { + impl.SetKeyInputFocus(); + } + break; + } } // switch } // texteditor } @@ -1057,6 +1103,26 @@ Property::Value TextEditor::GetProperty( BaseObject* object, Property::Index ind value = impl.IsEditable(); break; } + case Toolkit::DevelTextEditor::Property::HORIZONTAL_SCROLL_POSITION: + { + value = impl.GetHorizontalScrollPosition(); + break; + } + case Toolkit::DevelTextEditor::Property::VERTICAL_SCROLL_POSITION: + { + value = impl.GetVerticalScrollPosition(); + break; + } + case Toolkit::DevelTextEditor::Property::FONT_SIZE_SCALE: + { + value = impl.mController->GetFontSizeScale(); + break; + } + case Toolkit::DevelTextEditor::Property::PRIMARY_CURSOR_POSITION: + { + value = static_cast(impl.mController->GetPrimaryCursorPosition()); + break; + } } //switch } @@ -1080,6 +1146,32 @@ void TextEditor::SelectNone() } } +void TextEditor::ScrollBy(Vector2 scroll) +{ + if( mController && mController->IsShowingRealText() ) + { + mController->ScrollBy(scroll); + } +} + +float TextEditor::GetHorizontalScrollPosition() +{ + if( mController && mController->IsShowingRealText() ) + { + return mController->GetHorizontalScrollPosition(); + } + return 0; +} + +float TextEditor::GetVerticalScrollPosition() +{ + if( mController && mController->IsShowingRealText() ) + { + return mController->GetVerticalScrollPosition(); + } + return 0; +} + string TextEditor::GetSelectedText() const { string selectedText = ""; @@ -1215,6 +1307,9 @@ void TextEditor::OnInitialize() self.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::HEIGHT ); self.OnSceneSignal().Connect( this, &TextEditor::OnSceneConnect ); + //Enable highightability + self.SetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true ); + DevelControl::SetInputMethodContext( *this, mInputMethodContext ); // Creates an extra control to be used as stencil buffer. @@ -1419,6 +1514,9 @@ void TextEditor::OnKeyInputFocusGained() DALI_LOG_INFO( gLogFilter, Debug::Verbose, "TextEditor::OnKeyInputFocusGained %p\n", mController.Get() ); if ( mInputMethodContext && IsEditable() ) { + // All input panel properties, such as layout, return key type, and input hint, should be set before input panel activates (or shows). + mInputMethodContext.NotifyTextInputMultiLine( true ); + mInputMethodContext.StatusChangedSignal().Connect( this, &TextEditor::KeyboardStatusChanged ); mInputMethodContext.EventReceivedSignal().Connect( this, &TextEditor::OnInputMethodContextEvent ); @@ -1468,6 +1566,12 @@ void TextEditor::OnKeyInputFocusLost() EmitKeyInputFocusSignal( false ); // Calls back into the Control hence done last. } +bool TextEditor::OnAccessibilityActivated() +{ + SetKeyInputFocus(); + return true; +} + void TextEditor::OnTap( const TapGesture& gesture ) { DALI_LOG_INFO( gLogFilter, Debug::Verbose, "TextEditor::OnTap %p\n", mController.Get() ); @@ -1989,7 +2093,7 @@ Dali::Accessibility::Range TextEditor::AccessibleImpl::GetTextAtOffset( if (boundary == Dali::Accessibility::TextBoundary::LINE) counter++; } - if ((counter - 1) == offset) + if ((counter > 0) && ((counter - 1) == offset)) { range.content = txt.substr(start, index - start + 1); range.startOffset = start; @@ -2089,9 +2193,17 @@ bool TextEditor::AccessibleImpl::CutText( size_t startPosition, Dali::Accessibility::States TextEditor::AccessibleImpl::CalculateStates() { - auto states = Control::Impl::AccessibleImpl::CalculateStates(); using namespace Dali::Accessibility; + + auto states = Control::Impl::AccessibleImpl::CalculateStates(); states[State::EDITABLE] = true; + states[State::FOCUSABLE] = true; + + Toolkit::Control focusControl = Toolkit::KeyInputFocusManager::Get().GetCurrentFocusControl(); + if (self == focusControl) + { + states[State::FOCUSED] = true; + } return states; }