From 19179e76939a18697e6919177a4c561586e8d30b Mon Sep 17 00:00:00 2001 From: Seoyeon Kim Date: Wed, 23 Jun 2021 15:13:40 +0900 Subject: [PATCH] Update ATSPI code according to DALi coding rule - Updated accessibility and bridge code, such as description or coding style. - Changed 'Caret' to 'Cursor' for dali text style. The patches below should be applied together. https://review.tizen.org/gerrit/#/c/platform/core/uifw/dali-adaptor/+/260281/ https://review.tizen.org/gerrit/#/c/platform/core/uifw/dali-csharp-binder/+/260322/ Change-Id: Id29163ab035efdcea6a06314bfcbf2826b2f09f2 Signed-off-by: Seoyeon Kim --- .../utc-Dali-Accessibility-Controls-BridgeUp.cpp | 6 +- .../utc-Dali-Accessibility-Controls.cpp | 28 +- .../utc-Dali-Accessibility-Text.cpp | 40 +-- .../utc-Dali-Text-Controller.cpp | 2 +- .../utc-Dali-TextEditor-internal.cpp | 14 +- .../utc-Dali-TextField-internal.cpp | 14 +- .../utc-Dali-TextLabel-internal.cpp | 12 +- .../devel-api/controls/accessible-impl.cpp | 150 ++++++----- dali-toolkit/devel-api/controls/accessible-impl.h | 11 +- dali-toolkit/devel-api/controls/control-devel.cpp | 138 +++++----- dali-toolkit/devel-api/controls/control-devel.h | 4 +- .../internal/controls/buttons/button-impl.cpp | 4 + .../controls/buttons/check-box-button-impl.cpp | 15 +- .../internal/controls/buttons/push-button-impl.cpp | 14 +- .../controls/buttons/radio-button-impl.cpp | 20 +- .../controls/buttons/toggle-button-impl.cpp | 7 +- .../controls/control/control-data-impl.cpp | 297 +++++++++++---------- .../internal/controls/control/control-data-impl.h | 48 ++-- .../controls/progress-bar/progress-bar-impl.cpp | 13 +- .../controls/scroll-bar/scroll-bar-impl.cpp | 37 +-- .../internal/controls/slider/slider-impl.cpp | 32 ++- .../controls/text-controls/text-editor-impl.cpp | 194 ++++++++------ .../controls/text-controls/text-editor-impl.h | 103 +++++-- .../controls/text-controls/text-field-impl.cpp | 200 ++++++++------ .../controls/text-controls/text-field-impl.h | 109 ++++++-- .../controls/text-controls/text-label-impl.cpp | 128 +++++---- .../controls/text-controls/text-label-impl.h | 67 ++++- .../text/text-controller-impl-event-handler.cpp | 2 +- .../text/text-editable-control-interface.h | 4 +- 29 files changed, 1008 insertions(+), 705 deletions(-) diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls-BridgeUp.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls-BridgeUp.cpp index 808cc7a..a6b682e 100644 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls-BridgeUp.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls-BridgeUp.cpp @@ -712,7 +712,7 @@ int UtcDaliAccessibilityGetExtents(void) auto a = Dali::Accessibility::Accessible::Get( control ); auto a_component = dynamic_cast( a ); - auto extents = a_component->GetExtents(Dali::Accessibility::CoordType::SCREEN); + auto extents = a_component->GetExtents(Dali::Accessibility::CoordinateType::SCREEN); DALI_TEST_EQUALS( extents.x, 5.0f, TEST_LOCATION ); DALI_TEST_EQUALS( extents.y, 5.0f, TEST_LOCATION ); DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION ); @@ -728,7 +728,7 @@ int UtcDaliAccessibilityGetExtents(void) application.SendNotification(); application.Render( 1 ); - extents = a_component->GetExtents(Dali::Accessibility::CoordType::SCREEN); + extents = a_component->GetExtents(Dali::Accessibility::CoordinateType::SCREEN); DALI_TEST_EQUALS( extents.x, 10.0f, TEST_LOCATION ); DALI_TEST_EQUALS( extents.y, 10.0f, TEST_LOCATION ); DALI_TEST_EQUALS( extents.height, 10.0f, TEST_LOCATION ); @@ -1050,4 +1050,4 @@ int UtcDaliAccessibilityScrollToChildNonScrollable(void) Dali::Accessibility::TestEnableSC( false ); END_TEST; -} \ No newline at end of file +} diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls.cpp index dabd012..9243a0b 100644 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls.cpp @@ -540,9 +540,9 @@ int UtcDaliAccessibilityTextField(void) auto text = dynamic_cast< Dali::Accessibility::Text* >( accessible ); DALI_TEST_CHECK( text ); DALI_TEST_EQUALS( text->GetText( 0, 10 ), "", TEST_LOCATION ); - DALI_TEST_EQUALS( text->SetCaretOffset(100), false, TEST_LOCATION ); - DALI_TEST_EQUALS( text->SetCaretOffset(2), true, TEST_LOCATION ); - DALI_TEST_EQUALS( text->GetCaretOffset(), 2, TEST_LOCATION ); + DALI_TEST_EQUALS( text->SetCursorOffset(100), false, TEST_LOCATION ); + DALI_TEST_EQUALS( text->SetCursorOffset(2), true, TEST_LOCATION ); + DALI_TEST_EQUALS( text->GetCursorOffset(), 2, TEST_LOCATION ); auto editabletext = dynamic_cast< Dali::Accessibility::EditableText* >( accessible ); DALI_TEST_CHECK( editabletext ); @@ -552,11 +552,11 @@ int UtcDaliAccessibilityTextField(void) DALI_TEST_EQUALS( editabletext->CutText( 1, 3 ), true, TEST_LOCATION ); DALI_TEST_EQUALS( text->GetText( 0, 1 ), "t", TEST_LOCATION ); - auto range = text->GetSelection( 1 ); + auto range = text->GetRangeOfSelection( 1 ); DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION ); DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION ); DALI_TEST_EQUALS( range.content, "", TEST_LOCATION ); - DALI_TEST_EQUALS( text->SetSelection( 1, 0, 1 ), false, TEST_LOCATION ); + DALI_TEST_EQUALS( text->SetRangeOfSelection( 1, 0, 1 ), false, TEST_LOCATION ); DALI_TEST_EQUALS( text->RemoveSelection( 1 ), false, TEST_LOCATION ); DALI_TEST_EQUALS(editabletext->SetTextContents("adef"), true, TEST_LOCATION); @@ -596,9 +596,9 @@ int UtcDaliAccessibilityTextEditor(void) auto text = dynamic_cast< Dali::Accessibility::Text* >( accessible ); DALI_TEST_CHECK( text ); DALI_TEST_EQUALS( text->GetText( 0, 10 ), "", TEST_LOCATION ); - DALI_TEST_EQUALS( text->SetCaretOffset(100), false, TEST_LOCATION ); - DALI_TEST_EQUALS( text->SetCaretOffset(2), true, TEST_LOCATION ); - DALI_TEST_EQUALS( text->GetCaretOffset(), 2, TEST_LOCATION ); + DALI_TEST_EQUALS( text->SetCursorOffset(100), false, TEST_LOCATION ); + DALI_TEST_EQUALS( text->SetCursorOffset(2), true, TEST_LOCATION ); + DALI_TEST_EQUALS( text->GetCursorOffset(), 2, TEST_LOCATION ); auto editabletext = dynamic_cast< Dali::Accessibility::EditableText* >( accessible ); DALI_TEST_CHECK( editabletext ); @@ -608,11 +608,11 @@ int UtcDaliAccessibilityTextEditor(void) DALI_TEST_EQUALS( editabletext->CutText( 1, 3 ), true, TEST_LOCATION ); DALI_TEST_EQUALS( text->GetText( 0, 1 ), "t", TEST_LOCATION ); - auto range = text->GetSelection( 1 ); + auto range = text->GetRangeOfSelection( 1 ); DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION ); DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION ); DALI_TEST_EQUALS( range.content, "", TEST_LOCATION ); - DALI_TEST_EQUALS( text->SetSelection( 1, 0, 1 ), false, TEST_LOCATION ); + DALI_TEST_EQUALS( text->SetRangeOfSelection( 1, 0, 1 ), false, TEST_LOCATION ); DALI_TEST_EQUALS( text->RemoveSelection( 1 ), false, TEST_LOCATION ); DALI_TEST_EQUALS(editabletext->SetTextContents("adef"), true, TEST_LOCATION); @@ -650,14 +650,14 @@ int UtcDaliAccessibilityTextLabel(void) DALI_TEST_CHECK( text ); DALI_TEST_EQUALS( text->GetText( 0, 10 ), "", TEST_LOCATION ); DALI_TEST_EQUALS( text->GetText( 0, 4 ), "test", TEST_LOCATION ); - DALI_TEST_EQUALS( text->SetCaretOffset(0), false, TEST_LOCATION ); - DALI_TEST_EQUALS( text->GetCaretOffset(), 0, TEST_LOCATION ); + DALI_TEST_EQUALS( text->SetCursorOffset(0), false, TEST_LOCATION ); + DALI_TEST_EQUALS( text->GetCursorOffset(), 0, TEST_LOCATION ); - auto range = text->GetSelection( 1 ); + auto range = text->GetRangeOfSelection( 1 ); DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION ); DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION ); DALI_TEST_EQUALS( range.content, "", TEST_LOCATION ); - DALI_TEST_EQUALS( text->SetSelection( 1, 0, 1 ), false, TEST_LOCATION ); + DALI_TEST_EQUALS( text->SetRangeOfSelection( 1, 0, 1 ), false, TEST_LOCATION ); DALI_TEST_EQUALS( text->RemoveSelection( 1 ), false, TEST_LOCATION ); Dali::Accessibility::TestEnableSC( false ); diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Text.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Text.cpp index 7bc4fe1..6b77f00 100644 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Text.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Text.cpp @@ -141,7 +141,7 @@ int utcDaliAccessibilityTextEditorGetTextAtOffset(void) END_TEST; } -int utcDaliAccessibilityTextEditorGetSetSelection(void) +int utcDaliAccessibilityTextEditorGetSetRangeOfSelection(void) { ToolkitTestApplication application; @@ -151,14 +151,14 @@ int utcDaliAccessibilityTextEditorGetSetSelection(void) DALI_TEST_CHECK( x ); if( x ) { - auto range = x->GetSelection( 0 ); + auto range = x->GetRangeOfSelection( 0 ); DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION ); DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION ); DALI_TEST_EQUALS( range.content, "", TEST_LOCATION ); - x->SetSelection( 0, 4, 9 ); + x->SetRangeOfSelection( 0, 4, 9 ); editor.SetProperty( Toolkit::TextEditor::Property::TEXT, "exemplary_text" ); - range = x->GetSelection( 0 ); + range = x->GetRangeOfSelection( 0 ); DALI_TEST_EQUALS( range.startOffset, 4, TEST_LOCATION ); DALI_TEST_EQUALS( range.endOffset, 9, TEST_LOCATION ); @@ -178,17 +178,17 @@ int utcDaliAccessibilityTextEditorRemoveSelection(void) DALI_TEST_CHECK( x ); if( x ) { - auto range = x->GetSelection( 0 ); + auto range = x->GetRangeOfSelection( 0 ); DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION ); DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION ); - x->SetSelection( 0, 4, 9 ); - range = x->GetSelection( 0 ); + x->SetRangeOfSelection( 0, 4, 9 ); + range = x->GetRangeOfSelection( 0 ); DALI_TEST_EQUALS( range.startOffset, 4, TEST_LOCATION ); DALI_TEST_EQUALS( range.endOffset, 9, TEST_LOCATION ); x->RemoveSelection( 0 ); - range = x->GetSelection( 0 ); + range = x->GetRangeOfSelection( 0 ); DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION ); DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION ); } @@ -299,7 +299,7 @@ int utcDaliAccessibilityTextFieldGetTextAtOffset(void) END_TEST; } -int utcDaliAccessibilityTextFieldGetSetSelection(void) +int utcDaliAccessibilityTextFieldGetSetRangeOfSelection(void) { ToolkitTestApplication application; @@ -309,14 +309,14 @@ int utcDaliAccessibilityTextFieldGetSetSelection(void) DALI_TEST_CHECK( x ); if( x ) { - auto range = x->GetSelection( 0 ); + auto range = x->GetRangeOfSelection( 0 ); DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION ); DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION ); DALI_TEST_EQUALS( range.content, "", TEST_LOCATION ); - x->SetSelection( 0, 4, 9 ); + x->SetRangeOfSelection( 0, 4, 9 ); field.SetProperty( Toolkit::TextEditor::Property::TEXT, "exemplary_text" ); - range = x->GetSelection( 0 ); + range = x->GetRangeOfSelection( 0 ); DALI_TEST_EQUALS( range.startOffset, 4, TEST_LOCATION ); DALI_TEST_EQUALS( range.endOffset, 9, TEST_LOCATION ); @@ -336,17 +336,17 @@ int utcDaliAccessibilityTextFieldRemoveSelection(void) DALI_TEST_CHECK( x ); if( x ) { - auto range = x->GetSelection( 0 ); + auto range = x->GetRangeOfSelection( 0 ); DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION ); DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION ); - x->SetSelection( 0, 4, 9 ); - range = x->GetSelection( 0 ); + x->SetRangeOfSelection( 0, 4, 9 ); + range = x->GetRangeOfSelection( 0 ); DALI_TEST_EQUALS( range.startOffset, 4, TEST_LOCATION ); DALI_TEST_EQUALS( range.endOffset, 9, TEST_LOCATION ); x->RemoveSelection( 0 ); - range = x->GetSelection( 0 ); + range = x->GetRangeOfSelection( 0 ); DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION ); DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION ); } @@ -467,17 +467,17 @@ int utcDaliAccessibilityTextLabelRemoveSelection( void ) DALI_TEST_CHECK( x ); if( x ) { - auto range = x->GetSelection( 0 ); + auto range = x->GetRangeOfSelection( 0 ); DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION ); DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION ); - x->SetSelection( 0, 4, 9 ); - range = x->GetSelection( 0 ); + x->SetRangeOfSelection( 0, 4, 9 ); + range = x->GetRangeOfSelection( 0 ); DALI_TEST_EQUALS( range.startOffset, 4, TEST_LOCATION ); DALI_TEST_EQUALS( range.endOffset, 9, TEST_LOCATION ); x->RemoveSelection( 0 ); - range = x->GetSelection( 0 ); + range = x->GetRangeOfSelection( 0 ); DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION ); DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION ); } diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Controller.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Controller.cpp index 024942f..bb3ed33 100755 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Controller.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Controller.cpp @@ -412,7 +412,7 @@ int UtcDaliTextControllerImfPreeditStyleReverse(void) // Creates a temporary text-field to use mEditableControlInterface. TextField field = TextField::New(); Toolkit::Internal::TextField& fieldImpl = GetImpl(field); - ControllerPtr fieldController = fieldImpl.getController(); + ControllerPtr fieldController = fieldImpl.GetTextController(); Controller::Impl& fieldControllerImpl = Controller::Impl::GetImplementation(*fieldController.Get()); Controller::Impl& controllerImpl = Controller::Impl::GetImplementation(*controller.Get()); diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-TextEditor-internal.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-TextEditor-internal.cpp index 4aff653..0b18d11 100755 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-TextEditor-internal.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-TextEditor-internal.cpp @@ -90,13 +90,13 @@ int UtcDaliTextEditorMarkupUnderline(void) uint32_t expectedNumberOfUnderlinedGlyphs = 5u; Toolkit::Internal::TextEditor& textEditorImpl = GetImpl( textEditor ); - const Text::Length numberOfUnderlineRuns = textEditorImpl.getController()->GetTextModel()->GetNumberOfUnderlineRuns(); + const Text::Length numberOfUnderlineRuns = textEditorImpl.GetTextController()->GetTextModel()->GetNumberOfUnderlineRuns(); DALI_TEST_EQUALS( numberOfUnderlineRuns, expectedNumberOfUnderlinedGlyphs, TEST_LOCATION ); Vector underlineRuns; underlineRuns.Resize(numberOfUnderlineRuns); - textEditorImpl.getController()->GetTextModel()->GetUnderlineRuns(underlineRuns.Begin(), 0u, numberOfUnderlineRuns); + textEditorImpl.GetTextController()->GetTextModel()->GetUnderlineRuns(underlineRuns.Begin(), 0u, numberOfUnderlineRuns); //ABC are underlined DALI_TEST_EQUALS( underlineRuns[0u].glyphIndex, 0u, TEST_LOCATION); @@ -184,7 +184,7 @@ int UtcDaliTextEditorBackgroundTag(void) application.Render(); Toolkit::Internal::TextEditor& editorImpl = GetImpl( editor ); - const ColorIndex* const backgroundColorIndicesBuffer = editorImpl.getController()->GetTextModel()->GetBackgroundColorIndices(); + const ColorIndex* const backgroundColorIndicesBuffer = editorImpl.GetTextController()->GetTextModel()->GetBackgroundColorIndices(); DALI_TEST_CHECK( backgroundColorIndicesBuffer ); @@ -226,7 +226,7 @@ int UtcDaliTextEditorTextWithSpan(void) DALI_TEST_GREATER(spanSize.width, originalSize.width, TEST_LOCATION); Toolkit::Internal::TextEditor& editorImpl = GetImpl( editor ); - const ColorIndex* const colorIndicesBuffer1 = editorImpl.getController()->GetTextModel()->GetColorIndices(); + const ColorIndex* const colorIndicesBuffer1 = editorImpl.GetTextController()->GetTextModel()->GetColorIndices(); DALI_TEST_CHECK( colorIndicesBuffer1 ); @@ -245,7 +245,7 @@ int UtcDaliTextEditorTextWithSpan(void) application.SendNotification(); application.Render(); - const ColorIndex* const colorIndicesBuffer2 = editorImpl.getController()->GetTextModel()->GetColorIndices(); + const ColorIndex* const colorIndicesBuffer2 = editorImpl.GetTextController()->GetTextModel()->GetColorIndices(); DALI_TEST_CHECK( colorIndicesBuffer2 ); @@ -280,7 +280,7 @@ int UtcDaliTextEditorControlBackgroundColor(void) application.Render(); Toolkit::Internal::TextEditor& editorImpl = GetImpl(editor); - ControllerPtr controller = editorImpl.getController(); + ControllerPtr controller = editorImpl.GetTextController(); Controller::Impl& controllerImpl = Controller::Impl::GetImplementation(*controller.Get()); // Default color is transparent @@ -297,4 +297,4 @@ int UtcDaliTextEditorControlBackgroundColor(void) DALI_TEST_EQUALS(backgroundColor, Color::RED, TEST_LOCATION); END_TEST; -} \ No newline at end of file +} diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-TextField-internal.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-TextField-internal.cpp index 65de962..77075b5 100755 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-TextField-internal.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-TextField-internal.cpp @@ -172,13 +172,13 @@ int UtcDaliTextFieldMarkupUnderline(void) uint32_t expectedNumberOfUnderlinedGlyphs = 5u; Toolkit::Internal::TextField& textFieldImpl = GetImpl( textField ); - const Text::Length numberOfUnderlineRuns = textFieldImpl.getController()->GetTextModel()->GetNumberOfUnderlineRuns(); + const Text::Length numberOfUnderlineRuns = textFieldImpl.GetTextController()->GetTextModel()->GetNumberOfUnderlineRuns(); DALI_TEST_EQUALS( numberOfUnderlineRuns, expectedNumberOfUnderlinedGlyphs, TEST_LOCATION ); Vector underlineRuns; underlineRuns.Resize(numberOfUnderlineRuns); - textFieldImpl.getController()->GetTextModel()->GetUnderlineRuns(underlineRuns.Begin(), 0u, numberOfUnderlineRuns); + textFieldImpl.GetTextController()->GetTextModel()->GetUnderlineRuns(underlineRuns.Begin(), 0u, numberOfUnderlineRuns); //ABC are underlined DALI_TEST_EQUALS( underlineRuns[0u].glyphIndex, 0u, TEST_LOCATION); @@ -268,7 +268,7 @@ int UtcDaliTextFieldBackgroundTag(void) application.Render(); Toolkit::Internal::TextField& fieldImpl = GetImpl( field ); - const ColorIndex* const backgroundColorIndicesBuffer = fieldImpl.getController()->GetTextModel()->GetBackgroundColorIndices(); + const ColorIndex* const backgroundColorIndicesBuffer = fieldImpl.GetTextController()->GetTextModel()->GetBackgroundColorIndices(); DALI_TEST_CHECK( backgroundColorIndicesBuffer ); @@ -310,7 +310,7 @@ int UtcDaliTextFieldTextWithSpan(void) DALI_TEST_GREATER(spanSize.width, originalSize.width, TEST_LOCATION); Toolkit::Internal::TextField& fieldImpl = GetImpl( field ); - const ColorIndex* const colorIndicesBuffer1 = fieldImpl.getController()->GetTextModel()->GetColorIndices(); + const ColorIndex* const colorIndicesBuffer1 = fieldImpl.GetTextController()->GetTextModel()->GetColorIndices(); DALI_TEST_CHECK( colorIndicesBuffer1 ); @@ -329,7 +329,7 @@ int UtcDaliTextFieldTextWithSpan(void) application.SendNotification(); application.Render(); - const ColorIndex* const colorIndicesBuffer2 = fieldImpl.getController()->GetTextModel()->GetColorIndices(); + const ColorIndex* const colorIndicesBuffer2 = fieldImpl.GetTextController()->GetTextModel()->GetColorIndices(); DALI_TEST_CHECK( colorIndicesBuffer2 ); @@ -364,7 +364,7 @@ int UtcDaliTextFieldControlBackgroundColor(void) application.Render(); Toolkit::Internal::TextField& fieldImpl = GetImpl(field); - ControllerPtr controller = fieldImpl.getController(); + ControllerPtr controller = fieldImpl.GetTextController(); Controller::Impl& controllerImpl = Controller::Impl::GetImplementation(*controller.Get()); // Default color is transparent @@ -381,4 +381,4 @@ int UtcDaliTextFieldControlBackgroundColor(void) DALI_TEST_EQUALS(backgroundColor, Color::RED, TEST_LOCATION); END_TEST; -} \ No newline at end of file +} diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-TextLabel-internal.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-TextLabel-internal.cpp index e03fec1..e8a3996 100755 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-TextLabel-internal.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-TextLabel-internal.cpp @@ -47,13 +47,13 @@ int UtcDaliTextLabelMarkupUnderline(void) uint32_t expectedNumberOfUnderlinedGlyphs = 5u; Toolkit::Internal::TextLabel& textLabelImpl = GetImpl( textLabel ); - const Text::Length numberOfUnderlineRuns = textLabelImpl.getController()->GetTextModel()->GetNumberOfUnderlineRuns(); + const Text::Length numberOfUnderlineRuns = textLabelImpl.GetTextController()->GetTextModel()->GetNumberOfUnderlineRuns(); DALI_TEST_EQUALS( numberOfUnderlineRuns, expectedNumberOfUnderlinedGlyphs, TEST_LOCATION ); Vector underlineRuns; underlineRuns.Resize(numberOfUnderlineRuns); - textLabelImpl.getController()->GetTextModel()->GetUnderlineRuns(underlineRuns.Begin(), 0u, numberOfUnderlineRuns); + textLabelImpl.GetTextController()->GetTextModel()->GetUnderlineRuns(underlineRuns.Begin(), 0u, numberOfUnderlineRuns); //ABC are underlined DALI_TEST_EQUALS( underlineRuns[0u].glyphIndex, 0u, TEST_LOCATION); @@ -83,7 +83,7 @@ int UtcDaliTextLabelBackgroundTag(void) application.Render(); Toolkit::Internal::TextLabel& labelImpl = GetImpl( label ); - const ColorIndex* const backgroundColorIndicesBuffer = labelImpl.getController()->GetTextModel()->GetBackgroundColorIndices(); + const ColorIndex* const backgroundColorIndicesBuffer = labelImpl.GetTextController()->GetTextModel()->GetBackgroundColorIndices(); DALI_TEST_CHECK( backgroundColorIndicesBuffer ); @@ -125,7 +125,7 @@ int UtcDaliTextLabelTextWithSpan(void) DALI_TEST_GREATER(spanSize.width, originalSize.width, TEST_LOCATION); Toolkit::Internal::TextLabel& labelImpl = GetImpl( label ); - const ColorIndex* const colorIndicesBuffer1 = labelImpl.getController()->GetTextModel()->GetColorIndices(); + const ColorIndex* const colorIndicesBuffer1 = labelImpl.GetTextController()->GetTextModel()->GetColorIndices(); DALI_TEST_CHECK( colorIndicesBuffer1 ); @@ -144,7 +144,7 @@ int UtcDaliTextLabelTextWithSpan(void) application.SendNotification(); application.Render(); - const ColorIndex* const colorIndicesBuffer2 = labelImpl.getController()->GetTextModel()->GetColorIndices(); + const ColorIndex* const colorIndicesBuffer2 = labelImpl.GetTextController()->GetTextModel()->GetColorIndices(); DALI_TEST_CHECK( colorIndicesBuffer2 ); @@ -161,4 +161,4 @@ int UtcDaliTextLabelTextWithSpan(void) DALI_TEST_EQUALS( colorIndicesBuffer2[7], 0u, TEST_LOCATION); END_TEST; -} \ No newline at end of file +} diff --git a/dali-toolkit/devel-api/controls/accessible-impl.cpp b/dali-toolkit/devel-api/controls/accessible-impl.cpp index 5f2a157..c42cb8a 100644 --- a/dali-toolkit/devel-api/controls/accessible-impl.cpp +++ b/dali-toolkit/devel-api/controls/accessible-impl.cpp @@ -33,7 +33,8 @@ #include #include -namespace Dali::Toolkit::DevelControl { +namespace Dali::Toolkit::DevelControl +{ static std::string GetLocaleText(std::string string, const char *domain = "dali-toolkit") { @@ -47,15 +48,17 @@ static std::string GetLocaleText(std::string string, const char *domain = "dali- } AccessibleImpl::AccessibleImpl(Dali::Actor self, Dali::Accessibility::Role role, bool modal) -: self(self), - modal(modal) +: mSelf(self), + mIsModal(modal) { auto control = Dali::Toolkit::Control::DownCast(Self()); Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); if(controlImpl.mAccessibilityRole == Dali::Accessibility::Role::UNKNOWN) + { controlImpl.mAccessibilityRole = role; + } Self().PropertySetSignal().Connect(&controlImpl, [this, &controlImpl](Dali::Handle& handle, Dali::Property::Index index, Dali::Property::Value value) { if(this->Self() != Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor()) @@ -169,15 +172,18 @@ Dali::Accessibility::Accessible* AccessibleImpl::GetChildAtIndex(size_t index) size_t AccessibleImpl::GetIndexInParent() { - auto s = Self(); - auto parent = s.GetParent(); + auto self = Self(); + auto parent = self.GetParent(); DALI_ASSERT_ALWAYS(parent && "can't call GetIndexInParent on object without parent"); + auto count = parent.GetChildCount(); for(auto i = 0u; i < count; ++i) { - auto c = parent.GetChildAt(i); - if(c == s) + auto child = parent.GetChildAt(i); + if(child == self) + { return i; + } } DALI_ASSERT_ALWAYS(false && "object isn't child of it's parent"); return static_cast(-1); @@ -196,25 +202,32 @@ std::string AccessibleImpl::GetLocalizedRoleName() Dali::Accessibility::States AccessibleImpl::CalculateStates() { Dali::Actor self = Self(); - Dali::Accessibility::States s; - s[Dali::Accessibility::State::FOCUSABLE] = self.GetProperty(Actor::Property::KEYBOARD_FOCUSABLE); - s[Dali::Accessibility::State::FOCUSED] = Toolkit::KeyboardFocusManager::Get().GetCurrentFocusActor() == self; + Dali::Accessibility::States state; + state[Dali::Accessibility::State::FOCUSABLE] = self.GetProperty(Actor::Property::KEYBOARD_FOCUSABLE); + state[Dali::Accessibility::State::FOCUSED] = Toolkit::KeyboardFocusManager::Get().GetCurrentFocusActor() == self; + if(self.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).GetType() == Dali::Property::NONE) - s[Dali::Accessibility::State::HIGHLIGHTABLE] = false; + { + state[Dali::Accessibility::State::HIGHLIGHTABLE] = false; + } else - s[Dali::Accessibility::State::HIGHLIGHTABLE] = self.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).Get(); - s[Dali::Accessibility::State::HIGHLIGHTED] = GetCurrentlyHighlightedActor() == self; - s[Dali::Accessibility::State::ENABLED] = true; - s[Dali::Accessibility::State::SENSITIVE] = true; - s[Dali::Accessibility::State::VISIBLE] = true; - if(modal) { - s[Dali::Accessibility::State::MODAL] = true; + state[Dali::Accessibility::State::HIGHLIGHTABLE] = self.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).Get(); } - s[Dali::Accessibility::State::SHOWING] = !self.GetProperty(Dali::DevelActor::Property::CULLED).Get() && self.GetCurrentProperty(Actor::Property::VISIBLE); - s[Dali::Accessibility::State::DEFUNCT] = !self.GetProperty(Dali::DevelActor::Property::CONNECTED_TO_SCENE).Get(); - return s; + state[Dali::Accessibility::State::HIGHLIGHTED] = GetCurrentlyHighlightedActor() == self; + state[Dali::Accessibility::State::ENABLED] = true; + state[Dali::Accessibility::State::SENSITIVE] = true; + state[Dali::Accessibility::State::VISIBLE] = true; + + if(mIsModal) + { + state[Dali::Accessibility::State::MODAL] = true; + } + state[Dali::Accessibility::State::SHOWING] = !self.GetProperty(Dali::DevelActor::Property::CULLED).Get() && self.GetCurrentProperty(Actor::Property::VISIBLE); + + state[Dali::Accessibility::State::DEFUNCT] = !self.GetProperty(Dali::DevelActor::Property::CONNECTED_TO_SCENE).Get(); + return state; } Dali::Accessibility::States AccessibleImpl::GetStates() @@ -224,32 +237,30 @@ Dali::Accessibility::States AccessibleImpl::GetStates() Dali::Accessibility::Attributes AccessibleImpl::GetAttributes() { - std::unordered_map attribute_map; - auto q = Dali::Toolkit::Control::DownCast(Self()); - auto w = - q.GetProperty(Dali::Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES); - auto z = w.GetMap(); + std::unordered_map attributeMap; + auto control = Dali::Toolkit::Control::DownCast(Self()); + auto attribute = control.GetProperty(Dali::Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES); + auto map = attribute.GetMap(); - if(z) + if(map) { - auto map_size = z->Count(); + auto mapSize = map->Count(); - for(unsigned int i = 0; i < map_size; i++) + for(unsigned int i = 0; i < mapSize; i++) { - auto map_key = z->GetKeyAt(i); - if(map_key.type == Dali::Property::Key::STRING) + auto mapKey = map->GetKeyAt(i); + if(mapKey.type == Dali::Property::Key::STRING) { - std::string map_value; - if(z->GetValue(i).Get(map_value)) + std::string mapValue; + if(map->GetValue(i).Get(mapValue)) { - attribute_map.emplace(std::move(map_key.stringKey), - std::move(map_value)); + attributeMap.emplace(std::move(mapKey.stringKey), std::move(mapValue)); } } } } - return attribute_map; + return attributeMap; } Dali::Accessibility::ComponentLayer AccessibleImpl::GetLayer() @@ -257,21 +268,15 @@ Dali::Accessibility::ComponentLayer AccessibleImpl::GetLayer() return Dali::Accessibility::ComponentLayer::WINDOW; } -Dali::Rect<> AccessibleImpl::GetExtents(Dali::Accessibility::CoordType ctype) +Dali::Rect<> AccessibleImpl::GetExtents(Dali::Accessibility::CoordinateType type) { Dali::Actor self = Self(); - Vector2 screenPosition = - self.GetProperty(Dali::DevelActor::Property::SCREEN_POSITION) - .Get(); + + Vector2 screenPosition = self.GetProperty(Dali::DevelActor::Property::SCREEN_POSITION).Get(); auto size = self.GetCurrentProperty(Actor::Property::SIZE) * self.GetCurrentProperty(Actor::Property::WORLD_SCALE); - bool positionUsesAnchorPoint = - self.GetProperty(Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT) - .Get(); - Vector3 anchorPointOffSet = - size * (positionUsesAnchorPoint ? self.GetCurrentProperty(Actor::Property::ANCHOR_POINT) - : AnchorPoint::TOP_LEFT); - Vector2 position = Vector2(screenPosition.x - anchorPointOffSet.x, - screenPosition.y - anchorPointOffSet.y); + bool positionUsesAnchorPoint = self.GetProperty(Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT).Get(); + Vector3 anchorPointOffSet = size * (positionUsesAnchorPoint ? self.GetCurrentProperty(Actor::Property::ANCHOR_POINT) : AnchorPoint::TOP_LEFT); + Vector2 position = Vector2((screenPosition.x - anchorPointOffSet.x), (screenPosition.y - anchorPointOffSet.y)); return {position.x, position.y, size.x, size.y}; } @@ -294,10 +299,12 @@ static Dali::Actor CreateHighlightIndicatorActor() { std::string focusBorderImagePath(AssetManager::GetDaliImagePath()); focusBorderImagePath += "/keyboard_focus.9.png"; + // Create the default if it hasn't been set and one that's shared by all the // keyboard focusable actors auto actor = Toolkit::ImageView::New(focusBorderImagePath); actor.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS); + DevelControl::AppendAccessibilityAttribute(actor, "highlight", std::string()); actor.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, false); @@ -324,24 +331,35 @@ void AccessibleImpl::ScrollToSelf() bool AccessibleImpl::GrabHighlight() { Dali::Actor self = Self(); - auto old = GetCurrentlyHighlightedActor(); + auto oldHighlightedActor = GetCurrentlyHighlightedActor(); if(!Dali::Accessibility::IsUp()) + { return false; - if(self == old) + } + + if(self == oldHighlightedActor) + { return true; - if(old) + } + + // Clear the old highlight. + if(oldHighlightedActor) { - auto c = dynamic_cast(Internal::Control::Impl::GetAccessibilityObject(old)); - if(c) - c->ClearHighlight(); + auto oldHighlightObject = dynamic_cast(Internal::Control::Impl::GetAccessibilityObject(oldHighlightedActor)); + if(oldHighlightObject) + { + oldHighlightObject->ClearHighlight(); + } } + auto highlight = GetHighlightActor(); if(!highlight) { highlight = CreateHighlightIndicatorActor(); SetHighlightActor(highlight); } + highlight.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); highlight.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER); highlight.SetProperty(Actor::Property::POSITION_Z, 1.0f); @@ -349,7 +367,7 @@ bool AccessibleImpl::GrabHighlight() // Remember the highlight actor, so that when the default is changed with // SetHighlightActor(), the currently displayed highlight can still be cleared. - currentHighlightActor = highlight; + mCurrentHighlightActor = highlight; ScrollToSelf(); self.Add(highlight); SetCurrentlyHighlightedActor(self); @@ -363,11 +381,14 @@ bool AccessibleImpl::ClearHighlight() Dali::Actor self = Self(); if(!Dali::Accessibility::IsUp()) + { return false; + } + if(GetCurrentlyHighlightedActor() == self) { - self.Remove(currentHighlightActor.GetHandle()); - currentHighlightActor = {}; + self.Remove(mCurrentHighlightActor.GetHandle()); + mCurrentHighlightActor = {}; SetCurrentlyHighlightedActor({}); EmitHighlighted(false); return true; @@ -377,7 +398,11 @@ bool AccessibleImpl::ClearHighlight() std::string AccessibleImpl::GetActionName(size_t index) { - if(index >= GetActionCount()) return {}; + if(index >= GetActionCount()) + { + return {}; + } + Dali::TypeInfo type; Self().GetTypeInfo(type); DALI_ASSERT_ALWAYS(type && "no TypeInfo object"); @@ -444,13 +469,12 @@ std::vector AccessibleImpl::GetRelationSet() std::vector ret; - auto& v = controlImpl.mAccessibilityRelations; - for(auto i = 0u; i < v.size(); ++i) + auto& relation = controlImpl.mAccessibilityRelations; + for(auto i = 0u; i < relation.size(); ++i) { - if(v[i].empty()) - continue; + if(relation[i].empty()) continue; - ret.emplace_back(Accessibility::Relation{static_cast(i), v[i]}); + ret.emplace_back(Accessibility::Relation{static_cast(i), relation[i]}); } return ret; diff --git a/dali-toolkit/devel-api/controls/accessible-impl.h b/dali-toolkit/devel-api/controls/accessible-impl.h index 2a8ca3c..37e7ad3 100644 --- a/dali-toolkit/devel-api/controls/accessible-impl.h +++ b/dali-toolkit/devel-api/controls/accessible-impl.h @@ -47,13 +47,14 @@ struct DALI_TOOLKIT_API AccessibleImpl : public virtual Dali::Accessibility::Acc public virtual Dali::Accessibility::Action { protected: - Dali::WeakHandle self; - Dali::WeakHandle currentHighlightActor; - bool modal = false, root = false; + Dali::WeakHandle mSelf; + Dali::WeakHandle mCurrentHighlightActor; + bool mIsModal = false; + bool mIsRoot = false; Dali::Actor Self() { - auto handle = self.GetHandle(); + auto handle = mSelf.GetHandle(); // Control::Impl holds a std::unique_ptr to the Accessible object, // so that one does not outlive the other. @@ -130,7 +131,7 @@ public: /** * @copydoc Dali::Accessibility::Component::GetExtents() */ - Dali::Rect<> GetExtents(Dali::Accessibility::CoordType ctype) override; + Dali::Rect<> GetExtents(Accessibility::CoordinateType type) override; /** * @copydoc Dali::Accessibility::Component::GetLayer() diff --git a/dali-toolkit/devel-api/controls/control-devel.cpp b/dali-toolkit/devel-api/controls/control-devel.cpp index 487aa1b..55becb3 100644 --- a/dali-toolkit/devel-api/controls/control-devel.cpp +++ b/dali-toolkit/devel-api/controls/control-devel.cpp @@ -135,107 +135,102 @@ void CreateTransitions(Control control, Dali::Animation& animation, Dali::Toolki } } -static Toolkit::Internal::Control::Impl* GetControlImplementationIfAny(Dali::Actor actor) +static Toolkit::Internal::Control::Impl* GetControlImplementation(Dali::Actor actor) { - Dali::Toolkit::Control c = Toolkit::Control::DownCast(actor); - if(c) + Dali::Toolkit::Control control = Toolkit::Control::DownCast(actor); + if(control) { - auto& impl1 = Toolkit::Internal::GetImplementation(c); - auto& impl2 = Toolkit::Internal::Control::Impl::Get(impl1); - return &impl2; + auto& internalControl = Toolkit::Internal::GetImplementation(control); + auto& controlDataImpl = Toolkit::Internal::Control::Impl::Get(internalControl); + return &controlDataImpl; } return nullptr; } Toolkit::DevelControl::AccessibilityActivateSignalType& AccessibilityActivateSignal(Toolkit::Control control) { - auto ac = GetControlImplementationIfAny(control); - return ac->mAccessibilityActivateSignal; + return GetControlImplementation(control)->mAccessibilityActivateSignal; } Toolkit::DevelControl::AccessibilityReadingSkippedSignalType& AccessibilityReadingSkippedSignal(Toolkit::Control control) { - auto ac = GetControlImplementationIfAny(control); - return ac->mAccessibilityReadingSkippedSignal; + return GetControlImplementation(control)->mAccessibilityReadingSkippedSignal; } Toolkit::DevelControl::AccessibilityReadingPausedSignalType& AccessibilityReadingPausedSignal(Toolkit::Control control) { - auto ac = GetControlImplementationIfAny(control); - return ac->mAccessibilityReadingPausedSignal; + return GetControlImplementation(control)->mAccessibilityReadingPausedSignal; } Toolkit::DevelControl::AccessibilityReadingResumedSignalType& AccessibilityReadingResumedSignal(Toolkit::Control control) { - auto ac = GetControlImplementationIfAny(control); - return ac->mAccessibilityReadingResumedSignal; + return GetControlImplementation(control)->mAccessibilityReadingResumedSignal; } Toolkit::DevelControl::AccessibilityReadingCancelledSignalType& AccessibilityReadingCancelledSignal(Toolkit::Control control) { - auto ac = GetControlImplementationIfAny(control); - return ac->mAccessibilityReadingCancelledSignal; + return GetControlImplementation(control)->mAccessibilityReadingCancelledSignal; } Toolkit::DevelControl::AccessibilityReadingStoppedSignalType& AccessibilityReadingStoppedSignal(Toolkit::Control control) { - auto ac = GetControlImplementationIfAny(control); - return ac->mAccessibilityReadingStoppedSignal; + return GetControlImplementation(control)->mAccessibilityReadingStoppedSignal; } Toolkit::DevelControl::AccessibilityGetNameSignalType& AccessibilityGetNameSignal(Toolkit::Control control) { - auto ac = GetControlImplementationIfAny(control); - return ac->mAccessibilityGetNameSignal; + return GetControlImplementation(control)->mAccessibilityGetNameSignal; } Toolkit::DevelControl::AccessibilityGetDescriptionSignalType& AccessibilityGetDescriptionSignal(Toolkit::Control control) { - auto ac = GetControlImplementationIfAny(control); - return ac->mAccessibilityGetDescriptionSignal; + return GetControlImplementation(control)->mAccessibilityGetDescriptionSignal; } Toolkit::DevelControl::AccessibilityDoGestureSignalType& AccessibilityDoGestureSignal(Toolkit::Control control) { - auto ac = GetControlImplementationIfAny(control); - return ac->mAccessibilityDoGestureSignal; + return GetControlImplementation(control)->mAccessibilityDoGestureSignal; } void AppendAccessibilityRelation(Dali::Actor control, Actor destination, Dali::Accessibility::RelationType relation) { - if(auto ac = GetControlImplementationIfAny(control)) + if(auto controlDataImpl = GetControlImplementation(control)) { auto index = static_cast(relation); - if(index >= ac->mAccessibilityRelations.size()) + if(index >= controlDataImpl->mAccessibilityRelations.size()) { DALI_LOG_ERROR("Relation index exceeds vector size."); return; } - auto obj = ac->GetAccessibilityObject(destination); - if(obj) - ac->mAccessibilityRelations[index].push_back(obj->GetAddress()); + auto object = controlDataImpl->GetAccessibilityObject(destination); + if(object) + { + controlDataImpl->mAccessibilityRelations[index].push_back(object->GetAddress()); + } } } void RemoveAccessibilityRelation(Dali::Actor control, Actor destination, Dali::Accessibility::RelationType relation) { - if(auto ac = GetControlImplementationIfAny(control)) + if(auto controlDataImpl = GetControlImplementation(control)) { auto index = static_cast(relation); - if(index >= ac->mAccessibilityRelations.size()) + if(index >= controlDataImpl->mAccessibilityRelations.size()) { DALI_LOG_ERROR("Relation index exceeds vector size."); return; } - auto obj = ac->GetAccessibilityObject(destination); - if(!obj) + auto object = controlDataImpl->GetAccessibilityObject(destination); + if(!object) + { return; + } - auto address = obj->GetAddress(); + auto address = object->GetAddress(); - auto& targets = ac->mAccessibilityRelations[index]; + auto& targets = controlDataImpl->mAccessibilityRelations[index]; for(auto i = 0u; i < targets.size(); ++i) { if(targets[i].ToString() == address.ToString()) @@ -249,110 +244,117 @@ void RemoveAccessibilityRelation(Dali::Actor control, Actor destination, Dali::A std::vector> GetAccessibilityRelations(Dali::Actor control) { - if(auto ac = GetControlImplementationIfAny(control)) + if(auto controlDataImpl = GetControlImplementation(control)) { - return ac->mAccessibilityRelations; + return controlDataImpl->mAccessibilityRelations; } return {}; } void ClearAccessibilityRelations(Dali::Actor control) { - if(auto ac = GetControlImplementationIfAny(control)) + if(auto controlDataImpl = GetControlImplementation(control)) { - for(auto& it : ac->mAccessibilityRelations) + for(auto& it : controlDataImpl->mAccessibilityRelations) + { it.clear(); + } } } -void SetAccessibilityConstructor(Dali::Actor control, - std::function(Dali::Actor)> constructor) +void SetAccessibilityConstructor(Dali::Actor control, std::function(Dali::Actor)> constructor) { - if(auto ac = GetControlImplementationIfAny(control)) + if(auto controlDataImpl = GetControlImplementation(control)) { - ac->accessibilityConstructor = constructor; + controlDataImpl->mAccessibilityConstructor = constructor; } } void AppendAccessibilityAttribute(Dali::Actor control, const std::string& key, const std::string value) { - if(auto ac = GetControlImplementationIfAny(control)) + if(auto controlDataImpl = GetControlImplementation(control)) { - ac->AppendAccessibilityAttribute(key, value); + controlDataImpl->AppendAccessibilityAttribute(key, value); } } void RemoveAccessibilityAttribute(Dali::Actor control, const std::string& key) { - if(auto ac = GetControlImplementationIfAny(control)) + if(auto controlDataImpl = GetControlImplementation(control)) { - ac->RemoveAccessibilityAttribute(key); + controlDataImpl->RemoveAccessibilityAttribute(key); } } void ClearAccessibilityAttributes(Dali::Actor control) { - if(auto ac = GetControlImplementationIfAny(control)) + if(auto controlDataImpl = GetControlImplementation(control)) { - ac->ClearAccessibilityAttributes(); + controlDataImpl->ClearAccessibilityAttributes(); } } void SetAccessibilityReadingInfoType(Dali::Actor control, const Dali::Accessibility::ReadingInfoTypes types) { - if(auto ac = GetControlImplementationIfAny(control)) + if(auto controlDataImpl = GetControlImplementation(control)) { - ac->SetAccessibilityReadingInfoType(types); + controlDataImpl->SetAccessibilityReadingInfoType(types); } } Dali::Accessibility::ReadingInfoTypes GetAccessibilityReadingInfoType(Dali::Actor control) { - if(auto ac = GetControlImplementationIfAny(control)) + if(auto controlDataImpl = GetControlImplementation(control)) { - return ac->GetAccessibilityReadingInfoType(); + return controlDataImpl->GetAccessibilityReadingInfoType(); } return {}; } bool ClearAccessibilityHighlight(Dali::Actor control) { - if(auto ac = GetControlImplementationIfAny(control)) + if(auto controlDataImpl = GetControlImplementation(control)) { - auto ptr = dynamic_cast(ac->GetAccessibilityObject()); - if(ptr) - return ptr->ClearHighlight(); + auto object = dynamic_cast(controlDataImpl->GetAccessibilityObject()); + if(object) + { + return object->ClearHighlight(); + } } return false; } bool GrabAccessibilityHighlight(Dali::Actor control) { - if(auto ac = GetControlImplementationIfAny(control)) + if(auto controlDataImpl = GetControlImplementation(control)) { - auto ptr = dynamic_cast(ac->GetAccessibilityObject()); - if(ptr) - return ptr->GrabHighlight(); + auto object = dynamic_cast(controlDataImpl->GetAccessibilityObject()); + if(object) + { + return object->GrabHighlight(); + } } return false; } Dali::Accessibility::States GetAccessibilityStates(Dali::Actor control) { - if(auto ac = GetControlImplementationIfAny(control)) + if(auto controlDataImpl = GetControlImplementation(control)) { - auto ptr = dynamic_cast(ac->GetAccessibilityObject()); - if(ptr) - return ptr->GetStates(); + auto object = dynamic_cast(controlDataImpl->GetAccessibilityObject()); + if(object) + { + return object->GetStates(); + } } return {}; } -void NotifyAccessibilityStateChange(Dali::Actor control, Dali::Accessibility::States states, bool doRecursive) +void NotifyAccessibilityStateChange(Dali::Actor control, Dali::Accessibility::States states, bool isRecursive) { - if(auto ac = GetControlImplementationIfAny(control)) + if(auto controlDataImpl = GetControlImplementation(control)) { - ac->GetAccessibilityObject()->NotifyAccessibilityStateChange(std::move(states), doRecursive); + controlDataImpl->GetAccessibilityObject()->NotifyAccessibilityStateChange(std::move(states), isRecursive); } } diff --git a/dali-toolkit/devel-api/controls/control-devel.h b/dali-toolkit/devel-api/controls/control-devel.h index d977c34..51cf1cc 100644 --- a/dali-toolkit/devel-api/controls/control-devel.h +++ b/dali-toolkit/devel-api/controls/control-devel.h @@ -555,9 +555,9 @@ DALI_TOOLKIT_API Dali::Accessibility::States GetAccessibilityStates(Dali::Actor * * @param control object to append attribute to * @param states mask with states expected to broadcast - * @param doRecursive flag pointing if notifications of children's state would be sent + * @param isRecursive flag pointing if notifications of children's state would be sent */ -DALI_TOOLKIT_API void NotifyAccessibilityStateChange(Dali::Actor control, Dali::Accessibility::States states, bool doRecursive); +DALI_TOOLKIT_API void NotifyAccessibilityStateChange(Dali::Actor control, Dali::Accessibility::States states, bool isRecursive); /** * The method allows to set specific constructor for creating accessibility structure diff --git a/dali-toolkit/internal/controls/buttons/button-impl.cpp b/dali-toolkit/internal/controls/buttons/button-impl.cpp index 54cf75f..70e9c76 100644 --- a/dali-toolkit/internal/controls/buttons/button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/button-impl.cpp @@ -1324,9 +1324,13 @@ Property::Index Button::AccessibleImpl::GetNamePropertyIndex() Property::Map labelMap = Self().GetProperty(label); if(MapContainsTextString(labelMap)) + { return label; + } else + { return Property::INVALID_INDEX; + } } Dali::Accessibility::States Button::AccessibleImpl::CalculateStates() diff --git a/dali-toolkit/internal/controls/buttons/check-box-button-impl.cpp b/dali-toolkit/internal/controls/buttons/check-box-button-impl.cpp index 8308ce1..98733ea 100644 --- a/dali-toolkit/internal/controls/buttons/check-box-button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/check-box-button-impl.cpp @@ -85,11 +85,13 @@ void CheckBoxButton::OnInitialize() Dali::Accessibility::States CheckBoxButton::AccessibleImpl::CalculateStates() { - auto tmp = Button::AccessibleImpl::CalculateStates(); - auto slf = Toolkit::Button::DownCast(Self()); - if(slf.GetProperty(Toolkit::Button::Property::SELECTED)) - tmp[Dali::Accessibility::State::CHECKED] = true; - return tmp; + auto state = Button::AccessibleImpl::CalculateStates(); + auto self = Toolkit::Button::DownCast(Self()); + if(self.GetProperty(Toolkit::Button::Property::SELECTED)) + { + state[Dali::Accessibility::State::CHECKED] = true; + } + return state; } void CheckBoxButton::OnStateChange(State newState) @@ -98,8 +100,7 @@ void CheckBoxButton::OnStateChange(State newState) if(Dali::Accessibility::IsUp() && (Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor() == Self()) && (newState == SELECTED_STATE || newState == UNSELECTED_STATE)) { - Dali::Accessibility::Accessible::Get(Self())->EmitStateChanged( - Dali::Accessibility::State::CHECKED, newState == SELECTED_STATE ? 1 : 0, 0); + Dali::Accessibility::Accessible::Get(Self())->EmitStateChanged(Dali::Accessibility::State::CHECKED, newState == SELECTED_STATE ? 1 : 0, 0); } } diff --git a/dali-toolkit/internal/controls/buttons/push-button-impl.cpp b/dali-toolkit/internal/controls/buttons/push-button-impl.cpp index 2dc4385..2958766 100644 --- a/dali-toolkit/internal/controls/buttons/push-button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/push-button-impl.cpp @@ -196,10 +196,10 @@ Property::Value PushButton::GetProperty(BaseObject* object, Property::Index prop Dali::Accessibility::States PushButton::AccessibleImpl::CalculateStates() { - auto tmp = Button::AccessibleImpl::CalculateStates(); - auto slf = Toolkit::Button::DownCast(Self()); - tmp[Dali::Accessibility::State::PRESSED] = slf.GetProperty(Toolkit::Button::Property::SELECTED); - return tmp; + auto state = Button::AccessibleImpl::CalculateStates(); + auto self = Toolkit::Button::DownCast(Self()); + state[Dali::Accessibility::State::PRESSED] = self.GetProperty(Toolkit::Button::Property::SELECTED); + return state; } void PushButton::OnStateChange(State newState) @@ -208,13 +208,11 @@ void PushButton::OnStateChange(State newState) if(Dali::Accessibility::IsUp() && (Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor() == Self()) && (newState == SELECTED_STATE || newState == UNSELECTED_STATE)) { - Dali::Accessibility::Accessible::Get(Self())->EmitStateChanged( - Dali::Accessibility::State::PRESSED, newState == SELECTED_STATE ? 1 : 0, 0); + Dali::Accessibility::Accessible::Get(Self())->EmitStateChanged(Dali::Accessibility::State::PRESSED, newState == SELECTED_STATE ? 1 : 0, 0); if(Self().GetProperty(Toolkit::Button::Property::TOGGLABLE)) { - Dali::Accessibility::Accessible::Get(Self())->EmitStateChanged( - Dali::Accessibility::State::CHECKED, newState == SELECTED_STATE ? 1 : 0, 0); + Dali::Accessibility::Accessible::Get(Self())->EmitStateChanged(Dali::Accessibility::State::CHECKED, newState == SELECTED_STATE ? 1 : 0, 0); } } } diff --git a/dali-toolkit/internal/controls/buttons/radio-button-impl.cpp b/dali-toolkit/internal/controls/buttons/radio-button-impl.cpp index f17a8c9..4b4e070 100644 --- a/dali-toolkit/internal/controls/buttons/radio-button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/radio-button-impl.cpp @@ -103,23 +103,27 @@ void RadioButton::OnStateChange(State newState) } } } + // TODO: replace it with OnPropertySet hook once Button::Property::SELECTED will be consistently used if(Dali::Accessibility::IsUp() && (Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor() == Self()) && (newState == SELECTED_STATE || newState == UNSELECTED_STATE)) { - Dali::Accessibility::Accessible::Get(Self())->EmitStateChanged( - Dali::Accessibility::State::CHECKED, newState == SELECTED_STATE ? 1 : 0, 0); + Dali::Accessibility::Accessible::Get(Self())->EmitStateChanged(Dali::Accessibility::State::CHECKED, newState == SELECTED_STATE ? 1 : 0, 0); } } Dali::Accessibility::States RadioButton::AccessibleImpl::CalculateStates() { - auto tmp = Button::AccessibleImpl::CalculateStates(); - auto slf = Toolkit::Button::DownCast(Self()); - if(slf.GetProperty(Toolkit::Button::Property::SELECTED)) - tmp[Dali::Accessibility::State::CHECKED] = true; - tmp[Dali::Accessibility::State::SELECTABLE] = true; - return tmp; + auto state = Button::AccessibleImpl::CalculateStates(); + auto self = Toolkit::Button::DownCast(Self()); + + if(self.GetProperty(Toolkit::Button::Property::SELECTED)) + { + state[Dali::Accessibility::State::CHECKED] = true; + } + + state[Dali::Accessibility::State::SELECTABLE] = true; + return state; } } // namespace Internal diff --git a/dali-toolkit/internal/controls/buttons/toggle-button-impl.cpp b/dali-toolkit/internal/controls/buttons/toggle-button-impl.cpp index 311f6b3..1697b20 100644 --- a/dali-toolkit/internal/controls/buttons/toggle-button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/toggle-button-impl.cpp @@ -377,7 +377,9 @@ Dali::Accessibility::States ToggleButton::AccessibleImpl::CalculateStates() auto states = Button::AccessibleImpl::CalculateStates(); auto button = Toolkit::ToggleButton::DownCast(Self()); if(button.GetProperty(Toolkit::ToggleButton::Property::CURRENT_STATE_INDEX)) + { states[Dali::Accessibility::State::CHECKED] = true; + } return states; } @@ -401,9 +403,8 @@ void ToggleButton::OnStateChange(State newState) if(Dali::Accessibility::IsUp() && (Self() == Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor()) && (newState == SELECTED_STATE || newState == UNSELECTED_STATE)) { - Dali::Accessibility::Accessible::Get(Self())->EmitStateChanged( - Dali::Accessibility::State::CHECKED, mCurrentToggleIndex ? 1 : 0, 0); - Dali::Accessibility::Accessible::Get(Self())->Emit(Dali::Accessibility::ObjectPropertyChangeEvent::DESCRIPTION); + Dali::Accessibility::Accessible::Get(Self())->EmitStateChanged(Dali::Accessibility::State::CHECKED, mCurrentToggleIndex ? 1 : 0, 0); + Dali::Accessibility::Accessible::Get(Self())->Emit(Dali::Accessibility::ObjectPropertyChangeEvent::DESCRIPTION); } } diff --git a/dali-toolkit/internal/controls/control/control-data-impl.cpp b/dali-toolkit/internal/controls/control/control-data-impl.cpp index 33670d6..0af44fb 100644 --- a/dali-toolkit/internal/controls/control/control-data-impl.cpp +++ b/dali-toolkit/internal/controls/control/control-data-impl.cpp @@ -222,44 +222,57 @@ static bool DoAction(BaseObject* object, const std::string& actionName, const Pr DALI_ASSERT_ALWAYS(control); - if(0 == strcmp(actionName.c_str(), ACTION_ACCESSIBILITY_ACTIVATED) || - actionName == "activate") + if(0 == strcmp(actionName.c_str(), ACTION_ACCESSIBILITY_ACTIVATED) || actionName == "activate") { // if cast succeeds there is an implementation so no need to check if(!DevelControl::AccessibilityActivateSignal(control).Empty()) + { DevelControl::AccessibilityActivateSignal(control).Emit(); + } else + { ret = Internal::GetImplementation(control).OnAccessibilityActivated(); + } } else if(0 == strcmp(actionName.c_str(), ACTION_ACCESSIBILITY_READING_SKIPPED)) { // if cast succeeds there is an implementation so no need to check if(!DevelControl::AccessibilityReadingSkippedSignal(control).Empty()) + { DevelControl::AccessibilityReadingSkippedSignal(control).Emit(); + } } else if(0 == strcmp(actionName.c_str(), ACTION_ACCESSIBILITY_READING_PAUSED)) { // if cast succeeds there is an implementation so no need to check if(!DevelControl::AccessibilityReadingPausedSignal(control).Empty()) + { DevelControl::AccessibilityReadingPausedSignal(control).Emit(); + } } else if(0 == strcmp(actionName.c_str(), ACTION_ACCESSIBILITY_READING_RESUMED)) { // if cast succeeds there is an implementation so no need to check if(!DevelControl::AccessibilityReadingResumedSignal(control).Empty()) + { DevelControl::AccessibilityReadingResumedSignal(control).Emit(); + } } else if(0 == strcmp(actionName.c_str(), ACTION_ACCESSIBILITY_READING_CANCELLED)) { // if cast succeeds there is an implementation so no need to check if(!DevelControl::AccessibilityReadingCancelledSignal(control).Empty()) + { DevelControl::AccessibilityReadingCancelledSignal(control).Emit(); + } } else if(0 == strcmp(actionName.c_str(), ACTION_ACCESSIBILITY_READING_STOPPED)) { // if cast succeeds there is an implementation so no need to check if(!DevelControl::AccessibilityReadingStoppedSignal(control).Empty()) + { DevelControl::AccessibilityReadingStoppedSignal(control).Emit(); + } } else { @@ -414,12 +427,12 @@ const PropertyRegistration Control::Impl::PROPERTY_12(typeRegistration, "rightFo const PropertyRegistration Control::Impl::PROPERTY_13(typeRegistration, "upFocusableActorId", Toolkit::DevelControl::Property::UP_FOCUSABLE_ACTOR_ID, Property::INTEGER, &Control::Impl::SetProperty, &Control::Impl::GetProperty); const PropertyRegistration Control::Impl::PROPERTY_14(typeRegistration, "downFocusableActorId", Toolkit::DevelControl::Property::DOWN_FOCUSABLE_ACTOR_ID, Property::INTEGER, &Control::Impl::SetProperty, &Control::Impl::GetProperty); const PropertyRegistration Control::Impl::PROPERTY_15(typeRegistration, "shadow", Toolkit::DevelControl::Property::SHADOW, Property::MAP, &Control::Impl::SetProperty, &Control::Impl::GetProperty); -const PropertyRegistration Control::Impl::PROPERTY_16(typeRegistration, "accessibilityAttributes", Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES, Property::MAP, &Control::Impl::SetProperty, &Control::Impl::GetProperty); -const PropertyRegistration Control::Impl::PROPERTY_17(typeRegistration, "accessibilityName", Toolkit::DevelControl::Property::ACCESSIBILITY_NAME, Property::STRING, &Control::Impl::SetProperty, &Control::Impl::GetProperty); -const PropertyRegistration Control::Impl::PROPERTY_18(typeRegistration, "accessibilityDescription", Toolkit::DevelControl::Property::ACCESSIBILITY_DESCRIPTION, Property::STRING, &Control::Impl::SetProperty, &Control::Impl::GetProperty); -const PropertyRegistration Control::Impl::PROPERTY_19(typeRegistration, "accessibilityTranslationDomain", Toolkit::DevelControl::Property::ACCESSIBILITY_TRANSLATION_DOMAIN, Property::STRING, &Control::Impl::SetProperty, &Control::Impl::GetProperty); -const PropertyRegistration Control::Impl::PROPERTY_20(typeRegistration, "accessibilityRole", Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE, Property::INTEGER, &Control::Impl::SetProperty, &Control::Impl::GetProperty); -const PropertyRegistration Control::Impl::PROPERTY_21(typeRegistration, "accessibilityHighlightable", Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, Property::BOOLEAN, &Control::Impl::SetProperty, &Control::Impl::GetProperty); +const PropertyRegistration Control::Impl::PROPERTY_16(typeRegistration, "accessibilityName", Toolkit::DevelControl::Property::ACCESSIBILITY_NAME, Property::STRING, &Control::Impl::SetProperty, &Control::Impl::GetProperty); +const PropertyRegistration Control::Impl::PROPERTY_17(typeRegistration, "accessibilityDescription", Toolkit::DevelControl::Property::ACCESSIBILITY_DESCRIPTION, Property::STRING, &Control::Impl::SetProperty, &Control::Impl::GetProperty); +const PropertyRegistration Control::Impl::PROPERTY_18(typeRegistration, "accessibilityTranslationDomain", Toolkit::DevelControl::Property::ACCESSIBILITY_TRANSLATION_DOMAIN, Property::STRING, &Control::Impl::SetProperty, &Control::Impl::GetProperty); +const PropertyRegistration Control::Impl::PROPERTY_19(typeRegistration, "accessibilityRole", Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE, Property::INTEGER, &Control::Impl::SetProperty, &Control::Impl::GetProperty); +const PropertyRegistration Control::Impl::PROPERTY_20(typeRegistration, "accessibilityHighlightable", Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, Property::BOOLEAN, &Control::Impl::SetProperty, &Control::Impl::GetProperty); +const PropertyRegistration Control::Impl::PROPERTY_21(typeRegistration, "accessibilityAttributes", Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES, Property::MAP, &Control::Impl::SetProperty, &Control::Impl::GetProperty); // clang-format on Control::Impl::Impl(Control& controlImpl) @@ -461,14 +474,13 @@ Control::Impl::Impl(Control& controlImpl) return Control::Impl::GetAccessibilityObject(actor); }); - accessibilityConstructor = [](Dali::Actor actor) -> std::unique_ptr { - return std::unique_ptr(new DevelControl::AccessibleImpl(actor, - Dali::Accessibility::Role::UNKNOWN)); + mAccessibilityConstructor = [](Dali::Actor actor) -> std::unique_ptr { + return std::unique_ptr(new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::UNKNOWN)); }; - size_t len = static_cast(Dali::Accessibility::RelationType::MAX_COUNT); - mAccessibilityRelations.reserve(len); - for(auto i = 0u; i < len; ++i) + size_t length = static_cast(Dali::Accessibility::RelationType::MAX_COUNT); + mAccessibilityRelations.reserve(length); + for(auto i = 0u; i < length; ++i) { mAccessibilityRelations.push_back({}); } @@ -958,11 +970,10 @@ void Control::Impl::DoAction(Dali::Property::Index visualIndex, Dali::Property:: } } -void Control::Impl::AppendAccessibilityAttribute(const std::string& key, - const std::string value) +void Control::Impl::AppendAccessibilityAttribute(const std::string& key, const std::string value) { - Property::Value* val = mAccessibilityAttributes.Find(key); - if(val) + Property::Value* checkedValue = mAccessibilityAttributes.Find(key); + if(checkedValue) { mAccessibilityAttributes[key] = Property::Value(value); } @@ -1045,76 +1056,6 @@ void Control::Impl::SetProperty(BaseObject* object, Property::Index index, const } break; - case Toolkit::DevelControl::Property::ACCESSIBILITY_NAME: - { - std::string name; - if(value.Get(name)) - { - controlImpl.mImpl->mAccessibilityName = name; - controlImpl.mImpl->mAccessibilityNameSet = true; - } - else - { - controlImpl.mImpl->mAccessibilityNameSet = false; - } - } - break; - - case Toolkit::DevelControl::Property::ACCESSIBILITY_DESCRIPTION: - { - std::string txt; - if(value.Get(txt)) - { - controlImpl.mImpl->mAccessibilityDescription = txt; - controlImpl.mImpl->mAccessibilityDescriptionSet = true; - } - else - { - controlImpl.mImpl->mAccessibilityDescriptionSet = false; - } - } - break; - - case Toolkit::DevelControl::Property::ACCESSIBILITY_TRANSLATION_DOMAIN: - { - std::string txt; - if(value.Get(txt)) - { - controlImpl.mImpl->mAccessibilityTranslationDomain = txt; - controlImpl.mImpl->mAccessibilityTranslationDomainSet = true; - } - else - { - controlImpl.mImpl->mAccessibilityTranslationDomainSet = false; - } - } - break; - - case Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE: - { - bool highlightable; - if(value.Get(highlightable)) - { - controlImpl.mImpl->mAccessibilityHighlightable = highlightable; - controlImpl.mImpl->mAccessibilityHighlightableSet = true; - } - else - { - controlImpl.mImpl->mAccessibilityHighlightableSet = false; - } - } - break; - - case Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE: - { - Dali::Accessibility::Role val; - if(value.Get(val)) - { - controlImpl.mImpl->mAccessibilityRole = val; - } - } - break; - case Toolkit::DevelControl::Property::UP_FOCUSABLE_ACTOR_ID: { int focusId; @@ -1224,6 +1165,76 @@ void Control::Impl::SetProperty(BaseObject* object, Property::Index index, const break; } + case Toolkit::DevelControl::Property::ACCESSIBILITY_NAME: + { + std::string name; + if(value.Get(name)) + { + controlImpl.mImpl->mAccessibilityName = name; + controlImpl.mImpl->mAccessibilityNameSet = true; + } + else + { + controlImpl.mImpl->mAccessibilityNameSet = false; + } + } + break; + + case Toolkit::DevelControl::Property::ACCESSIBILITY_DESCRIPTION: + { + std::string text; + if(value.Get(text)) + { + controlImpl.mImpl->mAccessibilityDescription = text; + controlImpl.mImpl->mAccessibilityDescriptionSet = true; + } + else + { + controlImpl.mImpl->mAccessibilityDescriptionSet = false; + } + } + break; + + case Toolkit::DevelControl::Property::ACCESSIBILITY_TRANSLATION_DOMAIN: + { + std::string text; + if(value.Get(text)) + { + controlImpl.mImpl->mAccessibilityTranslationDomain = text; + controlImpl.mImpl->mAccessibilityTranslationDomainSet = true; + } + else + { + controlImpl.mImpl->mAccessibilityTranslationDomainSet = false; + } + } + break; + + case Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE: + { + Dali::Accessibility::Role role; + if(value.Get(role)) + { + controlImpl.mImpl->mAccessibilityRole = role; + } + } + break; + + case Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE: + { + bool highlightable; + if(value.Get(highlightable)) + { + controlImpl.mImpl->mAccessibilityHighlightable = highlightable; + controlImpl.mImpl->mAccessibilityHighlightableSet = true; + } + else + { + controlImpl.mImpl->mAccessibilityHighlightableSet = false; + } + } + break; + case Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES: { const Property::Map* map = value.GetMap(); @@ -1279,48 +1290,6 @@ Property::Value Control::Impl::GetProperty(BaseObject* object, Property::Index i break; } - case Toolkit::DevelControl::Property::ACCESSIBILITY_NAME: - { - if(controlImpl.mImpl->mAccessibilityNameSet) - { - value = controlImpl.mImpl->mAccessibilityName; - } - break; - } - - case Toolkit::DevelControl::Property::ACCESSIBILITY_DESCRIPTION: - { - if(controlImpl.mImpl->mAccessibilityDescriptionSet) - { - value = controlImpl.mImpl->mAccessibilityDescription; - } - break; - } - - case Toolkit::DevelControl::Property::ACCESSIBILITY_TRANSLATION_DOMAIN: - { - if(controlImpl.mImpl->mAccessibilityTranslationDomainSet) - { - value = controlImpl.mImpl->mAccessibilityTranslationDomain; - } - break; - } - - case Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE: - { - if(controlImpl.mImpl->mAccessibilityHighlightableSet) - { - value = controlImpl.mImpl->mAccessibilityHighlightable; - } - break; - } - - case Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE: - { - value = Property::Value(controlImpl.mImpl->mAccessibilityRole); - break; - } - case Toolkit::DevelControl::Property::UP_FOCUSABLE_ACTOR_ID: { value = controlImpl.mImpl->mUpFocusableActorId; @@ -1388,6 +1357,48 @@ Property::Value Control::Impl::GetProperty(BaseObject* object, Property::Index i break; } + case Toolkit::DevelControl::Property::ACCESSIBILITY_NAME: + { + if(controlImpl.mImpl->mAccessibilityNameSet) + { + value = controlImpl.mImpl->mAccessibilityName; + } + break; + } + + case Toolkit::DevelControl::Property::ACCESSIBILITY_DESCRIPTION: + { + if(controlImpl.mImpl->mAccessibilityDescriptionSet) + { + value = controlImpl.mImpl->mAccessibilityDescription; + } + break; + } + + case Toolkit::DevelControl::Property::ACCESSIBILITY_TRANSLATION_DOMAIN: + { + if(controlImpl.mImpl->mAccessibilityTranslationDomainSet) + { + value = controlImpl.mImpl->mAccessibilityTranslationDomain; + } + break; + } + + case Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE: + { + value = Property::Value(controlImpl.mImpl->mAccessibilityRole); + break; + } + + case Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE: + { + if(controlImpl.mImpl->mAccessibilityHighlightableSet) + { + value = controlImpl.mImpl->mAccessibilityHighlightable; + } + break; + } + case Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES: { value = controlImpl.mImpl->mAccessibilityAttributes; @@ -1401,9 +1412,11 @@ Property::Value Control::Impl::GetProperty(BaseObject* object, Property::Index i void Control::Impl::RemoveAccessibilityAttribute(const std::string& key) { - Property::Value* val = mAccessibilityAttributes.Find(key); - if(val) + Property::Value* value = mAccessibilityAttributes.Find(key); + if(value) + { mAccessibilityAttributes[key] = Property::Value(); + } } void Control::Impl::ClearAccessibilityAttributes() @@ -1413,7 +1426,7 @@ void Control::Impl::ClearAccessibilityAttributes() void Control::Impl::SetAccessibilityReadingInfoType(const Dali::Accessibility::ReadingInfoTypes types) { - std::string value; + std::string value{}; if(types[Dali::Accessibility::ReadingInfoType::NAME]) { value += READING_INFO_TYPE_NAME; @@ -1447,7 +1460,7 @@ void Control::Impl::SetAccessibilityReadingInfoType(const Dali::Accessibility::R Dali::Accessibility::ReadingInfoTypes Control::Impl::GetAccessibilityReadingInfoType() const { - std::string value; + std::string value{}; auto place = mAccessibilityAttributes.Find(READING_INFO_TYPE_ATTRIBUTE_NAME); if(place) { @@ -1947,20 +1960,22 @@ void Control::Impl::OnIdleCallback() Dali::Accessibility::Accessible* Control::Impl::GetAccessibilityObject() { - if(!accessibilityObject) - accessibilityObject = accessibilityConstructor(mControlImpl.Self()); - return accessibilityObject.get(); + if(!mAccessibilityObject) + { + mAccessibilityObject = mAccessibilityConstructor(mControlImpl.Self()); + } + return mAccessibilityObject.get(); } Dali::Accessibility::Accessible* Control::Impl::GetAccessibilityObject(Dali::Actor actor) { if(actor) { - auto q = Dali::Toolkit::Control::DownCast(actor); - if(q) + auto control = Dali::Toolkit::Control::DownCast(actor); + if(control) { - auto q2 = static_cast(&q.GetImplementation()); - return q2->mImpl->GetAccessibilityObject(); + auto controlImpl = static_cast(&control.GetImplementation()); + return controlImpl->mImpl->GetAccessibilityObject(); } } return nullptr; diff --git a/dali-toolkit/internal/controls/control/control-data-impl.h b/dali-toolkit/internal/controls/control/control-data-impl.h index 96290b7..e278390 100644 --- a/dali-toolkit/internal/controls/control/control-data-impl.h +++ b/dali-toolkit/internal/controls/control/control-data-impl.h @@ -342,8 +342,7 @@ public: * Attribute is added if not existed previously or updated * if existed. */ - void AppendAccessibilityAttribute(const std::string& key, - const std::string value); + void AppendAccessibilityAttribute(const std::string& key, const std::string value); /** * @brief Removes accessibility attribute @@ -405,6 +404,22 @@ public: */ void MakeVisualTransition(Dali::Animation& animation, Dali::Toolkit::Control source, Dali::Property::Index visualIndex, AlphaFunction alphaFunction, TimePeriod timePeriod); + /** + * @brief Gets the current control's accessible object. + * + * @return The handle to Accessible object + */ + Dali::Accessibility::Accessible* GetAccessibilityObject(); + + /** + * @brief Gets Accessible object handle. + * + * The method acquires Accessible handle from Actor object + * @param actor Actor object + * @return The handle to Accessible object + */ + static Dali::Accessibility::Accessible* GetAccessibilityObject(Dali::Actor actor); + private: /** * Used as an alternative to boolean so that it is obvious whether a visual is enabled/disabled. @@ -475,6 +490,8 @@ public: Toolkit::Control::KeyInputFocusSignalType mKeyInputFocusLostSignal; Toolkit::Control::ResourceReadySignalType mResourceReadySignal; DevelControl::VisualEventSignalType mVisualEventSignal; + + // Accessibility Toolkit::DevelControl::AccessibilityActivateSignalType mAccessibilityActivateSignal; Toolkit::DevelControl::AccessibilityReadingSkippedSignalType mAccessibilityReadingSkippedSignal; Toolkit::DevelControl::AccessibilityReadingPausedSignalType mAccessibilityReadingPausedSignal; @@ -482,17 +499,15 @@ public: Toolkit::DevelControl::AccessibilityReadingCancelledSignalType mAccessibilityReadingCancelledSignal; Toolkit::DevelControl::AccessibilityReadingStoppedSignalType mAccessibilityReadingStoppedSignal; - Toolkit::DevelControl::AccessibilityGetNameSignalType mAccessibilityGetNameSignal; - Toolkit::DevelControl::AccessibilityGetDescriptionSignalType mAccessibilityGetDescriptionSignal; - Toolkit::DevelControl::AccessibilityDoGestureSignalType mAccessibilityDoGestureSignal; + Toolkit::DevelControl::AccessibilityGetNameSignalType mAccessibilityGetNameSignal; + Toolkit::DevelControl::AccessibilityGetDescriptionSignalType mAccessibilityGetDescriptionSignal; + Toolkit::DevelControl::AccessibilityDoGestureSignalType mAccessibilityDoGestureSignal; std::string mAccessibilityName; - bool mAccessibilityNameSet = false; - std::string mAccessibilityDescription; - bool mAccessibilityDescriptionSet = false; - std::string mAccessibilityTranslationDomain; + bool mAccessibilityNameSet = false; + bool mAccessibilityDescriptionSet = false; bool mAccessibilityTranslationDomainSet = false; bool mAccessibilityHighlightable = false; @@ -500,7 +515,9 @@ public: Dali::Accessibility::Role mAccessibilityRole = Dali::Accessibility::Role::UNKNOWN; - std::vector> mAccessibilityRelations; + std::vector> mAccessibilityRelations; + std::function(Actor)> mAccessibilityConstructor; + std::unique_ptr mAccessibilityObject; // Gesture Detection PinchGestureDetector mPinchGestureDetector; @@ -545,17 +562,6 @@ public: static const PropertyRegistration PROPERTY_20; static const PropertyRegistration PROPERTY_21; static const PropertyRegistration PROPERTY_22; - - /** - * The method acquires Accessible handle from Actor object - * @param actor Actor object - * @return handle to Accessible object - */ - static Dali::Accessibility::Accessible* GetAccessibilityObject(Dali::Actor actor); - Dali::Accessibility::Accessible* GetAccessibilityObject(); - - std::function(Actor)> accessibilityConstructor; - std::unique_ptr accessibilityObject; }; } // namespace Internal diff --git a/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.cpp b/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.cpp index 48dfaad..1006307 100644 --- a/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.cpp +++ b/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.cpp @@ -683,9 +683,8 @@ double ProgressBar::AccessibleImpl::GetMinimum() double ProgressBar::AccessibleImpl::GetCurrent() { - auto p = Toolkit::ProgressBar::DownCast(Self()); - return p.GetProperty(Toolkit::ProgressBar::Property::PROGRESS_VALUE) - .Get(); + auto self = Toolkit::ProgressBar::DownCast(Self()); + return self.GetProperty(Toolkit::ProgressBar::Property::PROGRESS_VALUE).Get(); } double ProgressBar::AccessibleImpl::GetMaximum() @@ -696,10 +695,12 @@ double ProgressBar::AccessibleImpl::GetMaximum() bool ProgressBar::AccessibleImpl::SetCurrent(double current) { if(current < GetMinimum() || current > GetMaximum()) + { return false; - auto p = Toolkit::ProgressBar::DownCast(Self()); - p.SetProperty(Toolkit::ProgressBar::Property::PROGRESS_VALUE, - static_cast(current)); + } + + auto self = Toolkit::ProgressBar::DownCast(Self()); + self.SetProperty(Toolkit::ProgressBar::Property::PROGRESS_VALUE, static_cast(current)); return true; } diff --git a/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.cpp b/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.cpp index fcf0b91..1da4297 100644 --- a/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.cpp +++ b/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.cpp @@ -863,42 +863,49 @@ Toolkit::ScrollBar ScrollBar::New(Toolkit::ScrollBar::Direction direction) double ScrollBar::AccessibleImpl::GetMinimum() { - auto p = Toolkit::ScrollBar::DownCast(Self()); - Handle scrollableHandle = GetImpl(p).mScrollableObject.GetHandle(); - return scrollableHandle ? scrollableHandle.GetCurrentProperty(GetImpl(p).mPropertyMinScrollPosition) : 0.0f; + auto self = Toolkit::ScrollBar::DownCast(Self()); + Handle scrollableHandle = GetImpl(self).mScrollableObject.GetHandle(); + return scrollableHandle ? scrollableHandle.GetCurrentProperty(GetImpl(self).mPropertyMinScrollPosition) : 0.0f; } double ScrollBar::AccessibleImpl::GetCurrent() { - auto p = Toolkit::ScrollBar::DownCast(Self()); - Handle scrollableHandle = GetImpl(p).mScrollableObject.GetHandle(); - return scrollableHandle ? scrollableHandle.GetCurrentProperty(GetImpl(p).mPropertyScrollPosition) : 0.0f; + auto self = Toolkit::ScrollBar::DownCast(Self()); + Handle scrollableHandle = GetImpl(self).mScrollableObject.GetHandle(); + return scrollableHandle ? scrollableHandle.GetCurrentProperty(GetImpl(self).mPropertyScrollPosition) : 0.0f; } double ScrollBar::AccessibleImpl::GetMaximum() { - auto p = Toolkit::ScrollBar::DownCast(Self()); - Handle scrollableHandle = GetImpl(p).mScrollableObject.GetHandle(); - return scrollableHandle ? scrollableHandle.GetCurrentProperty(GetImpl(p).mPropertyMaxScrollPosition) : 1.0f; + auto self = Toolkit::ScrollBar::DownCast(Self()); + Handle scrollableHandle = GetImpl(self).mScrollableObject.GetHandle(); + return scrollableHandle ? scrollableHandle.GetCurrentProperty(GetImpl(self).mPropertyMaxScrollPosition) : 1.0f; } bool ScrollBar::AccessibleImpl::SetCurrent(double current) { if(current < GetMinimum() || current > GetMaximum()) + { return false; + } - auto value_before = GetCurrent(); + auto valueBefore = GetCurrent(); - auto p = Toolkit::ScrollBar::DownCast(Self()); - Handle scrollableHandle = GetImpl(p).mScrollableObject.GetHandle(); + auto self = Toolkit::ScrollBar::DownCast(Self()); + Handle scrollableHandle = GetImpl(self).mScrollableObject.GetHandle(); if(!scrollableHandle) + { return false; - scrollableHandle.SetProperty(GetImpl(p).mPropertyScrollPosition, static_cast(current)); + } - auto value_after = GetCurrent(); + scrollableHandle.SetProperty(GetImpl(self).mPropertyScrollPosition, static_cast(current)); - if((current != value_before) && (value_before == value_after)) + auto valueAfter = GetCurrent(); + + if((current != valueBefore) && (valueBefore == valueAfter)) + { return false; + } return true; } diff --git a/dali-toolkit/internal/controls/slider/slider-impl.cpp b/dali-toolkit/internal/controls/slider/slider-impl.cpp index fdbbbd9..8cac5ed 100644 --- a/dali-toolkit/internal/controls/slider/slider-impl.cpp +++ b/dali-toolkit/internal/controls/slider/slider-impl.cpp @@ -1413,20 +1413,20 @@ Property::Value Slider::GetProperty(BaseObject* object, Property::Index property double Slider::AccessibleImpl::GetMinimum() { - auto p = Toolkit::Slider::DownCast(Self()); - return p.GetProperty(Toolkit::Slider::Property::LOWER_BOUND).Get(); + auto self = Toolkit::Slider::DownCast(Self()); + return self.GetProperty(Toolkit::Slider::Property::LOWER_BOUND).Get(); } double Slider::AccessibleImpl::GetCurrent() { - auto p = Toolkit::Slider::DownCast(Self()); - return p.GetProperty(Toolkit::Slider::Property::VALUE).Get(); + auto self = Toolkit::Slider::DownCast(Self()); + return self.GetProperty(Toolkit::Slider::Property::VALUE).Get(); } double Slider::AccessibleImpl::GetMaximum() { - auto p = Toolkit::Slider::DownCast(Self()); - return p.GetProperty(Toolkit::Slider::Property::UPPER_BOUND).Get(); + auto self = Toolkit::Slider::DownCast(Self()); + return self.GetProperty(Toolkit::Slider::Property::UPPER_BOUND).Get(); } bool Slider::AccessibleImpl::SetCurrent(double current) @@ -1434,19 +1434,19 @@ bool Slider::AccessibleImpl::SetCurrent(double current) if(current < GetMinimum() || current > GetMaximum()) return false; - auto p = Toolkit::Slider::DownCast(Self()); - auto& impl = Toolkit::GetImpl(p); + auto self = Toolkit::Slider::DownCast(Self()); + auto& impl = Toolkit::GetImpl(self); - const float prev = p.GetProperty(Toolkit::Slider::Property::VALUE); + const float prev = self.GetProperty(Toolkit::Slider::Property::VALUE); float next = static_cast(current); if(fabsf(next - prev) < Math::MACHINE_EPSILON_0) { // do nothing } - else if(p.GetProperty(Toolkit::Slider::Property::SNAP_TO_MARKS)) + else if(self.GetProperty(Toolkit::Slider::Property::SNAP_TO_MARKS)) { - auto marks = p.GetProperty(Toolkit::Slider::Property::MARKS); + auto marks = self.GetProperty(Toolkit::Slider::Property::MARKS); int prevIdx; if(impl.MarkReached(impl.MapValuePercentage(prev), prevIdx)) @@ -1455,7 +1455,9 @@ bool Slider::AccessibleImpl::SetCurrent(double current) nextIdx += (next > prev) ? 1 : -1; if(nextIdx < 0 || nextIdx >= static_cast(marks.Count())) + { return false; + } next = marks[nextIdx].Get(); } @@ -1477,13 +1479,15 @@ bool Slider::AccessibleImpl::SetCurrent(double current) double Slider::AccessibleImpl::GetMinimumIncrement() { - auto p = Toolkit::Slider::DownCast(Self()); + auto self = Toolkit::Slider::DownCast(Self()); - bool hasMarks = !p.GetProperty(Toolkit::Slider::Property::MARKS).Empty(); - float tolerance = p.GetProperty(Toolkit::Slider::Property::MARK_TOLERANCE); + bool hasMarks = !self.GetProperty(Toolkit::Slider::Property::MARKS).Empty(); + float tolerance = self.GetProperty(Toolkit::Slider::Property::MARK_TOLERANCE); if(!hasMarks || fabsf(tolerance) < 0.01) + { return 0.0; // let screen-reader choose the increment + } return Math::MACHINE_EPSILON_10000 + tolerance * (GetMaximum() - GetMinimum()); } 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 af27bd1..72503a5 100644 --- a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp @@ -1272,7 +1272,7 @@ DevelTextEditor::InputFilteredSignalType& TextEditor::InputFilteredSignal() return mInputFilteredSignal; } -Text::ControllerPtr TextEditor::getController() +Text::ControllerPtr TextEditor::GetTextController() { return mController; } @@ -1813,11 +1813,11 @@ void TextEditor::TextDeleted(unsigned int position, unsigned int length, const s } } -void TextEditor::CaretMoved(unsigned int position) +void TextEditor::CursorMoved(unsigned int position) { if(Accessibility::IsUp()) { - Control::Impl::GetAccessibilityObject(Self())->EmitTextCaretMoved(position); + Control::Impl::GetAccessibilityObject(Self())->EmitTextCursorMoved(position); } } @@ -2201,61 +2201,63 @@ TextEditor::~TextEditor() std::string TextEditor::AccessibleImpl::GetName() { - auto slf = Toolkit::TextEditor::DownCast(Self()); - return slf.GetProperty(Toolkit::TextEditor::Property::TEXT) - .Get(); + auto self = Toolkit::TextEditor::DownCast(Self()); + return self.GetProperty(Toolkit::TextEditor::Property::TEXT).Get(); } -std::string TextEditor::AccessibleImpl::GetText(size_t startOffset, - size_t endOffset) +std::string TextEditor::AccessibleImpl::GetText(size_t startOffset, size_t endOffset) { if(endOffset <= startOffset) + { return {}; + } - auto slf = Toolkit::TextEditor::DownCast(Self()); - auto txt = - slf.GetProperty(Toolkit::TextEditor::Property::TEXT).Get(); + auto self = Toolkit::TextEditor::DownCast(Self()); + auto text = self.GetProperty(Toolkit::TextEditor::Property::TEXT).Get(); - if(startOffset > txt.size() || endOffset > txt.size()) + if(startOffset > text.size() || endOffset > text.size()) + { return {}; + } - return txt.substr(startOffset, endOffset - startOffset); + return text.substr(startOffset, endOffset - startOffset); } size_t TextEditor::AccessibleImpl::GetCharacterCount() { - auto slf = Toolkit::TextEditor::DownCast(Self()); - auto txt = - slf.GetProperty(Toolkit::TextEditor::Property::TEXT).Get(); + auto self = Toolkit::TextEditor::DownCast(Self()); + auto text = self.GetProperty(Toolkit::TextEditor::Property::TEXT).Get(); - return txt.size(); + return text.size(); } -size_t TextEditor::AccessibleImpl::GetCaretOffset() +size_t TextEditor::AccessibleImpl::GetCursorOffset() { auto slf = Toolkit::TextEditor::DownCast(Self()); - return Dali::Toolkit::GetImpl(slf).getController()->GetCursorPosition(); + return Dali::Toolkit::GetImpl(slf).GetTextController()->GetCursorPosition(); } -bool TextEditor::AccessibleImpl::SetCaretOffset(size_t offset) +bool TextEditor::AccessibleImpl::SetCursorOffset(size_t offset) { auto slf = Toolkit::TextEditor::DownCast(Self()); auto txt = slf.GetProperty(Toolkit::TextEditor::Property::TEXT).Get(); if(offset > txt.size()) + { return false; + } auto& slfImpl = Dali::Toolkit::GetImpl(slf); - slfImpl.getController()->ResetCursorPosition(offset); + slfImpl.GetTextController()->ResetCursorPosition(offset); slfImpl.RequestTextRelayout(); + return true; } -Dali::Accessibility::Range TextEditor::AccessibleImpl::GetTextAtOffset( - size_t offset, Dali::Accessibility::TextBoundary boundary) +Dali::Accessibility::Range TextEditor::AccessibleImpl::GetTextAtOffset( size_t offset, Dali::Accessibility::TextBoundary boundary) { - auto slf = Toolkit::TextEditor::DownCast(Self()); - auto txt = slf.GetProperty(Toolkit::TextEditor::Property::TEXT).Get(); - auto txt_size = txt.size(); + auto self = Toolkit::TextEditor::DownCast(Self()); + auto text = self.GetProperty(Toolkit::TextEditor::Property::TEXT).Get(); + auto textSize = text.size(); auto range = Dali::Accessibility::Range{}; @@ -2263,62 +2265,78 @@ Dali::Accessibility::Range TextEditor::AccessibleImpl::GetTextAtOffset( { case Dali::Accessibility::TextBoundary::CHARACTER: { - if(offset < txt_size) + if(offset < textSize) { - range.content = txt[offset]; + range.content = text[offset]; range.startOffset = offset; range.endOffset = offset + 1; } + break; } - break; case Dali::Accessibility::TextBoundary::WORD: case Dali::Accessibility::TextBoundary::LINE: { - auto txt_c_string = txt.c_str(); - auto breaks = std::vector(txt_size, 0); + auto textString = text.c_str(); + auto breaks = std::vector(textSize, 0); + if(boundary == Dali::Accessibility::TextBoundary::WORD) - Accessibility::Accessible::FindWordSeparationsUtf8((const utf8_t*)txt_c_string, txt_size, "", breaks.data()); + { + Accessibility::Accessible::FindWordSeparationsUtf8(reinterpret_cast(textString), textSize, "", breaks.data()); + } else - Accessibility::Accessible::FindLineSeparationsUtf8((const utf8_t*)txt_c_string, txt_size, "", breaks.data()); + { + Accessibility::Accessible::FindLineSeparationsUtf8(reinterpret_cast(textString), textSize, "", breaks.data()); + } + auto index = 0u; auto counter = 0u; - while(index < txt_size && counter <= offset) + while(index < textSize && counter <= offset) { auto start = index; if(breaks[index]) { while(breaks[index]) + { index++; + } counter++; } else { if(boundary == Dali::Accessibility::TextBoundary::WORD) + { index++; + } if(boundary == Dali::Accessibility::TextBoundary::LINE) + { counter++; + } } + if((counter > 0) && ((counter - 1) == offset)) { - range.content = txt.substr(start, index - start + 1); + range.content = text.substr(start, index - start + 1); range.startOffset = start; range.endOffset = index + 1; } + if(boundary == Dali::Accessibility::TextBoundary::LINE) + { index++; + } } + break; } - break; case Dali::Accessibility::TextBoundary::SENTENCE: { - /* not supported by efl */ + /* not supported by default */ + break; } - break; case Dali::Accessibility::TextBoundary::PARAGRAPH: { /* Paragraph is not supported by libunibreak library */ + break; } - break; default: break; } @@ -2326,87 +2344,90 @@ Dali::Accessibility::Range TextEditor::AccessibleImpl::GetTextAtOffset( return range; } -Dali::Accessibility::Range -TextEditor::AccessibleImpl::GetSelection(size_t selectionNum) +Dali::Accessibility::Range TextEditor::AccessibleImpl::GetRangeOfSelection(size_t selectionIndex) { // Since DALi supports only one selection indexes higher than 0 are ignored - if(selectionNum > 0) + if(selectionIndex > 0) + { return {}; + } - auto slf = Toolkit::TextEditor::DownCast(Self()); - auto ctrl = Dali::Toolkit::GetImpl(slf).getController(); - std::string ret; - ctrl->RetrieveSelection(ret); - auto r = ctrl->GetSelectionIndexes(); + auto self = Toolkit::TextEditor::DownCast(Self()); + auto controller = Dali::Toolkit::GetImpl(self).GetTextController(); + std::string value{}; + controller->RetrieveSelection(value); + auto indices = controller->GetSelectionIndexes(); - return {static_cast(r.first), static_cast(r.second), ret}; + return {static_cast(indices.first), static_cast(indices.second), value}; } -bool TextEditor::AccessibleImpl::RemoveSelection(size_t selectionNum) +bool TextEditor::AccessibleImpl::RemoveSelection(size_t selectionIndex) { // Since DALi supports only one selection indexes higher than 0 are ignored - if(selectionNum > 0) + if(selectionIndex > 0) + { return false; + } - auto slf = Toolkit::TextEditor::DownCast(Self()); - Dali::Toolkit::GetImpl(slf).getController()->SetSelection(0, 0); + auto self = Toolkit::TextEditor::DownCast(Self()); + Dali::Toolkit::GetImpl(self).GetTextController()->SetSelection(0, 0); return true; } -bool TextEditor::AccessibleImpl::SetSelection(size_t selectionNum, - size_t startOffset, - size_t endOffset) +bool TextEditor::AccessibleImpl::SetRangeOfSelection(size_t selectionIndex, size_t startOffset, size_t endOffset) { // Since DALi supports only one selection indexes higher than 0 are ignored - if(selectionNum > 0) + if(selectionIndex > 0) + { return false; + } - auto slf = Toolkit::TextEditor::DownCast(Self()); - Dali::Toolkit::GetImpl(slf).getController()->SetSelection(startOffset, - endOffset); + auto self = Toolkit::TextEditor::DownCast(Self()); + Dali::Toolkit::GetImpl(self).GetTextController()->SetSelection(startOffset, endOffset); return true; } -bool TextEditor::AccessibleImpl::CopyText(size_t startPosition, - size_t endPosition) +bool TextEditor::AccessibleImpl::CopyText(size_t startPosition, size_t endPosition) { if(endPosition <= startPosition) + { return false; + } - auto slf = Toolkit::TextEditor::DownCast(Self()); - auto txt = slf.GetProperty(Toolkit::TextEditor::Property::TEXT).Get(); - Dali::Toolkit::GetImpl(slf).getController()->CopyStringToClipboard(txt.substr(startPosition, endPosition - startPosition)); + auto self = Toolkit::TextEditor::DownCast(Self()); + auto text = self.GetProperty(Toolkit::TextEditor::Property::TEXT).Get(); + Dali::Toolkit::GetImpl(self).GetTextController()->CopyStringToClipboard(text.substr(startPosition, endPosition - startPosition)); return true; } -bool TextEditor::AccessibleImpl::CutText(size_t startPosition, - size_t endPosition) +bool TextEditor::AccessibleImpl::CutText(size_t startPosition, size_t endPosition) { if(endPosition <= startPosition) + { return false; + } - auto slf = Toolkit::TextEditor::DownCast(Self()); - auto txt = slf.GetProperty(Toolkit::TextEditor::Property::TEXT).Get(); - Dali::Toolkit::GetImpl(slf).getController()->CopyStringToClipboard(txt.substr(startPosition, endPosition - startPosition)); + auto self = Toolkit::TextEditor::DownCast(Self()); + auto text = self.GetProperty(Toolkit::TextEditor::Property::TEXT).Get(); + Dali::Toolkit::GetImpl(self).GetTextController()->CopyStringToClipboard(text.substr(startPosition, endPosition - startPosition)); - slf.SetProperty(Toolkit::TextEditor::Property::TEXT, - txt.substr(0, startPosition) + txt.substr(endPosition)); + self.SetProperty(Toolkit::TextEditor::Property::TEXT, text.substr(0, startPosition) + text.substr(endPosition)); return true; } -bool TextEditor::AccessibleImpl::DeleteText(size_t startPosition, - size_t endPosition) +bool TextEditor::AccessibleImpl::DeleteText(size_t startPosition, size_t endPosition) { if(endPosition <= startPosition) + { return false; + } - auto slf = Toolkit::TextEditor::DownCast(Self()); - auto txt = slf.GetProperty(Toolkit::TextEditor::Property::TEXT).Get(); + auto self = Toolkit::TextEditor::DownCast(Self()); + auto text = self.GetProperty(Toolkit::TextEditor::Property::TEXT).Get(); - slf.SetProperty(Toolkit::TextEditor::Property::TEXT, - txt.substr(0, startPosition) + txt.substr(endPosition)); + self.SetProperty(Toolkit::TextEditor::Property::TEXT, text.substr(0, startPosition) + text.substr(endPosition)); return true; } @@ -2415,12 +2436,12 @@ Dali::Accessibility::States TextEditor::AccessibleImpl::CalculateStates() { using namespace Dali::Accessibility; - auto states = DevelControl::AccessibleImpl::CalculateStates(); + auto states = DevelControl::AccessibleImpl::CalculateStates(); states[State::EDITABLE] = true; states[State::FOCUSABLE] = true; Toolkit::Control focusControl = Toolkit::KeyInputFocusManager::Get().GetCurrentFocusControl(); - if(self == focusControl) + if(mSelf == focusControl) { states[State::FOCUSED] = true; } @@ -2428,23 +2449,22 @@ Dali::Accessibility::States TextEditor::AccessibleImpl::CalculateStates() return states; } -bool TextEditor::AccessibleImpl::InsertText(size_t startPosition, - std::string text) +bool TextEditor::AccessibleImpl::InsertText(size_t startPosition, std::string text) { - auto slf = Toolkit::TextEditor::DownCast(Self()); - auto txt = slf.GetProperty(Toolkit::TextEditor::Property::TEXT).Get(); + auto self = Toolkit::TextEditor::DownCast(Self()); + auto insertedText = self.GetProperty(Toolkit::TextEditor::Property::TEXT).Get(); - txt.insert(startPosition, text); + insertedText.insert(startPosition, text); - slf.SetProperty(Toolkit::TextEditor::Property::TEXT, std::move(txt)); + self.SetProperty(Toolkit::TextEditor::Property::TEXT, std::move(insertedText)); return true; } bool TextEditor::AccessibleImpl::SetTextContents(std::string newContents) { - auto slf = Toolkit::TextEditor::DownCast(Self()); - slf.SetProperty(Toolkit::TextEditor::Property::TEXT, std::move(newContents)); + auto self = Toolkit::TextEditor::DownCast(Self()); + self.SetProperty(Toolkit::TextEditor::Property::TEXT, std::move(newContents)); return true; } diff --git a/dali-toolkit/internal/controls/text-controls/text-editor-impl.h b/dali-toolkit/internal/controls/text-controls/text-editor-impl.h index 9a034a1..6947faa 100644 --- a/dali-toolkit/internal/controls/text-controls/text-editor-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-editor-impl.h @@ -109,6 +109,13 @@ public: static bool DoConnectSignal(BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor); /** + * @brief Gets text controller + * + * @return The text controller + */ + Text::ControllerPtr GetTextController(); + + /** * @copydoc TextEditor::TextChangedSignal() */ Toolkit::TextEditor::TextChangedSignalType& TextChangedSignal(); @@ -209,9 +216,9 @@ private: // From Control void TextDeleted(unsigned int position, unsigned int length, const std::string& content) override; /** - * @copydoc Text::EditableControlInterface::CaretMoved() + * @copydoc Text::EditableControlInterface::CursorMoved() */ - void CaretMoved(unsigned int position) override; + void CursorMoved(unsigned int position) override; /** * @copydoc Text::EditableControlInterface::TextChanged() @@ -306,8 +313,6 @@ public: */ void AnchorClicked(const std::string& href) override; - Text::ControllerPtr getController(); - private: // Implementation /** * @copydoc Dali::Toolkit::Text::Controller::(InputMethodContext& inputMethodContext, const InputMethodContext::EventData& inputMethodContextEvent) @@ -442,27 +447,89 @@ private: // Data bool mScrollStarted : 1; bool mTextChanged : 1; ///< If true, emits TextChangedSignal in next OnRelayout(). + /** + * @brief This structure is to connect TextEditor with Accessible functions. + */ struct AccessibleImpl : public DevelControl::AccessibleImpl, public virtual Dali::Accessibility::Text, public virtual Dali::Accessibility::EditableText { using DevelControl::AccessibleImpl::AccessibleImpl; - std::string GetName() override; - std::string GetText(size_t startOffset, size_t endOffset) override; - size_t GetCharacterCount() override; - size_t GetCaretOffset() override; - bool SetCaretOffset(size_t offset) override; - Accessibility::Range GetTextAtOffset(size_t offset, Accessibility::TextBoundary boundary) override; - Accessibility::Range GetSelection(size_t selectionNum) override; - bool RemoveSelection(size_t selectionNum) override; - bool SetSelection(size_t selectionNum, size_t startOffset, size_t endOffset) override; - bool CopyText(size_t startPosition, size_t endPosition) override; - bool CutText(size_t startPosition, size_t endPosition) override; + /** + * @copydoc Dali::Accessibility::Accessible::GetName() + */ + std::string GetName() override; + + /** + * @copydoc Dali::Accessibility::Text::GetText() + */ + std::string GetText(size_t startOffset, size_t endOffset) override; + + /** + * @copydoc Dali::Accessibility::Text::GetCharacterCount() + */ + size_t GetCharacterCount() override; + + /** + * @copydoc Dali::Accessibility::Text::GetCursorOffset() + */ + size_t GetCursorOffset() override; + + /** + * @copydoc Dali::Accessibility::Text::SetCursorOffset() + */ + bool SetCursorOffset(size_t offset) override; + + /** + * @copydoc Dali::Accessibility::Text::GetTextAtOffset() + */ + Accessibility::Range GetTextAtOffset(size_t offset, Accessibility::TextBoundary boundary) override; + + /** + * @copydoc Dali::Accessibility::Text::GetRangeOfSelection() + */ + Accessibility::Range GetRangeOfSelection(size_t selectionIndex) override; + + /** + * @copydoc Dali::Accessibility::Text::RemoveSelection() + */ + bool RemoveSelection(size_t selectionIndex) override; + + /** + * @copydoc Dali::Accessibility::Text::SetRangeOfSelection() + */ + bool SetRangeOfSelection(size_t selectionIndex, size_t startOffset, size_t endOffset) override; + + /** + * @copydoc Dali::Accessibility::EditableText::CopyText() + */ + bool CopyText(size_t startPosition, size_t endPosition) override; + + /** + * @copydoc Dali::Accessibility::EditableText::CutText() + */ + bool CutText(size_t startPosition, size_t endPosition) override; + + /** + * @copydoc Dali::Accessibility::Accessible::GetStates() + */ Accessibility::States CalculateStates() override; - bool InsertText(size_t startPosition, std::string text) override; - bool SetTextContents(std::string newContents) override; - bool DeleteText(size_t startPosition, size_t endPosition) override; + + /** + * @copydoc Dali::Accessibility::EditableText::InsertText() + */ + bool InsertText(size_t startPosition, std::string text) override; + + /** + * @copydoc Dali::Accessibility::EditableText::SetTextContents() + */ + bool SetTextContents(std::string newContents) override; + + /** + * @copydoc Dali::Accessibility::EditableText::DeleteText() + */ + bool DeleteText(size_t startPosition, size_t endPosition) override; }; }; diff --git a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp index 27eae92..b1a85c7 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp @@ -1485,7 +1485,7 @@ void TextField::OnRelayout(const Vector2& size, RelayoutContainer& container) } } -Text::ControllerPtr TextField::getController() +Text::ControllerPtr TextField::GetTextController() { return mController; } @@ -1746,11 +1746,11 @@ void TextField::TextDeleted(unsigned int position, unsigned int length, const st } } -void TextField::CaretMoved(unsigned int position) +void TextField::CursorMoved(unsigned int position) { if(Accessibility::IsUp()) { - Control::Impl::GetAccessibilityObject(Self())->EmitTextCaretMoved(position); + Control::Impl::GetAccessibilityObject(Self())->EmitTextCursorMoved(position); } } @@ -1988,60 +1988,64 @@ TextField::~TextField() std::string TextField::AccessibleImpl::GetName() { - auto slf = Toolkit::TextField::DownCast(Self()); - return slf.GetProperty(Toolkit::TextField::Property::TEXT).Get(); + auto self = Toolkit::TextField::DownCast(Self()); + return self.GetProperty(Toolkit::TextField::Property::TEXT).Get(); } -std::string TextField::AccessibleImpl::GetText(size_t startOffset, - size_t endOffset) +std::string TextField::AccessibleImpl::GetText(size_t startOffset, size_t endOffset) { if(endOffset <= startOffset) + { return {}; + } - auto slf = Toolkit::TextField::DownCast(Self()); - auto txt = - slf.GetProperty(Toolkit::TextField::Property::TEXT).Get(); + auto self = Toolkit::TextField::DownCast(Self()); + auto text = self.GetProperty(Toolkit::TextField::Property::TEXT).Get(); - if(startOffset > txt.size() || endOffset > txt.size()) + if(startOffset > text.size() || endOffset > text.size()) + { return {}; + } - return txt.substr(startOffset, endOffset - startOffset); + return text.substr(startOffset, endOffset - startOffset); } size_t TextField::AccessibleImpl::GetCharacterCount() { - auto slf = Toolkit::TextField::DownCast(Self()); - auto txt = - slf.GetProperty(Toolkit::TextField::Property::TEXT).Get(); + auto self = Toolkit::TextField::DownCast(Self()); + auto text = self.GetProperty(Toolkit::TextField::Property::TEXT).Get(); - return txt.size(); + return text.size(); } -size_t TextField::AccessibleImpl::GetCaretOffset() +size_t TextField::AccessibleImpl::GetCursorOffset() { - auto slf = Toolkit::TextField::DownCast(Self()); - return Dali::Toolkit::GetImpl(slf).getController()->GetCursorPosition(); + auto self = Toolkit::TextField::DownCast(Self()); + return Dali::Toolkit::GetImpl(self).GetTextController()->GetCursorPosition(); } -bool TextField::AccessibleImpl::SetCaretOffset(size_t offset) +bool TextField::AccessibleImpl::SetCursorOffset(size_t offset) { - auto slf = Toolkit::TextField::DownCast(Self()); - auto txt = slf.GetProperty(Toolkit::TextField::Property::TEXT).Get(); - if(offset > txt.size()) + auto self = Toolkit::TextField::DownCast(Self()); + auto text = self.GetProperty(Toolkit::TextField::Property::TEXT).Get(); + if(offset > text.size()) + { return false; + } + + auto& selfImpl = Dali::Toolkit::GetImpl(self); + selfImpl.GetTextController()->ResetCursorPosition(offset); + selfImpl.RequestTextRelayout(); - auto& slfImpl = Dali::Toolkit::GetImpl(slf); - slfImpl.getController()->ResetCursorPosition(offset); - slfImpl.RequestTextRelayout(); return true; } Dali::Accessibility::Range TextField::AccessibleImpl::GetTextAtOffset( size_t offset, Dali::Accessibility::TextBoundary boundary) { - auto slf = Toolkit::TextField::DownCast(Self()); - auto txt = slf.GetProperty(Toolkit::TextField::Property::TEXT).Get(); - auto txt_size = txt.size(); + auto self = Toolkit::TextField::DownCast(Self()); + auto text = self.GetProperty(Toolkit::TextField::Property::TEXT).Get(); + auto textSize = text.size(); auto range = Dali::Accessibility::Range{}; @@ -2049,62 +2053,78 @@ Dali::Accessibility::Range TextField::AccessibleImpl::GetTextAtOffset( { case Dali::Accessibility::TextBoundary::CHARACTER: { - if(offset < txt_size) + if(offset < textSize) { - range.content = txt[offset]; + range.content = text[offset]; range.startOffset = offset; range.endOffset = offset + 1; } + break; } - break; case Dali::Accessibility::TextBoundary::WORD: case Dali::Accessibility::TextBoundary::LINE: { - auto txt_c_string = txt.c_str(); - auto breaks = std::vector(txt_size, 0); + auto textString = text.c_str(); + auto breaks = std::vector(textSize, 0); + if(boundary == Dali::Accessibility::TextBoundary::WORD) - Accessibility::Accessible::FindWordSeparationsUtf8((const utf8_t*)txt_c_string, txt_size, "", breaks.data()); + { + Accessibility::Accessible::FindWordSeparationsUtf8(reinterpret_cast(textString), textSize, "", breaks.data()); + } else - Accessibility::Accessible::FindLineSeparationsUtf8((const utf8_t*)txt_c_string, txt_size, "", breaks.data()); + { + Accessibility::Accessible::FindLineSeparationsUtf8(reinterpret_cast(textString), textSize, "", breaks.data()); + } + auto index = 0u; auto counter = 0u; - while(index < txt_size && counter <= offset) + while(index < textSize && counter <= offset) { auto start = index; if(breaks[index]) { while(breaks[index]) + { index++; + } counter++; } else { if(boundary == Dali::Accessibility::TextBoundary::WORD) + { index++; + } if(boundary == Dali::Accessibility::TextBoundary::LINE) + { counter++; + } } + if((counter > 0) && ((counter - 1) == offset)) { - range.content = txt.substr(start, index - start + 1); + range.content = text.substr(start, index - start + 1); range.startOffset = start; range.endOffset = index + 1; } + if(boundary == Dali::Accessibility::TextBoundary::LINE) + { index++; + } } + break; } - break; case Dali::Accessibility::TextBoundary::SENTENCE: { - /* not supported by efl */ + /* not supported by default */ + break; } - break; case Dali::Accessibility::TextBoundary::PARAGRAPH: { /* Paragraph is not supported by libunibreak library */ + break; } - break; default: break; } @@ -2112,87 +2132,90 @@ Dali::Accessibility::Range TextField::AccessibleImpl::GetTextAtOffset( return range; } -Dali::Accessibility::Range -TextField::AccessibleImpl::GetSelection(size_t selectionNum) +Dali::Accessibility::Range TextField::AccessibleImpl::GetRangeOfSelection(size_t selectionIndex) { // Since DALi supports only one selection indexes higher than 0 are ignored - if(selectionNum > 0) + if(selectionIndex > 0) + { return {}; + } - auto slf = Toolkit::TextField::DownCast(Self()); - auto ctrl = Dali::Toolkit::GetImpl(slf).getController(); - std::string ret; - ctrl->RetrieveSelection(ret); - auto r = ctrl->GetSelectionIndexes(); + auto self = Toolkit::TextField::DownCast(Self()); + auto controller = Dali::Toolkit::GetImpl(self).GetTextController(); + std::string value{}; + controller->RetrieveSelection(value); + auto indices = controller->GetSelectionIndexes(); - return {static_cast(r.first), static_cast(r.second), ret}; + return {static_cast(indices.first), static_cast(indices.second), value}; } -bool TextField::AccessibleImpl::RemoveSelection(size_t selectionNum) +bool TextField::AccessibleImpl::RemoveSelection(size_t selectionIndex) { // Since DALi supports only one selection indexes higher than 0 are ignored - if(selectionNum > 0) + if(selectionIndex > 0) + { return false; + } - auto slf = Toolkit::TextField::DownCast(Self()); - Dali::Toolkit::GetImpl(slf).getController()->SetSelection(0, 0); + auto self = Toolkit::TextField::DownCast(Self()); + Dali::Toolkit::GetImpl(self).GetTextController()->SetSelection(0, 0); return true; } -bool TextField::AccessibleImpl::SetSelection(size_t selectionNum, - size_t startOffset, - size_t endOffset) +bool TextField::AccessibleImpl::SetRangeOfSelection(size_t selectionIndex, size_t startOffset, size_t endOffset) { // Since DALi supports only one selection indexes higher than 0 are ignored - if(selectionNum > 0) + if(selectionIndex > 0) + { return false; + } - auto slf = Toolkit::TextField::DownCast(Self()); - Dali::Toolkit::GetImpl(slf).getController()->SetSelection(startOffset, - endOffset); + auto self = Toolkit::TextField::DownCast(Self()); + Dali::Toolkit::GetImpl(self).GetTextController()->SetSelection(startOffset, endOffset); return true; } -bool TextField::AccessibleImpl::CopyText(size_t startPosition, - size_t endPosition) +bool TextField::AccessibleImpl::CopyText(size_t startPosition, size_t endPosition) { if(endPosition <= startPosition) + { return false; + } - auto slf = Toolkit::TextField::DownCast(Self()); - auto txt = slf.GetProperty(Toolkit::TextField::Property::TEXT).Get(); - Dali::Toolkit::GetImpl(slf).getController()->CopyStringToClipboard(txt.substr(startPosition, endPosition - startPosition)); + auto self = Toolkit::TextField::DownCast(Self()); + auto text = self.GetProperty(Toolkit::TextField::Property::TEXT).Get(); + Dali::Toolkit::GetImpl(self).GetTextController()->CopyStringToClipboard(text.substr(startPosition, endPosition - startPosition)); return true; } -bool TextField::AccessibleImpl::CutText(size_t startPosition, - size_t endPosition) +bool TextField::AccessibleImpl::CutText(size_t startPosition, size_t endPosition) { if(endPosition <= startPosition) + { return false; + } - auto slf = Toolkit::TextField::DownCast(Self()); - auto txt = slf.GetProperty(Toolkit::TextField::Property::TEXT).Get(); - Dali::Toolkit::GetImpl(slf).getController()->CopyStringToClipboard(txt.substr(startPosition, endPosition - startPosition)); + auto self = Toolkit::TextField::DownCast(Self()); + auto text = self.GetProperty(Toolkit::TextField::Property::TEXT).Get(); + Dali::Toolkit::GetImpl(self).GetTextController()->CopyStringToClipboard(text.substr(startPosition, endPosition - startPosition)); - slf.SetProperty(Toolkit::TextField::Property::TEXT, - txt.substr(0, startPosition) + txt.substr(endPosition)); + self.SetProperty(Toolkit::TextField::Property::TEXT, text.substr(0, startPosition) + text.substr(endPosition)); return true; } -bool TextField::AccessibleImpl::DeleteText(size_t startPosition, - size_t endPosition) +bool TextField::AccessibleImpl::DeleteText(size_t startPosition, size_t endPosition) { if(endPosition <= startPosition) + { return false; + } - auto slf = Toolkit::TextField::DownCast(Self()); - auto txt = slf.GetProperty(Toolkit::TextField::Property::TEXT).Get(); + auto self = Toolkit::TextField::DownCast(Self()); + auto text = self.GetProperty(Toolkit::TextField::Property::TEXT).Get(); - slf.SetProperty(Toolkit::TextField::Property::TEXT, - txt.substr(0, startPosition) + txt.substr(endPosition)); + self.SetProperty(Toolkit::TextField::Property::TEXT, text.substr(0, startPosition) + text.substr(endPosition)); return true; } @@ -2207,7 +2230,7 @@ Dali::Accessibility::States TextField::AccessibleImpl::CalculateStates() states[State::FOCUSABLE] = true; Toolkit::Control focusControl = Toolkit::KeyInputFocusManager::Get().GetCurrentFocusControl(); - if(self == focusControl) + if(mSelf == focusControl) { states[State::FOCUSED] = true; } @@ -2215,23 +2238,22 @@ Dali::Accessibility::States TextField::AccessibleImpl::CalculateStates() return states; } -bool TextField::AccessibleImpl::InsertText(size_t startPosition, - std::string text) +bool TextField::AccessibleImpl::InsertText(size_t startPosition, std::string text) { - auto slf = Toolkit::TextField::DownCast(Self()); - auto txt = slf.GetProperty(Toolkit::TextField::Property::TEXT).Get(); + auto self = Toolkit::TextField::DownCast(Self()); + auto insertedText = self.GetProperty(Toolkit::TextField::Property::TEXT).Get(); - txt.insert(startPosition, text); + insertedText.insert(startPosition, text); - slf.SetProperty(Toolkit::TextField::Property::TEXT, std::move(txt)); + self.SetProperty(Toolkit::TextField::Property::TEXT, std::move(insertedText)); return true; } bool TextField::AccessibleImpl::SetTextContents(std::string newContents) { - auto slf = Toolkit::TextField::DownCast(Self()); - slf.SetProperty(Toolkit::TextField::Property::TEXT, std::move(newContents)); + auto self = Toolkit::TextField::DownCast(Self()); + self.SetProperty(Toolkit::TextField::Property::TEXT, std::move(newContents)); return true; } diff --git a/dali-toolkit/internal/controls/text-controls/text-field-impl.h b/dali-toolkit/internal/controls/text-controls/text-field-impl.h index ae73c30..349ac26 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.h @@ -90,6 +90,13 @@ public: static bool DoConnectSignal(BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor); /** + * @brief Gets text controller + * + * @return The text controller + */ + Text::ControllerPtr GetTextController(); + + /** * @copydoc TextField::TextChangedSignal() */ Toolkit::TextField::TextChangedSignalType& TextChangedSignal(); @@ -114,8 +121,6 @@ public: */ DevelTextField::InputFilteredSignalType& InputFilteredSignal(); - Text::ControllerPtr getController(); - private: // From Control /** * @copydoc Control::OnInitialize() @@ -202,9 +207,9 @@ private: // From Control void TextDeleted(unsigned int position, unsigned int length, const std::string& content) override; /** - * @copydoc Text::EditableControlInterface::CaretMoved() + * @copydoc Text::EditableControlInterface::CursorMoved() */ - void CaretMoved(unsigned int position) override; + void CursorMoved(unsigned int position) override; /** * @copydoc Text::EditableControlInterface::TextChanged() @@ -362,12 +367,6 @@ private: // Implementation // Connection needed to re-render text, when a Text Field returns to the scene. void OnSceneConnect(Dali::Actor actor); -public: // For UTC only - Text::ControllerPtr GetTextController() - { - return mController; - } - private: // Data // Signals Toolkit::TextField::TextChangedSignalType mTextChangedSignal; @@ -396,27 +395,89 @@ private: // Data bool mTextChanged : 1; ///< If true, emits TextChangedSignal in next OnRelayout(). protected: + /** + * @brief This structure is to connect TextField with Accessible functions. + */ struct AccessibleImpl : public DevelControl::AccessibleImpl, public virtual Dali::Accessibility::Text, public virtual Dali::Accessibility::EditableText { using DevelControl::AccessibleImpl::AccessibleImpl; - std::string GetName() override; - std::string GetText(size_t startOffset, size_t endOffset) override; - size_t GetCharacterCount() override; - size_t GetCaretOffset() override; - bool SetCaretOffset(size_t offset) override; - Accessibility::Range GetTextAtOffset(size_t offset, Accessibility::TextBoundary boundary) override; - Accessibility::Range GetSelection(size_t selectionNum) override; - bool RemoveSelection(size_t selectionNum) override; - bool SetSelection(size_t selectionNum, size_t startOffset, size_t endOffset) override; - bool CopyText(size_t startPosition, size_t endPosition) override; - bool CutText(size_t startPosition, size_t endPosition) override; + /** + * @copydoc Dali::Accessibility::Accessible::GetName() + */ + std::string GetName() override; + + /** + * @copydoc Dali::Accessibility::Text::GetText() + */ + std::string GetText(size_t startOffset, size_t endOffset) override; + + /** + * @copydoc Dali::Accessibility::Text::GetCharacterCount() + */ + size_t GetCharacterCount() override; + + /** + * @copydoc Dali::Accessibility::Text::GetCursorOffset() + */ + size_t GetCursorOffset() override; + + /** + * @copydoc Dali::Accessibility::Text::SetCursorOffset() + */ + bool SetCursorOffset(size_t offset) override; + + /** + * @copydoc Dali::Accessibility::Text::GetTextAtOffset() + */ + Accessibility::Range GetTextAtOffset(size_t offset, Accessibility::TextBoundary boundary) override; + + /** + * @copydoc Dali::Accessibility::Text::GetRangeOfSelection() + */ + Accessibility::Range GetRangeOfSelection(size_t selectionIndex) override; + + /** + * @copydoc Dali::Accessibility::Text::RemoveSelection() + */ + bool RemoveSelection(size_t selectionIndex) override; + + /** + * @copydoc Dali::Accessibility::Text::SetRangeOfSelection() + */ + bool SetRangeOfSelection(size_t selectionIndex, size_t startOffset, size_t endOffset) override; + + /** + * @copydoc Dali::Accessibility::EditableText::CopyText() + */ + bool CopyText(size_t startPosition, size_t endPosition) override; + + /** + * @copydoc Dali::Accessibility::EditableText::CutText() + */ + bool CutText(size_t startPosition, size_t endPosition) override; + + /** + * @copydoc Dali::Accessibility::Accessible::GetStates() + */ Accessibility::States CalculateStates() override; - bool InsertText(size_t startPosition, std::string text) override; - bool SetTextContents(std::string newContents) override; - bool DeleteText(size_t startPosition, size_t endPosition) override; + + /** + * @copydoc Dali::Accessibility::EditableText::InsertText() + */ + bool InsertText(size_t startPosition, std::string text) override; + + /** + * @copydoc Dali::Accessibility::EditableText::SetTextContents() + */ + bool SetTextContents(std::string newContents) override; + + /** + * @copydoc Dali::Accessibility::EditableText::DeleteText() + */ + bool DeleteText(size_t startPosition, size_t endPosition) override; }; }; diff --git a/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp index 52f9c29..e4ba0ad 100644 --- a/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp @@ -495,7 +495,7 @@ void TextLabel::SetProperty(BaseObject* object, Property::Index index, const Pro } } -Text::ControllerPtr TextLabel::getController() +Text::ControllerPtr TextLabel::GetTextController() { return mController; } @@ -1061,8 +1061,8 @@ TextLabel::~TextLabel() std::string TextLabel::AccessibleImpl::GetNameRaw() { - auto slf = Toolkit::TextLabel::DownCast(Self()); - return slf.GetProperty(Toolkit::TextLabel::Property::TEXT).Get(); + auto self = Toolkit::TextLabel::DownCast(Self()); + return self.GetProperty(Toolkit::TextLabel::Property::TEXT).Get(); } Property::Index TextLabel::AccessibleImpl::GetNamePropertyIndex() @@ -1070,47 +1070,47 @@ Property::Index TextLabel::AccessibleImpl::GetNamePropertyIndex() return Toolkit::TextLabel::Property::TEXT; } -std::string TextLabel::AccessibleImpl::GetText(size_t startOffset, - size_t endOffset) +std::string TextLabel::AccessibleImpl::GetText(size_t startOffset, size_t endOffset) { if(endOffset <= startOffset) + { return {}; + } - auto slf = Toolkit::TextLabel::DownCast(Self()); - auto txt = - slf.GetProperty(Toolkit::TextLabel::Property::TEXT).Get(); + auto self = Toolkit::TextLabel::DownCast(Self()); + auto text = self.GetProperty(Toolkit::TextLabel::Property::TEXT).Get(); - if(startOffset > txt.size() || endOffset > txt.size()) + if(startOffset > text.size() || endOffset > text.size()) + { return {}; + } - return txt.substr(startOffset, endOffset - startOffset); + return text.substr(startOffset, endOffset - startOffset); } size_t TextLabel::AccessibleImpl::GetCharacterCount() { - auto slf = Toolkit::TextLabel::DownCast(Self()); - auto txt = - slf.GetProperty(Toolkit::TextLabel::Property::TEXT).Get(); + auto self = Toolkit::TextLabel::DownCast(Self()); + auto text = self.GetProperty(Toolkit::TextLabel::Property::TEXT).Get(); - return txt.size(); + return text.size(); } -size_t TextLabel::AccessibleImpl::GetCaretOffset() +size_t TextLabel::AccessibleImpl::GetCursorOffset() { return {}; } -bool TextLabel::AccessibleImpl::SetCaretOffset(size_t offset) +bool TextLabel::AccessibleImpl::SetCursorOffset(size_t offset) { return {}; } -Dali::Accessibility::Range TextLabel::AccessibleImpl::GetTextAtOffset( - size_t offset, Dali::Accessibility::TextBoundary boundary) +Dali::Accessibility::Range TextLabel::AccessibleImpl::GetTextAtOffset(size_t offset, Dali::Accessibility::TextBoundary boundary) { - auto slf = Toolkit::TextLabel::DownCast(Self()); - auto txt = slf.GetProperty(Toolkit::TextLabel::Property::TEXT).Get(); - auto txt_size = txt.size(); + auto self = Toolkit::TextLabel::DownCast(Self()); + auto text = self.GetProperty(Toolkit::TextLabel::Property::TEXT).Get(); + auto textSize = text.size(); auto range = Dali::Accessibility::Range{}; @@ -1118,62 +1118,78 @@ Dali::Accessibility::Range TextLabel::AccessibleImpl::GetTextAtOffset( { case Dali::Accessibility::TextBoundary::CHARACTER: { - if(offset < txt_size) + if(offset < textSize) { - range.content = txt[offset]; + range.content = text[offset]; range.startOffset = offset; range.endOffset = offset + 1; } + break; } - break; case Dali::Accessibility::TextBoundary::WORD: case Dali::Accessibility::TextBoundary::LINE: { - auto txt_c_string = txt.c_str(); - auto breaks = std::vector(txt_size, 0); + auto textString = text.c_str(); + auto breaks = std::vector(textSize, 0); + if(boundary == Dali::Accessibility::TextBoundary::WORD) - Accessibility::Accessible::FindWordSeparationsUtf8((const utf8_t*)txt_c_string, txt_size, "", breaks.data()); + { + Accessibility::Accessible::FindWordSeparationsUtf8(reinterpret_cast(textString), textSize, "", breaks.data()); + } else - Accessibility::Accessible::FindLineSeparationsUtf8((const utf8_t*)txt_c_string, txt_size, "", breaks.data()); - auto index = 0u; + { + Accessibility::Accessible::FindLineSeparationsUtf8(reinterpret_cast(textString), textSize, "", breaks.data()); + } + + auto index = 0u; auto counter = 0u; - while(index < txt_size && counter <= offset) + while(index < textSize && counter <= offset) { auto start = index; if(breaks[index]) { while(breaks[index]) + { index++; + } counter++; } else { if(boundary == Dali::Accessibility::TextBoundary::WORD) + { index++; + } if(boundary == Dali::Accessibility::TextBoundary::LINE) + { counter++; + } } + if((counter > 0) && ((counter - 1) == offset)) { - range.content = txt.substr(start, index - start + 1); + range.content = text.substr(start, index - start + 1); range.startOffset = start; range.endOffset = index + 1; } + if(boundary == Dali::Accessibility::TextBoundary::LINE) + { index++; + } } + break; } - break; case Dali::Accessibility::TextBoundary::SENTENCE: { - /* not supported by efl */ + /* not supported by default */ + break; } - break; case Dali::Accessibility::TextBoundary::PARAGRAPH: { /* Paragraph is not supported by libunibreak library */ + break; } - break; default: break; } @@ -1181,44 +1197,46 @@ Dali::Accessibility::Range TextLabel::AccessibleImpl::GetTextAtOffset( return range; } -Dali::Accessibility::Range -TextLabel::AccessibleImpl::GetSelection(size_t selectionNum) +Dali::Accessibility::Range TextLabel::AccessibleImpl::GetRangeOfSelection(size_t selectionIndex) { // Since DALi supports only one selection indexes higher than 0 are ignored - if(selectionNum > 0) + if(selectionIndex > 0) + { return {}; + } - auto slf = Toolkit::TextLabel::DownCast(Self()); - auto ctrl = Dali::Toolkit::GetImpl(slf).getController(); - std::string ret; - ctrl->RetrieveSelection(ret); - auto r = ctrl->GetSelectionIndexes(); + auto self = Toolkit::TextLabel::DownCast(Self()); + auto controller = Dali::Toolkit::GetImpl(self).GetTextController(); + std::string value{}; + controller->RetrieveSelection(value); + auto indices = controller->GetSelectionIndexes(); - return {static_cast(r.first), static_cast(r.second), ret}; + return {static_cast(indices.first), static_cast(indices.second), value}; } -bool TextLabel::AccessibleImpl::RemoveSelection(size_t selectionNum) +bool TextLabel::AccessibleImpl::RemoveSelection(size_t selectionIndex) { // Since DALi supports only one selection indexes higher than 0 are ignored - if(selectionNum > 0) + if(selectionIndex > 0) + { return false; + } - auto slf = Toolkit::TextLabel::DownCast(Self()); - Dali::Toolkit::GetImpl(slf).getController()->SetSelection(0, 0); + auto self = Toolkit::TextLabel::DownCast(Self()); + Dali::Toolkit::GetImpl(self).GetTextController()->SetSelection(0, 0); return true; } -bool TextLabel::AccessibleImpl::SetSelection(size_t selectionNum, - size_t startOffset, - size_t endOffset) +bool TextLabel::AccessibleImpl::SetRangeOfSelection(size_t selectionIndex, size_t startOffset, size_t endOffset) { // Since DALi supports only one selection indexes higher than 0 are ignored - if(selectionNum > 0) + if(selectionIndex > 0) + { return false; + } - auto slf = Toolkit::TextLabel::DownCast(Self()); - Dali::Toolkit::GetImpl(slf).getController()->SetSelection(startOffset, - endOffset); + auto self = Toolkit::TextLabel::DownCast(Self()); + Dali::Toolkit::GetImpl(self).GetTextController()->SetSelection(startOffset, endOffset); return true; } diff --git a/dali-toolkit/internal/controls/text-controls/text-label-impl.h b/dali-toolkit/internal/controls/text-controls/text-label-impl.h index a204be6..01211c2 100644 --- a/dali-toolkit/internal/controls/text-controls/text-label-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.h @@ -86,7 +86,12 @@ public: */ static bool DoConnectSignal(BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor); - Text::ControllerPtr getController(); + /** + * @brief Gets text controller + * + * @return The text controller + */ + Text::ControllerPtr GetTextController(); private: // From Control /** @@ -190,21 +195,63 @@ private: // Data bool mTextUpdateNeeded : 1; protected: + /** + * @brief This structure is to connect TextLabel with Accessible functions. + */ struct AccessibleImpl : public DevelControl::AccessibleImpl, public virtual Dali::Accessibility::Text { using DevelControl::AccessibleImpl::AccessibleImpl; - std::string GetText(size_t startOffset, size_t endOffset) override; - size_t GetCharacterCount() override; - size_t GetCaretOffset() override; - bool SetCaretOffset(size_t offset) override; + /** + * @copydoc Dali::Accessibility::Text::GetText() + */ + std::string GetText(size_t startOffset, size_t endOffset) override; + + /** + * @copydoc Dali::Accessibility::Text::GetCharacterCount() + */ + size_t GetCharacterCount() override; + + /** + * @copydoc Dali::Accessibility::Text::GetCursorOffset() + */ + size_t GetCursorOffset() override; + + /** + * @copydoc Dali::Accessibility::Text::SetCursorOffset() + */ + bool SetCursorOffset(size_t offset) override; + + /** + * @copydoc Dali::Accessibility::Text::GetTextAtOffset() + */ Accessibility::Range GetTextAtOffset(size_t offset, Accessibility::TextBoundary boundary) override; - Accessibility::Range GetSelection(size_t selectionNum) override; - bool RemoveSelection(size_t selectionNum) override; - bool SetSelection(size_t selectionNum, size_t startOffset, size_t endOffset) override; - std::string GetNameRaw() override; - Property::Index GetNamePropertyIndex() override; + + /** + * @copydoc Dali::Accessibility::Text::GetRangeOfSelection() + */ + Accessibility::Range GetRangeOfSelection(size_t selectionIndex) override; + + /** + * @copydoc Dali::Accessibility::Text::RemoveSelection() + */ + bool RemoveSelection(size_t selectionIndex) override; + + /** + * @copydoc Dali::Accessibility::Text::SetRangeOfSelection() + */ + bool SetRangeOfSelection(size_t selectionIndex, size_t startOffset, size_t endOffset) override; + + /** + * @copydoc Dali::Accessibility::Text::GetNameRaw() + */ + std::string GetNameRaw() override; + + /** + * @copydoc Dali::Accessibility::Text::GetNamePropertyIndex() + */ + Property::Index GetNamePropertyIndex() override; }; }; diff --git a/dali-toolkit/internal/text/text-controller-impl-event-handler.cpp b/dali-toolkit/internal/text/text-controller-impl-event-handler.cpp index 29f6ba3..995a800 100644 --- a/dali-toolkit/internal/text/text-controller-impl-event-handler.cpp +++ b/dali-toolkit/internal/text/text-controller-impl-event-handler.cpp @@ -124,7 +124,7 @@ bool ControllerImplEventHandler::ProcessInputEvents(Controller::Impl& impl) if(nullptr != impl.mEditableControlInterface) { - impl.mEditableControlInterface->CaretMoved(eventData->mPrimaryCursorPosition); + impl.mEditableControlInterface->CursorMoved(eventData->mPrimaryCursorPosition); } if(eventData->mUpdateCursorHookPosition) diff --git a/dali-toolkit/internal/text/text-editable-control-interface.h b/dali-toolkit/internal/text/text-editable-control-interface.h index e128ac4..d62101e 100644 --- a/dali-toolkit/internal/text/text-editable-control-interface.h +++ b/dali-toolkit/internal/text/text-editable-control-interface.h @@ -56,11 +56,11 @@ public: /** * @brief Called to signal that caret (cursor position) has been moved. */ - virtual void CaretMoved(unsigned int position) = 0; + virtual void CursorMoved(unsigned int position) = 0; /** * @brief Called to signal that text has been inserted or deleted. - * + * * @param[in] immediate If true, it immediately emits the signal, if false, only emits once the signal when OnRelayout() is called next time. */ virtual void TextChanged(bool immediate) = 0; -- 2.7.4