DBUS_DEBUG( "registering interface %p (%d)", v, fallback ? 1 : 0 );
destructors.push_back([=]() {
DBUS_DEBUG( "unregistering interface %p", v );
+ {
+ std::lock_guard< std::mutex > lock( globalEntriesMutex );
+ globalEntries.erase( v );
+ }
eldbus_service_interface_unregister( v );
- std::lock_guard< std::mutex > lock( globalEntriesMutex );
- globalEntries.erase( v );
});
}
}
// Set the layout parameters.
textModel->mHorizontalAlignment = Text::HorizontalAlignment::BEGIN;
textModel->mIgnoreSpacesAfterText = true;
- textModel->mMatchSystemLanguageDirection = false;
Layout::Parameters layoutParameters( textArea,
textModel );
controller->SetTextElideEnabled( true );
// Disable match system language direction
- controller->SetMatchSystemLanguageDirection(false);
+ controller->SetMatchLayoutDirection(DevelText::MatchLayoutDirection::CONTENTS);
}
void ConfigureTextField( ControllerPtr controller )
controller->SetTextElideEnabled( false );
// Disable match system language direction
- controller->SetMatchSystemLanguageDirection(false);
+ controller->SetMatchLayoutDirection(DevelText::MatchLayoutDirection::CONTENTS);
}
void ConfigureTextEditor( ControllerPtr controller )
controller->SetTextElideEnabled( false );
// Disable match system language direction
- controller->SetMatchSystemLanguageDirection(false);
+ controller->SetMatchLayoutDirection(DevelText::MatchLayoutDirection::CONTENTS);
}
} // namespace Text
auto a = Dali::Accessibility::Accessible::Get( control );
auto a_component = dynamic_cast<Dali::Accessibility::Component*>( 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 );
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 );
Dali::Accessibility::TestEnableSC( false );
END_TEST;
-}
\ No newline at end of file
+}
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 );
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);
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 );
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);
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 );
END_TEST;
}
-int utcDaliAccessibilityTextEditorGetSetSelection(void)
+int utcDaliAccessibilityTextEditorGetSetRangeOfSelection(void)
{
ToolkitTestApplication application;
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 );
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 );
}
END_TEST;
}
-int utcDaliAccessibilityTextFieldGetSetSelection(void)
+int utcDaliAccessibilityTextFieldGetSetRangeOfSelection(void)
{
ToolkitTestApplication application;
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 );
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 );
}
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 );
}
/*
- * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
END_TEST;
}
+int UtcDaliTextControllerImfPreeditStyleReverse(void)
+{
+ tet_infoline(" UtcDaliTextControllerImfPreeditStyleReverse");
+ ToolkitTestApplication application;
+
+ // Creates a text controller.
+ ControllerPtr controller = Controller::New();
+
+ std::string text;
+ InputMethodContext::EventData imfEvent;
+
+ DALI_TEST_CHECK(controller);
+
+ // Configures the text controller similarly to the text-field.
+ ConfigureTextField(controller);
+
+ InputMethodContext inputMethodContext = InputMethodContext::New();
+
+ // Send PRE_EDIT event
+ imfEvent = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "Reverse", 0, 7);
+ controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
+
+ // For coverage, mEditableControlInterface is required.
+ // Creates a temporary text-field to use mEditableControlInterface.
+ TextField field = TextField::New();
+ Toolkit::Internal::TextField& fieldImpl = GetImpl(field);
+ ControllerPtr fieldController = fieldImpl.GetTextController();
+ Controller::Impl& fieldControllerImpl = Controller::Impl::GetImplementation(*fieldController.Get());
+ Controller::Impl& controllerImpl = Controller::Impl::GetImplementation(*controller.Get());
+
+ // For coverage, mEditableControlInterface is required.
+ controllerImpl.mEditableControlInterface = fieldControllerImpl.mEditableControlInterface;
+
+ // Set the preedit style as REVERSE
+ inputMethodContext.SetPreeditStyle(InputMethodContext::PreeditStyle::REVERSE);
+ controller->GetNaturalSize();
+
+ controller->GetText(text);
+ DALI_TEST_EQUALS("Reverse", text, TEST_LOCATION);
+
+ tet_result(TET_PASS);
+ END_TEST;
+}
+
int UtcDaliTextControllerTextPopupButtonTouched(void)
{
tet_infoline(" UtcDaliTextControllerTextPopupButtonTouched");
textModel->mHorizontalAlignment = Text::HorizontalAlignment::BEGIN;
textModel->mLineWrapMode = LineWrap::WORD;
textModel->mIgnoreSpacesAfterText = true;
- textModel->mMatchSystemLanguageDirection = false;
Layout::Parameters layoutParameters( data.textArea,
textModel );
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<GlyphRun> 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);
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 );
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 );
application.SendNotification();
application.Render();
- const ColorIndex* const colorIndicesBuffer2 = editorImpl.getController()->GetTextModel()->GetColorIndices();
+ const ColorIndex* const colorIndicesBuffer2 = editorImpl.GetTextController()->GetTextModel()->GetColorIndices();
DALI_TEST_CHECK( colorIndicesBuffer2 );
DALI_TEST_EQUALS( colorIndicesBuffer2[7], 0u, TEST_LOCATION);
END_TEST;
-}
\ No newline at end of file
+}
+
+int UtcDaliTextEditorControlBackgroundColor(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliTextEditorControlBackgroundColor\n");
+
+ TextEditor editor = TextEditor::New();
+ DALI_TEST_CHECK(editor);
+
+ Vector4 backgroundColor;
+
+ editor.SetProperty(TextEditor::Property::TEXT, "Background Color");
+ application.GetScene().Add(editor);
+ application.SendNotification();
+ application.Render();
+
+ Toolkit::Internal::TextEditor& editorImpl = GetImpl(editor);
+ ControllerPtr controller = editorImpl.GetTextController();
+ Controller::Impl& controllerImpl = Controller::Impl::GetImplementation(*controller.Get());
+
+ // Default color is transparent
+ controllerImpl.mEditableControlInterface->GetControlBackgroundColor(backgroundColor);
+ DALI_TEST_EQUALS(backgroundColor, Color::TRANSPARENT, TEST_LOCATION);
+
+ // Set background color to red
+ editor.SetBackgroundColor(Color::RED);
+ application.SendNotification();
+ application.Render();
+
+ // Should be red
+ controllerImpl.mEditableControlInterface->GetControlBackgroundColor(backgroundColor);
+ DALI_TEST_EQUALS(backgroundColor, Color::RED, TEST_LOCATION);
+
+ END_TEST;
+}
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<GlyphRun> 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);
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 );
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 );
application.SendNotification();
application.Render();
- const ColorIndex* const colorIndicesBuffer2 = fieldImpl.getController()->GetTextModel()->GetColorIndices();
+ const ColorIndex* const colorIndicesBuffer2 = fieldImpl.GetTextController()->GetTextModel()->GetColorIndices();
DALI_TEST_CHECK( colorIndicesBuffer2 );
DALI_TEST_EQUALS( colorIndicesBuffer2[7], 0u, TEST_LOCATION);
END_TEST;
-}
\ No newline at end of file
+}
+
+int UtcDaliTextFieldControlBackgroundColor(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliTextFieldControlBackgroundColor\n");
+
+ TextField field = TextField::New();
+ DALI_TEST_CHECK(field);
+
+ Vector4 backgroundColor;
+
+ field.SetProperty(TextField::Property::TEXT, "Background Color");
+ application.GetScene().Add(field);
+ application.SendNotification();
+ application.Render();
+
+ Toolkit::Internal::TextField& fieldImpl = GetImpl(field);
+ ControllerPtr controller = fieldImpl.GetTextController();
+ Controller::Impl& controllerImpl = Controller::Impl::GetImplementation(*controller.Get());
+
+ // Default color is transparent
+ controllerImpl.mEditableControlInterface->GetControlBackgroundColor(backgroundColor);
+ DALI_TEST_EQUALS(backgroundColor, Color::TRANSPARENT, TEST_LOCATION);
+
+ // Set background color to red
+ field.SetBackgroundColor(Color::RED);
+ application.SendNotification();
+ application.Render();
+
+ // Should be red
+ controllerImpl.mEditableControlInterface->GetControlBackgroundColor(backgroundColor);
+ DALI_TEST_EQUALS(backgroundColor, Color::RED, TEST_LOCATION);
+
+ END_TEST;
+}
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<GlyphRun> 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);
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 );
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 );
application.SendNotification();
application.Render();
- const ColorIndex* const colorIndicesBuffer2 = labelImpl.getController()->GetTextModel()->GetColorIndices();
+ const ColorIndex* const colorIndicesBuffer2 = labelImpl.GetTextController()->GetTextModel()->GetColorIndices();
DALI_TEST_CHECK( colorIndicesBuffer2 );
DALI_TEST_EQUALS( colorIndicesBuffer2[7], 0u, TEST_LOCATION);
END_TEST;
-}
\ No newline at end of file
+}
return true;
}
-std::vector<Dali::Graphics::UniformInfo> TestGraphicsReflection::GetSamplers() const
+const std::vector<Dali::Graphics::UniformInfo>& TestGraphicsReflection::GetSamplers() const
{
- return std::vector<Dali::Graphics::UniformInfo>{};
+ static std::vector<Dali::Graphics::UniformInfo> samplers{};
+ return samplers;
}
Graphics::ShaderLanguage TestGraphicsReflection::GetLanguage() const
public:
TestGraphicsReflection(TestGlAbstraction& gl, Property::Array& vertexFormats, const Graphics::ProgramCreateInfo& createInfo, std::vector<UniformData>& customUniforms);
- uint32_t GetVertexAttributeLocation(const std::string& name) const override;
- Dali::Graphics::VertexInputAttributeFormat GetVertexAttributeFormat(uint32_t location) const override;
- std::string GetVertexAttributeName(uint32_t location) const override;
- std::vector<uint32_t> GetVertexAttributeLocations() const override;
- uint32_t GetUniformBlockCount() const override;
- uint32_t GetUniformBlockBinding(uint32_t index) const override;
- uint32_t GetUniformBlockSize(uint32_t index) const override;
- bool GetUniformBlock(uint32_t index, Dali::Graphics::UniformBlockInfo& out) const override;
- std::vector<uint32_t> GetUniformBlockLocations() const override;
- std::string GetUniformBlockName(uint32_t blockIndex) const override;
- uint32_t GetUniformBlockMemberCount(uint32_t blockIndex) const override;
- std::string GetUniformBlockMemberName(uint32_t blockIndex, uint32_t memberLocation) const override;
- uint32_t GetUniformBlockMemberOffset(uint32_t blockIndex, uint32_t memberLocation) const override;
- bool GetNamedUniform(const std::string& name, Dali::Graphics::UniformInfo& out) const override;
- std::vector<Dali::Graphics::UniformInfo> GetSamplers() const override;
- Graphics::ShaderLanguage GetLanguage() const override;
+ uint32_t GetVertexAttributeLocation(const std::string& name) const override;
+ Dali::Graphics::VertexInputAttributeFormat GetVertexAttributeFormat(uint32_t location) const override;
+ std::string GetVertexAttributeName(uint32_t location) const override;
+ std::vector<uint32_t> GetVertexAttributeLocations() const override;
+ uint32_t GetUniformBlockCount() const override;
+ uint32_t GetUniformBlockBinding(uint32_t index) const override;
+ uint32_t GetUniformBlockSize(uint32_t index) const override;
+ bool GetUniformBlock(uint32_t index, Dali::Graphics::UniformBlockInfo& out) const override;
+ std::vector<uint32_t> GetUniformBlockLocations() const override;
+ std::string GetUniformBlockName(uint32_t blockIndex) const override;
+ uint32_t GetUniformBlockMemberCount(uint32_t blockIndex) const override;
+ std::string GetUniformBlockMemberName(uint32_t blockIndex, uint32_t memberLocation) const override;
+ uint32_t GetUniformBlockMemberOffset(uint32_t blockIndex, uint32_t memberLocation) const override;
+ bool GetNamedUniform(const std::string& name, Dali::Graphics::UniformInfo& out) const override;
+ const std::vector<Dali::Graphics::UniformInfo>& GetSamplers() const override;
+ Graphics::ShaderLanguage GetLanguage() const override;
public: // Test methods
void SetAttributes(std::vector<std::string> locations)
void SetProxyUri( const std::string& uri ) override
{
+ mockProxyUri = uri;
+ }
+
+ std::string GetProxyUri() const override
+ {
+ return mockProxyUri;
+ }
+
+ void SetProxyBypassRule(const std::string& proxy, const std::string& bypass) override
+ {
+ mockBypassRule = bypass;
+ }
+
+ std::string GetProxyBypassRule() const override
+ {
+ return mockBypassRule;
}
void SetDefaultProxyAuth( const std::string& username, const std::string& password ) override
void SetCertificateFilePath( const std::string& certificatePath ) override
{
+ mockCertificateFilePath = certificatePath;
+ }
+
+ std::string GetCertificateFilePath() const override
+ {
+ return mockCertificateFilePath;
}
void DeleteAllWebDatabase() override
void EnableCache( bool cacheEnabled ) override
{
+ mockCacheEnabled = cacheEnabled;
}
bool IsCacheEnabled() const override
{
- return true;
+ return mockCacheEnabled;
}
- std::string GetContextCertificateFile() const override
+ void SetAppId(const std::string& appID) override
{
- return "test";
}
- void SetContextAppId(const std::string& appID) override
- {
- }
-
- bool SetContextAppVersion(const std::string& appVersion) override
+ bool SetAppVersion(const std::string& appVersion) override
{
return true;
}
- void SetContextApplicationType(const Dali::WebEngineContext::ApplicationType applicationType) override
+ void SetApplicationType(const Dali::WebEngineContext::ApplicationType applicationType) override
{
}
- void SetContextTimeOffset(float timeOffset) override
+ void SetTimeOffset(float timeOffset) override
{
}
- void SetContextTimeZoneOffset(float timeZoneOffset, float daylightSavingTime) override
+ void SetTimeZoneOffset(float timeZoneOffset, float daylightSavingTime) override
{
}
void SetDefaultZoomFactor(float zoomFactor) override
{
+ mockZoomFactor = zoomFactor;
}
- float GetContextDefaultZoomFactor() const override
+ float GetDefaultZoomFactor() const override
{
- return 0;
+ return mockZoomFactor;
}
bool DeleteAllApplicationCache() override
{
}
- std::string GetContextProxy() const override
- {
- return "test";
- }
-
- void SetContextProxy(const std::string& proxy, const std::string& bypass) override
- {
- }
-
- std::string GetProxyBypassRule() const override
- {
- return "test";
- }
-
bool FreeUnusedMemory() override
{
return true;
private:
Dali::WebEngineContext::CacheModel mockModel;
+ std::string mockProxyUri;
+ std::string mockBypassRule;
+ std::string mockCertificateFilePath;
+ bool mockCacheEnabled;
+ float mockZoomFactor;
};
class MockWebEngineCookieManager : public Dali::WebEngineCookieManager
return result;
}
- Dali::Vector2 GetPosition() const override
- {
- return Dali::Vector2(100, 100);
- }
-
bool RemoveItem(WebEngineContextMenuItem& item) override
{
return true;
ConnectToGlobalSignal( &OnLoadUrl );
}
- const std::string& GetUrl() const
+ std::string GetUrl() const
{
return mUrl;
}
ConnectToGlobalSignal( &OnClearHistory );
}
- const std::string& GetUserAgent() const
+ std::string GetUserAgent() const
{
return mUserAgent;
}
return mHttpAuthHandlerSignal;
}
- Dali::WebEnginePlugin::WebEngineContextMenuCustomizedSignalType& ContextMenuCustomizedSignal()
+ Dali::WebEnginePlugin::WebEngineContextMenuShownSignalType& ContextMenuShownSignal()
{
- return mContextMenuCustomizedSignal;
+ return mContextMenuShownSignal;
}
- Dali::WebEnginePlugin::WebEngineContextMenuItemSelectedSignalType& ContextMenuItemSelectedSignal()
+ Dali::WebEnginePlugin::WebEngineContextMenuHiddenSignalType& ContextMenuHiddenSignal()
{
- return mContextMenuItemSelectedSignal;
+ return mContextMenuHiddenSignal;
}
std::string mUrl;
size_t mCurrentPlusOnePos;
std::string mUserAgent;
- Dali::WebEnginePlugin::WebEnginePageLoadSignalType mPageLoadStartedSignal;
- Dali::WebEnginePlugin::WebEnginePageLoadSignalType mPageLoadInProgressSignal;
- Dali::WebEnginePlugin::WebEnginePageLoadSignalType mPageLoadFinishedSignal;
- Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType mPageLoadErrorSignal;
- Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType mScrollEdgeReachedSignal;
- Dali::WebEnginePlugin::WebEngineUrlChangedSignalType mUrlChangedSignal;
- Dali::WebEnginePlugin::WebEngineFormRepostDecisionSignalType mFormRepostDecisionSignal;
- Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType mFrameRenderedSignal;
- Dali::WebEnginePlugin::WebEngineRequestInterceptorSignalType mRequestInterceptorSignal;
- Dali::WebEnginePlugin::WebEngineConsoleMessageSignalType mConsoleMessageSignal;
- Dali::WebEnginePlugin::WebEngineResponsePolicyDecisionSignalType mResponsePolicyDecisionSignal;
- Dali::WebEnginePlugin::WebEngineCertificateSignalType mCertificateConfirmSignal;
- Dali::WebEnginePlugin::WebEngineCertificateSignalType mSslCertificateChangedSignal;
- Dali::WebEnginePlugin::WebEngineHttpAuthHandlerSignalType mHttpAuthHandlerSignal;
- Dali::WebEnginePlugin::WebEngineContextMenuCustomizedSignalType mContextMenuCustomizedSignal;
- Dali::WebEnginePlugin::WebEngineContextMenuItemSelectedSignalType mContextMenuItemSelectedSignal;
+ Dali::WebEnginePlugin::WebEnginePageLoadSignalType mPageLoadStartedSignal;
+ Dali::WebEnginePlugin::WebEnginePageLoadSignalType mPageLoadInProgressSignal;
+ Dali::WebEnginePlugin::WebEnginePageLoadSignalType mPageLoadFinishedSignal;
+ Dali::WebEnginePlugin::WebEnginePageLoadErrorSignalType mPageLoadErrorSignal;
+ Dali::WebEnginePlugin::WebEngineScrollEdgeReachedSignalType mScrollEdgeReachedSignal;
+ Dali::WebEnginePlugin::WebEngineUrlChangedSignalType mUrlChangedSignal;
+ Dali::WebEnginePlugin::WebEngineFormRepostDecisionSignalType mFormRepostDecisionSignal;
+ Dali::WebEnginePlugin::WebEngineFrameRenderedSignalType mFrameRenderedSignal;
+ Dali::WebEnginePlugin::WebEngineRequestInterceptorSignalType mRequestInterceptorSignal;
+ Dali::WebEnginePlugin::WebEngineConsoleMessageSignalType mConsoleMessageSignal;
+ Dali::WebEnginePlugin::WebEngineResponsePolicyDecisionSignalType mResponsePolicyDecisionSignal;
+ Dali::WebEnginePlugin::WebEngineCertificateSignalType mCertificateConfirmSignal;
+ Dali::WebEnginePlugin::WebEngineCertificateSignalType mSslCertificateChangedSignal;
+ Dali::WebEnginePlugin::WebEngineHttpAuthHandlerSignalType mHttpAuthHandlerSignal;
+ Dali::WebEnginePlugin::WebEngineContextMenuShownSignalType mContextMenuShownSignal;
+ Dali::WebEnginePlugin::WebEngineContextMenuHiddenSignalType mContextMenuHiddenSignal;
bool mEvaluating;
float mPageZoomFactor;
gInstance->mHttpAuthHandlerSignal.Emit(std::move(handler));
std::shared_ptr<Dali::WebEngineContextMenu> menu(new MockWebEngineContextMenu());
- gInstance->mContextMenuCustomizedSignal.Emit(std::move(menu));
- std::shared_ptr<Dali::WebEngineContextMenuItem> item(new MockWebEngineContextMenuItem());
- gInstance->mContextMenuItemSelectedSignal.Emit(std::move(item));
+ gInstance->mContextMenuShownSignal.Emit(std::move(menu));
+ std::shared_ptr<Dali::WebEngineContextMenu> hiddenMenu(new MockWebEngineContextMenu());
+ gInstance->mContextMenuHiddenSignal.Emit(std::move(hiddenMenu));
}
return false;
}
return Internal::Adaptor::GetImplementation( *this ).GetFavicon();
}
-const std::string& WebEngine::GetUrl()
+std::string WebEngine::GetUrl() const
{
return Internal::Adaptor::GetImplementation( *this ).GetUrl();
}
Internal::Adaptor::GetImplementation( *this ).RegisterGeolocationPermissionCallback(callback);
}
-const std::string& WebEngine::GetUserAgent() const
+std::string WebEngine::GetUserAgent() const
{
return Internal::Adaptor::GetImplementation( *this ).GetUserAgent();
}
return Internal::Adaptor::GetImplementation(*this).HttpAuthHandlerSignal();
}
-Dali::WebEnginePlugin::WebEngineContextMenuCustomizedSignalType& WebEngine::ContextMenuCustomizedSignal()
+Dali::WebEnginePlugin::WebEngineContextMenuShownSignalType& WebEngine::ContextMenuShownSignal()
{
- return Internal::Adaptor::GetImplementation( *this ).ContextMenuCustomizedSignal();
+ return Internal::Adaptor::GetImplementation( *this ).ContextMenuShownSignal();
}
-Dali::WebEnginePlugin::WebEngineContextMenuItemSelectedSignalType& WebEngine::ContextMenuItemSelectedSignal()
+Dali::WebEnginePlugin::WebEngineContextMenuHiddenSignalType& WebEngine::ContextMenuHiddenSignal()
{
- return Internal::Adaptor::GetImplementation( *this ).ContextMenuItemSelectedSignal();
+ return Internal::Adaptor::GetImplementation( *this ).ContextMenuHiddenSignal();
}
} // namespace Dali;
static int gMimeOverriddenCallbackCalled = 0;
static std::vector<std::unique_ptr<Dali::WebEngineSecurityOrigin>> gSecurityOriginList;
static std::vector<std::unique_ptr<Dali::WebEngineContext::PasswordData>> gPasswordDataList;
-static int gContextMenuCustomizedCallbackCalled = 0;
-static std::shared_ptr<Dali::WebEngineContextMenu> gContextMenuInstance = nullptr;
-static int gContextMenuItemSelectedCallbackCalled = 0;
-static std::shared_ptr<Dali::WebEngineContextMenuItem> gContextMenuItemInstance = nullptr;
+static int gContextMenuShownCallbackCalled = 0;
+static std::shared_ptr<Dali::WebEngineContextMenu> gContextMenuShownInstance = nullptr;
+static int gContextMenuHiddenCallbackCalled = 0;
+static std::shared_ptr<Dali::WebEngineContextMenu> gContextMenuHiddenInstance = nullptr;
static int gHitTestCreatedCallbackCalled = 0;
static int gCookieManagerChangsWatchCallbackCalled = 0;
return false;
}
-static void OnContextMenuCustomized(WebView view, std::shared_ptr<Dali::WebEngineContextMenu> menu)
+static void OnContextMenuShown(WebView view, std::shared_ptr<Dali::WebEngineContextMenu> menu)
{
- gContextMenuCustomizedCallbackCalled++;
- gContextMenuInstance = std::move(menu);
+ gContextMenuShownCallbackCalled++;
+ gContextMenuShownInstance = std::move(menu);
}
-static void OnContextMenuItemSelected(WebView view, std::shared_ptr<Dali::WebEngineContextMenuItem> item)
+static void OnContextMenuHidden(WebView view, std::shared_ptr<Dali::WebEngineContextMenu> menu)
{
- gContextMenuItemSelectedCallbackCalled++;
- gContextMenuItemInstance = std::move(item);
+ gContextMenuHiddenCallbackCalled++;
+ gContextMenuHiddenInstance = std::move(menu);
}
} // namespace
END_TEST;
}
-int UtcDaliWebViewContextMenuCustomizedAndItemSelected(void)
+int UtcDaliWebViewContextMenuShownAndHidden(void)
{
ToolkitTestApplication application;
// load url.
ConnectionTracker* testTracker = new ConnectionTracker();
- view.ContextMenuCustomizedSignal().Connect( &OnContextMenuCustomized );
- view.ContextMenuItemSelectedSignal().Connect( &OnContextMenuItemSelected );
+ view.ContextMenuShownSignal().Connect( &OnContextMenuShown );
+ view.ContextMenuHiddenSignal().Connect( &OnContextMenuHidden );
bool signal1 = false;
bool signal2 = false;
- view.ConnectSignal( testTracker, "contextMenuCustomized", CallbackFunctor(&signal1) );
- view.ConnectSignal( testTracker, "contextMenuItemSelected", CallbackFunctor(&signal2) );
- DALI_TEST_EQUALS( gContextMenuCustomizedCallbackCalled, 0, TEST_LOCATION );
- DALI_TEST_EQUALS( gContextMenuItemSelectedCallbackCalled, 0, TEST_LOCATION );
- DALI_TEST_CHECK(gContextMenuInstance == 0);
- DALI_TEST_CHECK(gContextMenuItemInstance == 0);
+ view.ConnectSignal( testTracker, "contextMenuShown", CallbackFunctor(&signal1) );
+ view.ConnectSignal( testTracker, "contextMenuHidden", CallbackFunctor(&signal2) );
+ DALI_TEST_EQUALS( gContextMenuShownCallbackCalled, 0, TEST_LOCATION );
+ DALI_TEST_EQUALS( gContextMenuHiddenCallbackCalled, 0, TEST_LOCATION );
+ DALI_TEST_CHECK(gContextMenuShownInstance == 0);
+ DALI_TEST_CHECK(gContextMenuHiddenInstance == 0);
view.LoadUrl( TEST_URL1 );
Test::EmitGlobalTimerSignal();
- DALI_TEST_EQUALS( gContextMenuCustomizedCallbackCalled, 1, TEST_LOCATION );
- DALI_TEST_EQUALS( gContextMenuItemSelectedCallbackCalled, 1, TEST_LOCATION );
+ DALI_TEST_EQUALS( gContextMenuShownCallbackCalled, 1, TEST_LOCATION );
+ DALI_TEST_EQUALS( gContextMenuHiddenCallbackCalled, 1, TEST_LOCATION );
DALI_TEST_CHECK( signal1 );
DALI_TEST_CHECK( signal2 );
// check context meun & its items.
- DALI_TEST_CHECK(gContextMenuInstance != 0);
- std::unique_ptr<Dali::WebEngineContextMenuItem> item = gContextMenuInstance->GetItemAt(0);
+ DALI_TEST_CHECK(gContextMenuShownInstance != 0);
+ std::unique_ptr<Dali::WebEngineContextMenuItem> item = gContextMenuShownInstance->GetItemAt(0);
DALI_TEST_CHECK(item.get() != 0);
- std::vector<std::unique_ptr<Dali::WebEngineContextMenuItem>> itemList = gContextMenuInstance->GetItemList();
+ std::vector<std::unique_ptr<Dali::WebEngineContextMenuItem>> itemList = gContextMenuShownInstance->GetItemList();
DALI_TEST_CHECK(itemList.size() == 1);
- Dali::Vector2 testPosition = Dali::Vector2(100, 100);
- DALI_TEST_EQUALS(gContextMenuInstance->GetPosition(), testPosition, TEST_LOCATION);
- DALI_TEST_CHECK(gContextMenuInstance->RemoveItem(*(item.get())));
- DALI_TEST_CHECK(gContextMenuInstance->AppendItemAsAction(WebEngineContextMenuItem::ItemTag::NO_ACTION, "", false));
- DALI_TEST_CHECK(gContextMenuInstance->AppendItem(WebEngineContextMenuItem::ItemTag::NO_ACTION, "", "", false));
- DALI_TEST_CHECK(gContextMenuInstance->SelectItem(*(item.get())));
- DALI_TEST_CHECK(gContextMenuInstance->Hide());
-
- DALI_TEST_CHECK(gContextMenuItemInstance != 0);
+ DALI_TEST_CHECK(gContextMenuShownInstance->RemoveItem(*(item.get())));
+ DALI_TEST_CHECK(gContextMenuShownInstance->AppendItemAsAction(WebEngineContextMenuItem::ItemTag::NO_ACTION, "", false));
+ DALI_TEST_CHECK(gContextMenuShownInstance->AppendItem(WebEngineContextMenuItem::ItemTag::NO_ACTION, "", "", false));
+ DALI_TEST_CHECK(gContextMenuShownInstance->SelectItem(*(item.get())));
+ DALI_TEST_CHECK(gContextMenuShownInstance->Hide());
+
Dali::WebEngineContextMenuItem::ItemTag testItemTag = Dali::WebEngineContextMenuItem::ItemTag::NO_ACTION;
- DALI_TEST_EQUALS(gContextMenuItemInstance->GetTag(), testItemTag, TEST_LOCATION);
+ DALI_TEST_EQUALS(item->GetTag(), testItemTag, TEST_LOCATION);
Dali::WebEngineContextMenuItem::ItemType testItemType = Dali::WebEngineContextMenuItem::ItemType::ACTION;
- DALI_TEST_EQUALS(gContextMenuItemInstance->GetType(), testItemType, TEST_LOCATION);
- DALI_TEST_CHECK(gContextMenuItemInstance->IsEnabled());
+ DALI_TEST_EQUALS(item->GetType(), testItemType, TEST_LOCATION);
+ DALI_TEST_CHECK(item->IsEnabled());
std::string testLinkUrl("http://test.html");
- DALI_TEST_EQUALS(gContextMenuItemInstance->GetLinkUrl(), testLinkUrl, TEST_LOCATION);
+ DALI_TEST_EQUALS(item->GetLinkUrl(), testLinkUrl, TEST_LOCATION);
std::string testImageUrl("http://test.jpg");
- DALI_TEST_EQUALS(gContextMenuItemInstance->GetImageUrl(), testImageUrl, TEST_LOCATION);
+ DALI_TEST_EQUALS(item->GetImageUrl(), testImageUrl, TEST_LOCATION);
std::string testTitle("title");
- DALI_TEST_EQUALS(gContextMenuItemInstance->GetTitle(), testTitle, TEST_LOCATION);
- DALI_TEST_CHECK(gContextMenuItemInstance->GetParentMenu().get() == 0);
+ DALI_TEST_EQUALS(item->GetTitle(), testTitle, TEST_LOCATION);
+ DALI_TEST_CHECK(item->GetParentMenu().get() == 0);
+
+ DALI_TEST_CHECK(gContextMenuHiddenInstance != 0);
- gContextMenuInstance = nullptr;
- gContextMenuItemInstance = nullptr;
+ gContextMenuShownInstance = nullptr;
+ gContextMenuHiddenInstance = nullptr;
END_TEST;
}
std::string kDefaultValue;
// Reset something
- context->SetProxyUri( kDefaultValue );
- context->SetCertificateFilePath( kDefaultValue );
- context->EnableCache( true );
+ context->SetAppId( "id" );
+ context->SetApplicationType( Dali::WebEngineContext::ApplicationType::OTHER );
+ context->SetTimeOffset( 0 );
+ context->SetTimeZoneOffset( 0, 0 );
context->SetDefaultProxyAuth( kDefaultValue, kDefaultValue );
context->DeleteAllWebDatabase();
context->DeleteAllWebStorage();
context->DeleteLocalFileSystem();
context->ClearCache();
- context->SetContextAppId( "id" );
- context->SetContextApplicationType( Dali::WebEngineContext::ApplicationType::OTHER );
- context->SetContextTimeOffset( 0 );
- context->SetContextTimeZoneOffset( 0, 0 );
- context->SetDefaultZoomFactor( 0 );
context->DeleteAllFormPasswordData();
context->DeleteAllFormCandidateData();
DALI_TEST_CHECK( value == Dali::WebEngineContext::CacheModel::DOCUMENT_BROWSER );
// Get cache enabled
+ context->EnableCache( true );
DALI_TEST_CHECK( context->IsCacheEnabled() );
// Get certificate
- std::string str = context->GetContextCertificateFile();
+ context->SetCertificateFilePath( "test" );
+ std::string str = context->GetCertificateFilePath();
DALI_TEST_EQUALS( str, "test", TEST_LOCATION );
// Set version
- DALI_TEST_CHECK( context->SetContextAppVersion( "test" ) );
+ DALI_TEST_CHECK( context->SetAppVersion( "test" ) );
// Register
std::vector<std::string> temp;
context->RegisterJsPluginMimeTypes( temp );
context->DeleteFormPasswordDataList( temp );
- // Get zoom
- DALI_TEST_EQUALS( context->GetContextDefaultZoomFactor(), float( 0 ), TEST_LOCATION );
+ // Get zoom factor
+ context->SetDefaultZoomFactor( 1.0f );
+ DALI_TEST_EQUALS( context->GetDefaultZoomFactor(), float( 1.0f ), TEST_LOCATION );
// Delete cache and database
DALI_TEST_CHECK( context->DeleteAllApplicationCache() );
DALI_TEST_CHECK( context->DeleteAllWebIndexedDatabase() );
// Get contextProxy
- context->SetContextProxy("", "");
- DALI_TEST_EQUALS( context->GetContextProxy(), "test", TEST_LOCATION );
+ context->SetProxyUri( "test" );
+ DALI_TEST_EQUALS( context->GetProxyUri(), "test", TEST_LOCATION );
+ context->SetProxyBypassRule("", "test");
DALI_TEST_EQUALS( context->GetProxyBypassRule(), "test", TEST_LOCATION );
//Notify low memory
#include "accessible-impl.h"
// EXTERNAL INCLUDES
+#ifdef DGETTEXT_ENABLED
+#include <libintl.h>
+#endif
+
#include <dali/devel-api/actors/actor-devel.h>
// INTERNAL INCLUDES
#include <dali-toolkit/public-api/controls/image-view/image-view.h>
#include <dali-toolkit/public-api/focus-manager/keyboard-focus-manager.h>
-namespace Dali::Toolkit::DevelControl {
+namespace Dali::Toolkit::DevelControl
+{
+
+static std::string GetLocaleText(std::string string, const char *domain = "dali-toolkit")
+{
+#ifdef DGETTEXT_ENABLED
+ /*TODO: currently non-localized string is used as a key for translation lookup. In case the lookup key formatting is forced
+ consider calling utility function for converting non-localized string into well-formatted key before lookup. */
+ return dgettext(domain, string.c_str());
+#else
+ return string;
+#endif
+}
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())
Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control);
Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl);
+ std::string name;
if(!controlImpl.mAccessibilityGetNameSignal.Empty())
{
- std::string ret;
- controlImpl.mAccessibilityGetNameSignal.Emit(ret);
- return ret;
+ controlImpl.mAccessibilityGetNameSignal.Emit(name);
+ }
+ else if(controlImpl.mAccessibilityNameSet)
+ {
+ name = controlImpl.mAccessibilityName;
+ }
+ else if(auto raw = GetNameRaw(); !raw.empty())
+ {
+ name = raw;
+ }
+ else
+ {
+ name = Self().GetProperty<std::string>(Actor::Property::NAME);
}
- if(controlImpl.mAccessibilityNameSet)
- return controlImpl.mAccessibilityName;
-
- if(auto raw = GetNameRaw(); !raw.empty())
- return raw;
+ if(controlImpl.mAccessibilityTranslationDomainSet)
+ {
+ return GetLocaleText(name, controlImpl.mAccessibilityTranslationDomain.c_str());
+ }
- return Self().GetProperty<std::string>(Actor::Property::NAME);
+ return GetLocaleText(name);
}
std::string AccessibleImpl::GetNameRaw()
Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control);
Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl);
+ std::string description;
if(!controlImpl.mAccessibilityGetDescriptionSignal.Empty())
{
- std::string ret;
- controlImpl.mAccessibilityGetDescriptionSignal.Emit(ret);
- return ret;
+ controlImpl.mAccessibilityGetDescriptionSignal.Emit(description);
+ }
+ else if(controlImpl.mAccessibilityDescriptionSet)
+ {
+ description = controlImpl.mAccessibilityDescription;
+ }
+ else
+ {
+ description = GetDescriptionRaw();
+ }
+ if(controlImpl.mAccessibilityTranslationDomainSet)
+ {
+ return GetLocaleText(description, controlImpl.mAccessibilityTranslationDomain.c_str());
}
- if(controlImpl.mAccessibilityDescriptionSet)
- return controlImpl.mAccessibilityDescription;
-
- return GetDescriptionRaw();
+ return GetLocaleText(description);
}
std::string AccessibleImpl::GetDescriptionRaw()
{
- return "";
+ return {};
}
Dali::Accessibility::Accessible* AccessibleImpl::GetParent()
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<size_t>(-1);
return Self().GetProperty<Dali::Accessibility::Role>(Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE);
}
+std::string AccessibleImpl::GetLocalizedRoleName()
+{
+ return GetLocaleText(GetRoleName());
+}
+
Dali::Accessibility::States AccessibleImpl::CalculateStates()
{
Dali::Actor self = Self();
- Dali::Accessibility::States s;
- s[Dali::Accessibility::State::FOCUSABLE] = self.GetProperty<bool>(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<bool>(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<bool>();
- 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<bool>();
+ }
+
+ 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;
}
- s[Dali::Accessibility::State::SHOWING] = !self.GetProperty(Dali::DevelActor::Property::CULLED).Get<bool>() && self.GetCurrentProperty<bool>(Actor::Property::VISIBLE);
+ state[Dali::Accessibility::State::SHOWING] = !self.GetProperty(Dali::DevelActor::Property::CULLED).Get<bool>() && self.GetCurrentProperty<bool>(Actor::Property::VISIBLE);
- s[Dali::Accessibility::State::DEFUNCT] = !self.GetProperty(Dali::DevelActor::Property::CONNECTED_TO_SCENE).Get<bool>();
- return s;
+ state[Dali::Accessibility::State::DEFUNCT] = !self.GetProperty(Dali::DevelActor::Property::CONNECTED_TO_SCENE).Get<bool>();
+ return state;
}
Dali::Accessibility::States AccessibleImpl::GetStates()
Dali::Accessibility::Attributes AccessibleImpl::GetAttributes()
{
- std::unordered_map<std::string, std::string> 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<std::string, std::string> 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()
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>();
+
+ Vector2 screenPosition = self.GetProperty(Dali::DevelActor::Property::SCREEN_POSITION).Get<Vector2>();
auto size = self.GetCurrentProperty<Vector3>(Actor::Property::SIZE) * self.GetCurrentProperty<Vector3>(Actor::Property::WORLD_SCALE);
- bool positionUsesAnchorPoint =
- self.GetProperty(Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT)
- .Get<bool>();
- Vector3 anchorPointOffSet =
- size * (positionUsesAnchorPoint ? self.GetCurrentProperty<Vector3>(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<bool>();
+ Vector3 anchorPointOffSet = size * (positionUsesAnchorPoint ? self.GetCurrentProperty<Vector3>(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};
}
{
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", "");
+
+ DevelControl::AppendAccessibilityAttribute(actor, "highlight", std::string());
actor.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, false);
return actor;
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<Dali::Accessibility::Component*>(Internal::Control::Impl::GetAccessibilityObject(old));
- if(c)
- c->ClearHighlight();
+ auto oldHighlightObject = dynamic_cast<Dali::Accessibility::Component*>(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);
// 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);
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;
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");
std::string AccessibleImpl::GetLocalizedActionName(size_t index)
{
- // TODO: add localization
- return GetActionName(index);
+ return GetLocaleText(GetActionName(index));
}
std::string AccessibleImpl::GetActionDescription(size_t index)
{
- return "";
+ return {};
}
size_t AccessibleImpl::GetActionCount()
std::string AccessibleImpl::GetActionKeyBinding(size_t index)
{
- return "";
+ return {};
}
bool AccessibleImpl::DoAction(size_t index)
std::vector<Dali::Accessibility::Relation> 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<Accessibility::RelationType>(i), v[i]});
+ ret.emplace_back(Accessibility::Relation{static_cast<Accessibility::RelationType>(i), relation[i]});
}
return ret;
public virtual Dali::Accessibility::Action
{
protected:
- Dali::WeakHandle<Dali::Actor> self;
- Dali::WeakHandle<Dali::Actor> currentHighlightActor;
- bool modal = false, root = false;
+ Dali::WeakHandle<Dali::Actor> mSelf;
+ Dali::WeakHandle<Dali::Actor> 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.
Dali::Accessibility::Role GetRole() override;
/**
+ * @copydoc Dali::Accessibility::Accessible::GetLocalizedRoleName()
+ */
+ std::string GetLocalizedRoleName() override;
+
+ /**
* @copydoc Dali::Accessibility::Accessible::GetStates()
*/
Dali::Accessibility::States GetStates() override;
/**
* @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()
}
}
-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<Dali::Property::Array::SizeType>(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<Dali::Property::Array::SizeType>(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())
std::vector<std::vector<Accessibility::Address>> 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<std::unique_ptr<Dali::Accessibility::Accessible>(Dali::Actor)> constructor)
+void SetAccessibilityConstructor(Dali::Actor control, std::function<std::unique_ptr<Dali::Accessibility::Accessible>(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<Dali::Accessibility::Component*>(ac->GetAccessibilityObject());
- if(ptr)
- return ptr->ClearHighlight();
+ auto object = dynamic_cast<Dali::Accessibility::Component*>(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<Dali::Accessibility::Component*>(ac->GetAccessibilityObject());
- if(ptr)
- return ptr->GrabHighlight();
+ auto object = dynamic_cast<Dali::Accessibility::Component*>(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<Dali::Accessibility::Component*>(ac->GetAccessibilityObject());
- if(ptr)
- return ptr->GetStates();
+ auto object = dynamic_cast<Dali::Accessibility::Component*>(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);
}
}
*
* @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
/**
* @brief Modifies the default text alignment to match the direction of the system language.
* @details Name "matchSystemLanguageDirection", type (Property::BOOLEAN), Read/Write
- * @note The default value is false
+ * @note The default value is true
*/
MATCH_SYSTEM_LANGUAGE_DIRECTION,
/**
* @brief Modifies the default text alignment to match the direction of the system language.
* @details Name "matchSystemLanguageDirection", type (Property::BOOLEAN), Read/Write
- * @note The default value is false
+ * @note The default value is true
*/
MATCH_SYSTEM_LANGUAGE_DIRECTION = ELLIPSIS + 3,
/**
* @brief Modifies the default text alignment to match the direction of the system language.
* @details Name "matchSystemLanguageDirection", type (Property::BOLEAN), Read/Write
- * @note The default value is false
+ * @note The default value is true
*
* If MATCH_SYSTEM_LANGUAGE_DIRECTION property set true, the default text alignment to match the direction of the system language.
*
*
* | TextLabel::Property::MATCH_SYSTEM_LANGUAGE_DIRECTION |
* |-----------------------------------------------------------------------
- * | false (default) | true |
+ * | false | true (default) |
* |-----------------------------------|----------------------------------|
* | Hello world | Hello world |
- * | ﻡﺮﺤﺑﺍ. | ﻡﺮﺤﺑﺍ. |
+ * | ﻡﺮﺤﺑﺍ. | ﻡﺮﺤﺑﺍ. |
*
*/
MATCH_SYSTEM_LANGUAGE_DIRECTION,
* - fontSize: 10pt, fontSizeScale: 1.5
*/
FONT_SIZE_SCALE,
+
};
} // namespace Property
mWebEngineContext.SetProxyUri(uri);
}
+std::string WebContext::GetProxyUri() const
+{
+ return mWebEngineContext.GetProxyUri();
+}
+
+void WebContext::SetProxyBypassRule(const std::string& proxy, const std::string& bypass)
+{
+ mWebEngineContext.SetProxyBypassRule(proxy, bypass);
+}
+
+std::string WebContext::GetProxyBypassRule() const
+{
+ return mWebEngineContext.GetProxyBypassRule();
+}
+
void WebContext::SetCertificateFilePath(const std::string& certificatePath)
{
mWebEngineContext.SetCertificateFilePath(certificatePath);
}
+std::string WebContext::GetCertificateFilePath() const
+{
+ return mWebEngineContext.GetCertificateFilePath();
+}
+
void WebContext::SetDefaultProxyAuth(const std::string& username, const std::string& password)
{
mWebEngineContext.SetDefaultProxyAuth(username, password);
return mWebEngineContext.IsCacheEnabled();
}
-std::string WebContext::GetContextCertificateFile() const
+void WebContext::SetAppId(const std::string& appId)
{
- return mWebEngineContext.GetContextCertificateFile();
+ mWebEngineContext.SetAppId(appId);
}
-void WebContext::SetContextAppId(const std::string& appID)
+bool WebContext::SetAppVersion(const std::string& appVersion)
{
- mWebEngineContext.SetContextAppId(appID);
+ return mWebEngineContext.SetAppVersion(appVersion);
}
-bool WebContext::SetContextAppVersion(const std::string& appVersion)
+void WebContext::SetApplicationType(const Dali::WebEngineContext::ApplicationType applicationType)
{
- return mWebEngineContext.SetContextAppVersion(appVersion);
+ mWebEngineContext.SetApplicationType(applicationType);
}
-void WebContext::SetContextApplicationType(const Dali::WebEngineContext::ApplicationType applicationType)
+void WebContext::SetTimeOffset(float timeOffset)
{
- mWebEngineContext.SetContextApplicationType(applicationType);
+ mWebEngineContext.SetTimeOffset(timeOffset);
}
-void WebContext::SetContextTimeOffset(float timeOffset)
+void WebContext::SetTimeZoneOffset(float timeZoneOffset, float daylightSavingTime)
{
- mWebEngineContext.SetContextTimeOffset(timeOffset);
+ mWebEngineContext.SetTimeZoneOffset(timeZoneOffset, daylightSavingTime);
+}
+
+void WebContext::SetDefaultZoomFactor(float zoomFactor)
+{
+ mWebEngineContext.SetDefaultZoomFactor(zoomFactor);
}
-void WebContext::SetContextTimeZoneOffset(float timeZoneOffset, float daylightSavingTime)
+float WebContext::GetDefaultZoomFactor() const
{
- mWebEngineContext.SetContextTimeZoneOffset(timeZoneOffset, daylightSavingTime);
+ return mWebEngineContext.GetDefaultZoomFactor();
}
void WebContext::RegisterUrlSchemesAsCorsEnabled(const std::vector<std::string>& schemes)
mWebEngineContext.RegisterJsPluginMimeTypes(mimeTypes);
}
-void WebContext::SetDefaultZoomFactor(float zoomFactor)
-{
- mWebEngineContext.SetDefaultZoomFactor(zoomFactor);
-}
-
-float WebContext::GetContextDefaultZoomFactor() const
-{
- return mWebEngineContext.GetContextDefaultZoomFactor();
-}
-
bool WebContext::DeleteAllApplicationCache()
{
return mWebEngineContext.DeleteAllApplicationCache();
mWebEngineContext.DeleteAllFormCandidateData();
}
-std::string WebContext::GetContextProxy() const
-{
- return mWebEngineContext.GetContextProxy();
-}
-
-void WebContext::SetContextProxy(const std::string& proxy, const std::string& bypass)
-{
- mWebEngineContext.SetContextProxy(proxy, bypass);
-}
-
-std::string WebContext::GetProxyBypassRule() const
-{
- return mWebEngineContext.GetProxyBypassRule();
-}
-
bool WebContext::FreeUnusedMemory()
{
return mWebEngineContext.FreeUnusedMemory();
void SetProxyUri(const std::string& uri);
/**
+ * @brief Get the proxy URI from the network backend of specific context.
+ *
+ * @return current proxy URI or null string if it's not set
+ */
+ std::string GetProxyUri() const;
+
+ /**
+ * @brief Set the given proxy to network backend of specific context.
+ *
+ * @param[in] proxy URI to set
+ * @param[in] bypass rule to set
+ */
+ void SetProxyBypassRule(const std::string& proxy, const std::string& bypass);
+
+ /**
+ * @brief Get the proxy bypass rule from the network backend of specific context.
+ *
+ * @return current proxy bypass rule or null string if it's not set
+ */
+ std::string GetProxyBypassRule() const;
+
+ /**
* @brief Add CA certificates to persistent NSS certificate database
*
* Function accepts a path to a CA certificate file, a path to a directory
void SetCertificateFilePath(const std::string& certificatePath);
/**
+ * @brief Get CA certifcate file path
+ *
+ * It returns an internal string and should not be modified.
+ *
+ * @return certificate_file path which is set during ewk_context_certificate_file_set or null string otherwise
+ */
+ std::string GetCertificateFilePath() const;
+
+ /**
* @brief Set a proxy auth credential to network backend of specific context.
*
* @param[in] username username to set
/**
* @brief Query if the cache is enabled
*
- * @return @c true is cache is enabled or @c false otherwise
+ * @return true is cache is enabled or false otherwise
*/
bool IsCacheEnabled() const;
/**
- * @brief Get CA certifcate file path
- *
- * It returns an internal string and should not be modified.
+ * @brief Set application id for context.
*
- * @return @c certificate_file is path which is set during ewk_context_certificate_file_set or @c null string otherwise
+ * @param[in] appId application id
*/
- std::string GetContextCertificateFile() const;
+ void SetAppId(const std::string& appId);
/**
- * @brief Set application id for @a context.
- *
- * @param[in] appID application id
- */
- void SetContextAppId(const std::string& appID);
-
- /**
- * @brief Set application version for @a context.
+ * @brief Set application version for context.
*
* @param[in] appVersion application version
*
- * @return @c true if successful, @c false otherwise
+ * @return true if successful, false otherwise
*/
- bool SetContextAppVersion(const std::string& appVersion);
+ bool SetAppVersion(const std::string& appVersion);
/**
* @brief To declare application type
* @param[in] applicationType The Application_Type enum
*
*/
- void SetContextApplicationType(const Dali::WebEngineContext::ApplicationType applicationType);
+ void SetApplicationType(const Dali::WebEngineContext::ApplicationType applicationType);
/**
* @brief Set time offset
*
* @param[in] timeOffset The value will be added to system time as offset
*/
- void SetContextTimeOffset(float timeOffset);
+ void SetTimeOffset(float timeOffset);
/**
* @brief Set timezone offset
* @param[in] timeZoneOffset offset for time zone.
* @param[in] daylightSavingTime The value is for daylight saving time use.
*/
- void SetContextTimeZoneOffset(float timeZoneOffset, float daylightSavingTime);
+ void SetTimeZoneOffset(float timeZoneOffset, float daylightSavingTime);
/**
- * @brief Register url schemes as CORS enabled
- *
- * @param[in] schemes The URL schemes list which will be added to web security policy
+ * @brief Set default zoom factor
*
+ * @param[in] zoomFactor default zoom factor
*/
- void RegisterUrlSchemesAsCorsEnabled(const std::vector<std::string>& schemes);
+ void SetDefaultZoomFactor(float zoomFactor);
/**
- * @brief Register JS plugin mime types.
+ * @brief Get default zoom factor
*
- * @param[in] mimeTypes The MIME types will be checked by the renderer frame loader
- * to skip creating default frame for the object tags with the registered MIME type.
+ * Gets default zoom factor for all pages opened with this context.
+ *
+ * @return default zoom factor or negative value on error
*/
- void RegisterJsPluginMimeTypes(const std::vector<std::string>& mimeTypes);
+ float GetDefaultZoomFactor() const;
/**
- * @brief Set default zoom factor
+ * @brief Register url schemes as CORS enabled
+ *
+ * @param[in] schemes The URL schemes list which will be added to web security policy
*
- * @param[in] zoomFactor default zoom factor
*/
- void SetDefaultZoomFactor(float zoomFactor);
+ void RegisterUrlSchemesAsCorsEnabled(const std::vector<std::string>& schemes);
/**
- * @brief Get default zoom factor
- *
- * Gets default zoom factor for all pages opened with this context.
+ * @brief Register JS plugin mime types.
*
- * @return @c default zoom factor or negative value on error
+ * @param[in] mimeTypes The MIME types will be checked by the renderer frame loader
+ * to skip creating default frame for the object tags with the registered MIME type.
*/
- float GetContextDefaultZoomFactor() const;
+ void RegisterJsPluginMimeTypes(const std::vector<std::string>& mimeTypes);
/**
* @brief Request for deleting all web application caches.
void DeleteAllFormCandidateData();
/**
- * @brief Get the proxy URI from the network backend of specific context.
- *
- * @return current proxy URI or @c null string if it's not set
- */
- std::string GetContextProxy() const;
-
- /**
- * @brief Set the given proxy to network backend of specific context.
- *
- * @param[in] proxy URI to set
- * @param[in] bypass rule to set
- */
- void SetContextProxy(const std::string& proxy, const std::string& bypass);
-
- /**
- * @brief Get the proxy bypass rule from the network backend of specific context.
- *
- * @return current proxy bypass rule or @c null string if it's not set
- */
- std::string GetProxyBypassRule() const;
-
- /**
* @brief Notify low memory to free unused memory.
*
* @return @c true on success or @c false otherwise.
return Dali::Toolkit::GetImpl(*this).HttpAuthHandlerSignal();
}
-WebView::WebViewContextMenuCustomizedSignalType& WebView::ContextMenuCustomizedSignal()
+WebView::WebViewContextMenuShownSignalType& WebView::ContextMenuShownSignal()
{
- return Dali::Toolkit::GetImpl(*this).ContextMenuCustomizedSignal();
+ return Dali::Toolkit::GetImpl(*this).ContextMenuShownSignal();
}
-WebView::WebViewContextMenuItemSelectedSignalType& WebView::ContextMenuItemSelectedSignal()
+WebView::WebViewContextMenuHiddenSignalType& WebView::ContextMenuHiddenSignal()
{
- return Dali::Toolkit::GetImpl(*this).ContextMenuItemSelectedSignal();
+ return Dali::Toolkit::GetImpl(*this).ContextMenuHiddenSignal();
}
WebView::WebView(Internal::WebView& implementation)
class WebBackForwardList;
class WebContext;
class WebContextMenu;
-class WebContextMenuItem;
class WebCookieManager;
class WebFormRepostDecision;
class WebSettings;
using WebViewHttpAuthHandlerSignalType = Signal<void(WebView, std::shared_ptr<Dali::WebEngineHttpAuthHandler>)>;
/**
- * @brief WebView signal type related with context menu customized.
+ * @brief WebView signal type related with context menu shown.
*/
- using WebViewContextMenuCustomizedSignalType = Signal<void(WebView, std::shared_ptr<Dali::WebEngineContextMenu>)>;
+ using WebViewContextMenuShownSignalType = Signal<void(WebView, std::shared_ptr<Dali::WebEngineContextMenu>)>;
/**
- * @brief WebView signal type related with context menu item selected.
+ * @brief WebView signal type related with context menu hidden.
*/
- using WebViewContextMenuItemSelectedSignalType = Signal<void(WebView, std::shared_ptr<Dali::WebEngineContextMenuItem>)>;
+ using WebViewContextMenuHiddenSignalType = Signal<void(WebView, std::shared_ptr<Dali::WebEngineContextMenu>)>;
public:
/**
WebViewHttpAuthHandlerSignalType& HttpAuthHandlerSignal();
/**
- * @brief Connect to this signal to be notified when context menu would be customized.
+ * @brief Connect to this signal to be notified when context menu would be shown.
*
* @return A signal object to connect with.
*/
- WebViewContextMenuCustomizedSignalType& ContextMenuCustomizedSignal();
+ WebViewContextMenuShownSignalType& ContextMenuShownSignal();
/**
- * @brief Connect to this signal to be notified when context menu item is selected.
+ * @brief Connect to this signal to be notified when context menu would be hidden.
*
* @return A signal object to connect with.
*/
- WebViewContextMenuItemSelectedSignalType& ContextMenuItemSelectedSignal();
+ WebViewContextMenuHiddenSignalType& ContextMenuHiddenSignal();
public: // Not intended for application developers
/// @cond internal
} // namespace LineWrap
+/**
+ * A enum for defining text layout directions.
+ * It can also be inherited (from a parent) or deduced from the default language script of a locale.
+ * And it can be the direction of the text ifself.
+ */
+enum class MatchLayoutDirection
+{
+ INHERIT, // The text layout direction is inherited. If you change the layout direction, it will be aligned with the changed layout direction.
+ LOCALE, // The text layout direction is determined by the locale of the system language.
+ CONTENTS // The text layout direction is determined by the text itself.
+};
+
} // namespace DevelText
} // namespace Toolkit
// Resize the vector of positions to have the same size than the vector of glyphs.
rendererParameters.positions.Resize(numberOfGlyphs);
- textModel->mLineWrapMode = Text::LineWrap::WORD;
- textModel->mIgnoreSpacesAfterText = false;
- textModel->mMatchSystemLanguageDirection = false;
+ textModel->mLineWrapMode = Text::LineWrap::WORD;
+ textModel->mIgnoreSpacesAfterText = false;
Text::Layout::Parameters layoutParameters(internalDataModel.textLayoutArea,
textModel);
Property::Map labelMap = Self().GetProperty<Property::Map>(label);
if(MapContainsTextString(labelMap))
+ {
return label;
+ }
else
+ {
return Property::INVALID_INDEX;
+ }
}
Dali::Accessibility::States Button::AccessibleImpl::CalculateStates()
Dali::Accessibility::States CheckBoxButton::AccessibleImpl::CalculateStates()
{
- auto tmp = Button::AccessibleImpl::CalculateStates();
- auto slf = Toolkit::Button::DownCast(Self());
- if(slf.GetProperty<bool>(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<bool>(Toolkit::Button::Property::SELECTED))
+ {
+ state[Dali::Accessibility::State::CHECKED] = true;
+ }
+ return state;
}
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);
}
}
Dali::Accessibility::States PushButton::AccessibleImpl::CalculateStates()
{
- auto tmp = Button::AccessibleImpl::CalculateStates();
- auto slf = Toolkit::Button::DownCast(Self());
- tmp[Dali::Accessibility::State::PRESSED] = slf.GetProperty<bool>(Toolkit::Button::Property::SELECTED);
- return tmp;
+ auto state = Button::AccessibleImpl::CalculateStates();
+ auto self = Toolkit::Button::DownCast(Self());
+ state[Dali::Accessibility::State::PRESSED] = self.GetProperty<bool>(Toolkit::Button::Property::SELECTED);
+ return state;
}
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<bool>(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);
}
}
}
}
}
}
+
// 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<bool>(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<bool>(Toolkit::Button::Property::SELECTED))
+ {
+ state[Dali::Accessibility::State::CHECKED] = true;
+ }
+
+ state[Dali::Accessibility::State::SELECTABLE] = true;
+ return state;
}
} // namespace Internal
auto states = Button::AccessibleImpl::CalculateStates();
auto button = Toolkit::ToggleButton::DownCast(Self());
if(button.GetProperty<int>(Toolkit::ToggleButton::Property::CURRENT_STATE_INDEX))
+ {
states[Dali::Accessibility::State::CHECKED] = true;
+ }
return states;
}
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);
}
}
new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::IMAGE));
});
- Self().SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
-
Adaptor::Get().RegisterProcessor(*this);
}
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
{
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)
return Control::Impl::GetAccessibilityObject(actor);
});
- accessibilityConstructor = [](Dali::Actor actor) -> std::unique_ptr<Dali::Accessibility::Accessible> {
- return std::unique_ptr<Dali::Accessibility::Accessible>(new DevelControl::AccessibleImpl(actor,
- Dali::Accessibility::Role::UNKNOWN));
+ mAccessibilityConstructor = [](Dali::Actor actor) -> std::unique_ptr<Dali::Accessibility::Accessible> {
+ return std::unique_ptr<Dali::Accessibility::Accessible>(new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::UNKNOWN));
};
- size_t len = static_cast<size_t>(Dali::Accessibility::RelationType::MAX_COUNT);
- mAccessibilityRelations.reserve(len);
- for(auto i = 0u; i < len; ++i)
+ size_t length = static_cast<size_t>(Dali::Accessibility::RelationType::MAX_COUNT);
+ mAccessibilityRelations.reserve(length);
+ for(auto i = 0u; i < length; ++i)
{
mAccessibilityRelations.push_back({});
}
}
}
-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);
}
}
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;
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();
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;
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;
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()
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;
Dali::Accessibility::ReadingInfoTypes Control::Impl::GetAccessibilityReadingInfoType() const
{
- std::string value;
+ std::string value{};
auto place = mAccessibilityAttributes.Find(READING_INFO_TYPE_ATTRIBUTE_NAME);
if(place)
{
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<Internal::Control*>(&q.GetImplementation());
- return q2->mImpl->GetAccessibilityObject();
+ auto controlImpl = static_cast<Internal::Control*>(&control.GetImplementation());
+ return controlImpl->mImpl->GetAccessibilityObject();
}
}
return nullptr;
* 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
*/
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.
Toolkit::Control::KeyInputFocusSignalType mKeyInputFocusLostSignal;
Toolkit::Control::ResourceReadySignalType mResourceReadySignal;
DevelControl::VisualEventSignalType mVisualEventSignal;
+
+ // Accessibility
Toolkit::DevelControl::AccessibilityActivateSignalType mAccessibilityActivateSignal;
Toolkit::DevelControl::AccessibilityReadingSkippedSignalType mAccessibilityReadingSkippedSignal;
Toolkit::DevelControl::AccessibilityReadingPausedSignalType mAccessibilityReadingPausedSignal;
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;
Dali::Accessibility::Role mAccessibilityRole = Dali::Accessibility::Role::UNKNOWN;
- std::vector<std::vector<Accessibility::Address>> mAccessibilityRelations;
+ std::vector<std::vector<Accessibility::Address>> mAccessibilityRelations;
+ std::function<std::unique_ptr<Dali::Accessibility::Accessible>(Actor)> mAccessibilityConstructor;
+ std::unique_ptr<Dali::Accessibility::Accessible> mAccessibilityObject;
// Gesture Detection
PinchGestureDetector mPinchGestureDetector;
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<std::unique_ptr<Dali::Accessibility::Accessible>(Actor)> accessibilityConstructor;
- std::unique_ptr<Dali::Accessibility::Accessible> accessibilityObject;
};
} // namespace Internal
double ProgressBar::AccessibleImpl::GetCurrent()
{
- auto p = Toolkit::ProgressBar::DownCast(Self());
- return p.GetProperty(Toolkit::ProgressBar::Property::PROGRESS_VALUE)
- .Get<float>();
+ auto self = Toolkit::ProgressBar::DownCast(Self());
+ return self.GetProperty(Toolkit::ProgressBar::Property::PROGRESS_VALUE).Get<float>();
}
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<float>(current));
+ }
+
+ auto self = Toolkit::ProgressBar::DownCast(Self());
+ self.SetProperty(Toolkit::ProgressBar::Property::PROGRESS_VALUE, static_cast<float>(current));
return true;
}
double ScrollBar::AccessibleImpl::GetMinimum()
{
- auto p = Toolkit::ScrollBar::DownCast(Self());
- Handle scrollableHandle = GetImpl(p).mScrollableObject.GetHandle();
- return scrollableHandle ? scrollableHandle.GetCurrentProperty<float>(GetImpl(p).mPropertyMinScrollPosition) : 0.0f;
+ auto self = Toolkit::ScrollBar::DownCast(Self());
+ Handle scrollableHandle = GetImpl(self).mScrollableObject.GetHandle();
+ return scrollableHandle ? scrollableHandle.GetCurrentProperty<float>(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<float>(GetImpl(p).mPropertyScrollPosition) : 0.0f;
+ auto self = Toolkit::ScrollBar::DownCast(Self());
+ Handle scrollableHandle = GetImpl(self).mScrollableObject.GetHandle();
+ return scrollableHandle ? scrollableHandle.GetCurrentProperty<float>(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<float>(GetImpl(p).mPropertyMaxScrollPosition) : 1.0f;
+ auto self = Toolkit::ScrollBar::DownCast(Self());
+ Handle scrollableHandle = GetImpl(self).mScrollableObject.GetHandle();
+ return scrollableHandle ? scrollableHandle.GetCurrentProperty<float>(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<float>(current));
+ }
- auto value_after = GetCurrent();
+ scrollableHandle.SetProperty(GetImpl(self).mPropertyScrollPosition, static_cast<float>(current));
- if((current != value_before) && (value_before == value_after))
+ auto valueAfter = GetCurrent();
+
+ if((current != valueBefore) && (valueBefore == valueAfter))
+ {
return false;
+ }
return true;
}
double Slider::AccessibleImpl::GetMinimum()
{
- auto p = Toolkit::Slider::DownCast(Self());
- return p.GetProperty(Toolkit::Slider::Property::LOWER_BOUND).Get<float>();
+ auto self = Toolkit::Slider::DownCast(Self());
+ return self.GetProperty(Toolkit::Slider::Property::LOWER_BOUND).Get<float>();
}
double Slider::AccessibleImpl::GetCurrent()
{
- auto p = Toolkit::Slider::DownCast(Self());
- return p.GetProperty(Toolkit::Slider::Property::VALUE).Get<float>();
+ auto self = Toolkit::Slider::DownCast(Self());
+ return self.GetProperty(Toolkit::Slider::Property::VALUE).Get<float>();
}
double Slider::AccessibleImpl::GetMaximum()
{
- auto p = Toolkit::Slider::DownCast(Self());
- return p.GetProperty(Toolkit::Slider::Property::UPPER_BOUND).Get<float>();
+ auto self = Toolkit::Slider::DownCast(Self());
+ return self.GetProperty(Toolkit::Slider::Property::UPPER_BOUND).Get<float>();
}
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<float>(Toolkit::Slider::Property::VALUE);
+ const float prev = self.GetProperty<float>(Toolkit::Slider::Property::VALUE);
float next = static_cast<float>(current);
if(fabsf(next - prev) < Math::MACHINE_EPSILON_0)
{
// do nothing
}
- else if(p.GetProperty<bool>(Toolkit::Slider::Property::SNAP_TO_MARKS))
+ else if(self.GetProperty<bool>(Toolkit::Slider::Property::SNAP_TO_MARKS))
{
- auto marks = p.GetProperty<Property::Array>(Toolkit::Slider::Property::MARKS);
+ auto marks = self.GetProperty<Property::Array>(Toolkit::Slider::Property::MARKS);
int prevIdx;
if(impl.MarkReached(impl.MapValuePercentage(prev), prevIdx))
nextIdx += (next > prev) ? 1 : -1;
if(nextIdx < 0 || nextIdx >= static_cast<int>(marks.Count()))
+ {
return false;
+ }
next = marks[nextIdx].Get<float>();
}
double Slider::AccessibleImpl::GetMinimumIncrement()
{
- auto p = Toolkit::Slider::DownCast(Self());
+ auto self = Toolkit::Slider::DownCast(Self());
- bool hasMarks = !p.GetProperty<Property::Array>(Toolkit::Slider::Property::MARKS).Empty();
- float tolerance = p.GetProperty<float>(Toolkit::Slider::Property::MARK_TOLERANCE);
+ bool hasMarks = !self.GetProperty<Property::Array>(Toolkit::Slider::Property::MARKS).Empty();
+ float tolerance = self.GetProperty<float>(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());
}
// EXTERNAL INCLUDES
#include <dali/devel-api/actors/actor-devel.h>
-#include <dali/devel-api/adaptor-framework/window-devel.h>
#include <dali/devel-api/common/stage.h>
#include <dali/devel-api/object/property-helper-devel.h>
#include <dali/integration-api/adaptor-framework/adaptor.h>
}
case Toolkit::DevelTextEditor::Property::MATCH_SYSTEM_LANGUAGE_DIRECTION:
{
- impl.mController->SetMatchSystemLanguageDirection(value.Get<bool>());
+ impl.mController->SetMatchLayoutDirection(value.Get<bool>() ? DevelText::MatchLayoutDirection::LOCALE : DevelText::MatchLayoutDirection::CONTENTS);
break;
}
case Toolkit::DevelTextEditor::Property::MAX_LENGTH:
}
case Toolkit::DevelTextEditor::Property::MATCH_SYSTEM_LANGUAGE_DIRECTION:
{
- value = impl.mController->IsMatchSystemLanguageDirection();
+ value = impl.mController->GetMatchLayoutDirection() != DevelText::MatchLayoutDirection::CONTENTS;
break;
}
case Toolkit::DevelTextEditor::Property::MAX_LENGTH:
return mInputFilteredSignal;
}
-Text::ControllerPtr TextEditor::getController()
+Text::ControllerPtr TextEditor::GetTextController()
{
return mController;
}
Dali::LayoutDirection::Type layoutDirection = static_cast<Dali::LayoutDirection::Type>(stage.GetRootLayer().GetProperty(Dali::Actor::Property::LAYOUT_DIRECTION).Get<int>());
mController->SetLayoutDirection(layoutDirection);
+ self.LayoutDirectionChangedSignal().Connect(this, &TextEditor::OnLayoutDirectionChanged);
+
// Forward input events to controller
EnableGestureDetection(static_cast<GestureType::Value>(GestureType::TAP | GestureType::PAN | GestureType::LONG_PRESS));
GetTapGestureDetector().SetMaximumTapsRequired(2);
Vector2 contentSize(size.x - (padding.start + padding.end), size.y - (padding.top + padding.bottom));
// Support Right-To-Left of padding
- Dali::LayoutDirection::Type layoutDirection;
- if(mController->IsMatchSystemLanguageDirection())
- {
- layoutDirection = static_cast<Dali::LayoutDirection::Type>(DevelWindow::Get(self).GetRootLayer().GetProperty(Dali::Actor::Property::LAYOUT_DIRECTION).Get<int>());
- }
- else
- {
- layoutDirection = static_cast<Dali::LayoutDirection::Type>(self.GetProperty(Dali::Actor::Property::LAYOUT_DIRECTION).Get<int>());
- }
+ Dali::LayoutDirection::Type layoutDirection = mController->GetLayoutDirection(self);
+
if(Dali::LayoutDirection::RIGHT_TO_LEFT == layoutDirection)
{
std::swap(padding.start, padding.end);
}
}
-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);
}
}
return range;
}
+void TextEditor::GetControlBackgroundColor(Vector4& color) const
+{
+ Property::Value propValue = Self().GetProperty(Toolkit::Control::Property::BACKGROUND);
+ Property::Map* resultMap = propValue.GetMap();
+
+ Property::Value* colorValue = nullptr;
+ if(resultMap && (colorValue = resultMap->Find(ColorVisual::Property::MIX_COLOR)))
+ {
+ colorValue->Get(color);
+ }
+}
+
void TextEditor::UpdateScrollBar()
{
using namespace Dali;
}
}
+void TextEditor::OnLayoutDirectionChanged(Actor actor, LayoutDirection::Type type)
+{
+ mController->ChangedLayoutDirection();
+}
+
TextEditor::TextEditor()
: Control(ControlBehaviour(CONTROL_BEHAVIOUR_DEFAULT)),
mAnimationPeriod(0.0f, 0.0f),
std::string TextEditor::AccessibleImpl::GetName()
{
- auto slf = Toolkit::TextEditor::DownCast(Self());
- return slf.GetProperty(Toolkit::TextEditor::Property::TEXT)
- .Get<std::string>();
+ auto self = Toolkit::TextEditor::DownCast(Self());
+ return self.GetProperty(Toolkit::TextEditor::Property::TEXT).Get<std::string>();
}
-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<std::string>();
+ auto self = Toolkit::TextEditor::DownCast(Self());
+ auto text = self.GetProperty(Toolkit::TextEditor::Property::TEXT).Get<std::string>();
- 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<std::string>();
+ auto self = Toolkit::TextEditor::DownCast(Self());
+ auto text = self.GetProperty(Toolkit::TextEditor::Property::TEXT).Get<std::string>();
- 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<std::string>();
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<std::string>();
- auto txt_size = txt.size();
+ auto self = Toolkit::TextEditor::DownCast(Self());
+ auto text = self.GetProperty(Toolkit::TextEditor::Property::TEXT).Get<std::string>();
+ auto textSize = text.size();
auto range = Dali::Accessibility::Range{};
{
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<char>(txt_size, 0);
+ auto textString = text.c_str();
+ auto breaks = std::vector<char>(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<const utf8_t*>(textString), textSize, "", breaks.data());
+ }
else
- Accessibility::Accessible::FindLineSeparationsUtf8((const utf8_t*)txt_c_string, txt_size, "", breaks.data());
+ {
+ Accessibility::Accessible::FindLineSeparationsUtf8(reinterpret_cast<const utf8_t*>(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;
}
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<size_t>(r.first), static_cast<size_t>(r.second), ret};
+ return {static_cast<size_t>(indices.first), static_cast<size_t>(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<std::string>();
- 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<std::string>();
+ 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<std::string>();
- 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<std::string>();
+ 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<std::string>();
+ auto self = Toolkit::TextEditor::DownCast(Self());
+ auto text = self.GetProperty(Toolkit::TextEditor::Property::TEXT).Get<std::string>();
- 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;
}
{
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;
}
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<std::string>();
+ auto self = Toolkit::TextEditor::DownCast(Self());
+ auto insertedText = self.GetProperty(Toolkit::TextEditor::Property::TEXT).Get<std::string>();
- 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;
}
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();
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()
*/
void InputFiltered(Toolkit::InputFilter::Property::Type type) override;
+ /**
+ * @copydoc Text::EditableControlInterface::GetControlBackgroundColor()
+ */
+ void GetControlBackgroundColor(Vector4& color) const override;
+
// From SelectableControlInterface
public:
/**
*/
void AnchorClicked(const std::string& href) override;
- Text::ControllerPtr getController();
-
private: // Implementation
/**
* @copydoc Dali::Toolkit::Text::Controller::(InputMethodContext& inputMethodContext, const InputMethodContext::EventData& inputMethodContextEvent)
void OnScrollIndicatorAnimationFinished(Animation& animation);
/**
+ * @brief Callback function for when the layout is changed.
+ * @param[in] actor The actor whose layoutDirection is changed.
+ * @param[in] type The layoutDirection.
+ */
+ void OnLayoutDirectionChanged(Actor actor, LayoutDirection::Type type);
+
+ /**
* Construct a new TextEditor.
*/
TextEditor();
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;
};
};
// EXTERNAL INCLUDES
#include <dali/devel-api/actors/actor-devel.h>
#include <dali/devel-api/adaptor-framework/key-devel.h>
-#include <dali/devel-api/adaptor-framework/window-devel.h>
#include <dali/devel-api/common/stage.h>
#include <dali/devel-api/object/property-helper-devel.h>
#include <dali/integration-api/debug.h>
}
case Toolkit::DevelTextField::Property::MATCH_SYSTEM_LANGUAGE_DIRECTION:
{
- impl.mController->SetMatchSystemLanguageDirection(value.Get<bool>());
+ impl.mController->SetMatchLayoutDirection(value.Get<bool>() ? DevelText::MatchLayoutDirection::LOCALE : DevelText::MatchLayoutDirection::CONTENTS);
break;
}
case Toolkit::DevelTextField::Property::ENABLE_GRAB_HANDLE_POPUP:
}
case Toolkit::DevelTextField::Property::MATCH_SYSTEM_LANGUAGE_DIRECTION:
{
- value = impl.mController->IsMatchSystemLanguageDirection();
+ value = impl.mController->GetMatchLayoutDirection() != DevelText::MatchLayoutDirection::CONTENTS;
break;
}
case Toolkit::DevelTextField::Property::ENABLE_GRAB_HANDLE_POPUP:
Dali::LayoutDirection::Type layoutDirection = static_cast<Dali::LayoutDirection::Type>(stage.GetRootLayer().GetProperty(Dali::Actor::Property::LAYOUT_DIRECTION).Get<int>());
mController->SetLayoutDirection(layoutDirection);
+ self.LayoutDirectionChangedSignal().Connect(this, &TextField::OnLayoutDirectionChanged);
+
// Forward input events to controller
EnableGestureDetection(static_cast<GestureType::Value>(GestureType::TAP | GestureType::PAN | GestureType::LONG_PRESS));
GetTapGestureDetector().SetMaximumTapsRequired(2);
Vector2 contentSize(size.x - (padding.start + padding.end), size.y - (padding.top + padding.bottom));
// Support Right-To-Left of padding
- Dali::LayoutDirection::Type layoutDirection;
- if(mController->IsMatchSystemLanguageDirection())
- {
- layoutDirection = static_cast<Dali::LayoutDirection::Type>(DevelWindow::Get(self).GetRootLayer().GetProperty(Dali::Actor::Property::LAYOUT_DIRECTION).Get<int>());
- }
- else
- {
- layoutDirection = static_cast<Dali::LayoutDirection::Type>(self.GetProperty(Dali::Actor::Property::LAYOUT_DIRECTION).Get<int>());
- }
+ Dali::LayoutDirection::Type layoutDirection = mController->GetLayoutDirection(self);
+
if(Dali::LayoutDirection::RIGHT_TO_LEFT == layoutDirection)
{
std::swap(padding.start, padding.end);
}
}
-Text::ControllerPtr TextField::getController()
+Text::ControllerPtr TextField::GetTextController()
{
return mController;
}
}
}
-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);
}
}
}
}
+void TextField::GetControlBackgroundColor(Vector4& color) const
+{
+ Property::Value propValue = Self().GetProperty(Toolkit::Control::Property::BACKGROUND);
+ Property::Map* resultMap = propValue.GetMap();
+
+ Property::Value* colorValue = nullptr;
+ if(resultMap && (colorValue = resultMap->Find(ColorVisual::Property::MIX_COLOR)))
+ {
+ colorValue->Get(color);
+ }
+}
+
void TextField::OnSceneConnect(Dali::Actor actor)
{
if(mHasBeenStaged)
return false;
}
+void TextField::OnLayoutDirectionChanged(Actor actor, LayoutDirection::Type type)
+{
+ mController->ChangedLayoutDirection();
+}
+
void TextField::OnIdleSignal()
{
// Emits the change of input style signals.
std::string TextField::AccessibleImpl::GetName()
{
- auto slf = Toolkit::TextField::DownCast(Self());
- return slf.GetProperty(Toolkit::TextField::Property::TEXT).Get<std::string>();
+ auto self = Toolkit::TextField::DownCast(Self());
+ return self.GetProperty(Toolkit::TextField::Property::TEXT).Get<std::string>();
}
-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<std::string>();
+ auto self = Toolkit::TextField::DownCast(Self());
+ auto text = self.GetProperty(Toolkit::TextField::Property::TEXT).Get<std::string>();
- 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<std::string>();
+ auto self = Toolkit::TextField::DownCast(Self());
+ auto text = self.GetProperty(Toolkit::TextField::Property::TEXT).Get<std::string>();
- 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<std::string>();
- if(offset > txt.size())
+ auto self = Toolkit::TextField::DownCast(Self());
+ auto text = self.GetProperty(Toolkit::TextField::Property::TEXT).Get<std::string>();
+ 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<std::string>();
- auto txt_size = txt.size();
+ auto self = Toolkit::TextField::DownCast(Self());
+ auto text = self.GetProperty(Toolkit::TextField::Property::TEXT).Get<std::string>();
+ auto textSize = text.size();
auto range = Dali::Accessibility::Range{};
{
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<char>(txt_size, 0);
+ auto textString = text.c_str();
+ auto breaks = std::vector<char>(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<const utf8_t*>(textString), textSize, "", breaks.data());
+ }
else
- Accessibility::Accessible::FindLineSeparationsUtf8((const utf8_t*)txt_c_string, txt_size, "", breaks.data());
+ {
+ Accessibility::Accessible::FindLineSeparationsUtf8(reinterpret_cast<const utf8_t*>(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;
}
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<size_t>(r.first), static_cast<size_t>(r.second), ret};
+ return {static_cast<size_t>(indices.first), static_cast<size_t>(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<std::string>();
- 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<std::string>();
+ 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<std::string>();
- 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<std::string>();
+ 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<std::string>();
+ auto self = Toolkit::TextField::DownCast(Self());
+ auto text = self.GetProperty(Toolkit::TextField::Property::TEXT).Get<std::string>();
- 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;
}
states[State::FOCUSABLE] = true;
Toolkit::Control focusControl = Toolkit::KeyInputFocusManager::Get().GetCurrentFocusControl();
- if(self == focusControl)
+ if(mSelf == focusControl)
{
states[State::FOCUSED] = true;
}
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<std::string>();
+ auto self = Toolkit::TextField::DownCast(Self());
+ auto insertedText = self.GetProperty(Toolkit::TextField::Property::TEXT).Get<std::string>();
- 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;
}
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();
*/
DevelTextField::InputFilteredSignalType& InputFilteredSignal();
- Text::ControllerPtr getController();
-
private: // From Control
/**
* @copydoc Control::OnInitialize()
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()
*/
void InputFiltered(Toolkit::InputFilter::Property::Type type) override;
+ /**
+ * @copydoc Text::EditableControlInterface::GetControlBackgroundColor()
+ */
+ void GetControlBackgroundColor(Vector4& color) const override;
+
// From SelectableControlInterface
public:
/**
void EmitTextChangedSignal();
/**
+ * @brief Callback function for when the layout is changed.
+ * @param[in] actor The actor whose layoutDirection is changed.
+ * @param[in] type The layoutDirection.
+ */
+ void OnLayoutDirectionChanged(Actor actor, LayoutDirection::Type type);
+
+ /**
* Construct a new TextField.
*/
TextField();
// 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;
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;
};
};
// EXTERNAL INCLUDES
#include <dali/devel-api/actors/actor-devel.h>
#include <dali/devel-api/adaptor-framework/image-loading.h>
-#include <dali/devel-api/adaptor-framework/window-devel.h>
#include <dali/devel-api/common/stage.h>
#include <dali/devel-api/object/property-helper-devel.h>
#include <dali/integration-api/debug.h>
}
case Toolkit::DevelTextLabel::Property::MATCH_SYSTEM_LANGUAGE_DIRECTION:
{
- impl.mController->SetMatchSystemLanguageDirection(value.Get<bool>());
+ impl.mController->SetMatchLayoutDirection(value.Get<bool>() ? DevelText::MatchLayoutDirection::LOCALE : DevelText::MatchLayoutDirection::CONTENTS);
break;
}
case Toolkit::DevelTextLabel::Property::TEXT_FIT:
}
}
-Text::ControllerPtr TextLabel::getController()
+Text::ControllerPtr TextLabel::GetTextController()
{
return mController;
}
}
case Toolkit::DevelTextLabel::Property::MATCH_SYSTEM_LANGUAGE_DIRECTION:
{
- value = impl.mController->IsMatchSystemLanguageDirection();
+ value = impl.mController->GetMatchLayoutDirection() != DevelText::MatchLayoutDirection::CONTENTS;
break;
}
case Toolkit::DevelTextLabel::Property::TEXT_FIT:
Dali::LayoutDirection::Type layoutDirection = static_cast<Dali::LayoutDirection::Type>(stage.GetRootLayer().GetProperty(Dali::Actor::Property::LAYOUT_DIRECTION).Get<int>());
mController->SetLayoutDirection(layoutDirection);
+ self.LayoutDirectionChangedSignal().Connect(this, &TextLabel::OnLayoutDirectionChanged);
+
// Forward input events to controller
EnableGestureDetection(static_cast<GestureType::Value>(GestureType::TAP));
GetTapGestureDetector().SetMaximumTapsRequired(1);
{
DALI_LOG_INFO(gLogFilter, Debug::General, "TextLabel::OnRelayout\n");
+ Actor self = Self();
+
Extents padding;
- padding = Self().GetProperty<Extents>(Toolkit::Control::Property::PADDING);
+ padding = self.GetProperty<Extents>(Toolkit::Control::Property::PADDING);
Vector2 contentSize(size.x - (padding.start + padding.end), size.y - (padding.top + padding.bottom));
}
// Support Right-To-Left
- Dali::LayoutDirection::Type layoutDirection;
- if(mController->IsMatchSystemLanguageDirection())
- {
- layoutDirection = static_cast<Dali::LayoutDirection::Type>(DevelWindow::Get(Self()).GetRootLayer().GetProperty(Dali::Actor::Property::LAYOUT_DIRECTION).Get<int>());
- }
- else
- {
- layoutDirection = static_cast<Dali::LayoutDirection::Type>(Self().GetProperty(Dali::Actor::Property::LAYOUT_DIRECTION).Get<int>());
- }
+ Dali::LayoutDirection::Type layoutDirection = mController->GetLayoutDirection(self);
+
const Text::Controller::UpdateTextType updateTextType = mController->Relayout(contentSize, layoutDirection);
if((Text::Controller::NONE_UPDATED != (Text::Controller::MODEL_UPDATED & updateTextType)) || mTextUpdateNeeded)
RequestTextRelayout();
}
+void TextLabel::OnLayoutDirectionChanged(Actor actor, LayoutDirection::Type type)
+{
+ mController->ChangedLayoutDirection();
+}
+
TextLabel::TextLabel()
: Control(ControlBehaviour(CONTROL_BEHAVIOUR_DEFAULT)),
mRenderingBackend(DEFAULT_RENDERING_BACKEND),
std::string TextLabel::AccessibleImpl::GetNameRaw()
{
- auto slf = Toolkit::TextLabel::DownCast(Self());
- return slf.GetProperty(Toolkit::TextLabel::Property::TEXT).Get<std::string>();
+ auto self = Toolkit::TextLabel::DownCast(Self());
+ return self.GetProperty(Toolkit::TextLabel::Property::TEXT).Get<std::string>();
}
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<std::string>();
+ auto self = Toolkit::TextLabel::DownCast(Self());
+ auto text = self.GetProperty(Toolkit::TextLabel::Property::TEXT).Get<std::string>();
- 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<std::string>();
+ auto self = Toolkit::TextLabel::DownCast(Self());
+ auto text = self.GetProperty(Toolkit::TextLabel::Property::TEXT).Get<std::string>();
- 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<std::string>();
- auto txt_size = txt.size();
+ auto self = Toolkit::TextLabel::DownCast(Self());
+ auto text = self.GetProperty(Toolkit::TextLabel::Property::TEXT).Get<std::string>();
+ auto textSize = text.size();
auto range = Dali::Accessibility::Range{};
{
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<char>(txt_size, 0);
+ auto textString = text.c_str();
+ auto breaks = std::vector<char>(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<const utf8_t*>(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<const utf8_t*>(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;
}
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<size_t>(r.first), static_cast<size_t>(r.second), ret};
+ return {static_cast<size_t>(indices.first), static_cast<size_t>(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;
}
*/
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
/**
return mTextScroller;
}
+ /**
+ * @brief Callback function for when the layout is changed.
+ * @param[in] actor The actor whose layoutDirection is changed.
+ * @param[in] type The layoutDirection.
+ */
+ void OnLayoutDirectionChanged(Actor actor, LayoutDirection::Type type);
+
private: // Data
Text::ControllerPtr mController;
Text::TextScrollerPtr mTextScroller;
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;
};
};
DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "textZoomFactor", FLOAT, TEXT_ZOOM_FACTOR )
DALI_PROPERTY_REGISTRATION(Toolkit, WebView, "loadProgressPercentage", FLOAT, LOAD_PROGRESS_PERCENTAGE )
-DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "pageLoadStarted", PAGE_LOAD_STARTED_SIGNAL )
-DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "pageLoadInProgress", PAGE_LOAD_IN_PROGRESS_SIGNAL )
-DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "pageLoadFinished", PAGE_LOAD_FINISHED_SIGNAL )
-DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "pageLoadError", PAGE_LOAD_ERROR_SIGNAL )
-DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "scrollEdgeReached", SCROLL_EDGE_REACHED_SIGNAL )
-DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "urlChanged", URL_CHANGED_SIGNAL )
-DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "formRepostDecision", FORM_REPOST_DECISION_SIGNAL )
-DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "frameRendered", FRAME_RENDERED_SIGNAL )
-DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "requestInterceptor", REQUEST_INTERCEPTOR_SIGNAL )
-DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "consoleMessage", CONSOLE_MESSAGE_SIGNAL )
-DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "responsePolicyDecided", POLICY_DECISION )
-DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "certificateConfirm", CERTIFICATE_CONFIRM_SIGNAL )
-DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "sslCertificateChanged", SSL_CERTIFICATE_CHANGED_SIGNAL )
-DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "httpAuthRequest", HTTP_AUTH_REQUEST_SIGNAL )
-DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "contextMenuCustomized", CONTEXT_MENU_CUSTOMIZED_SIGNAL )
-DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "contextMenuItemSelected", CONTEXT_MENU_ITEM_SELECTED_SIGNAL)
+DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "pageLoadStarted", PAGE_LOAD_STARTED_SIGNAL )
+DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "pageLoadInProgress", PAGE_LOAD_IN_PROGRESS_SIGNAL )
+DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "pageLoadFinished", PAGE_LOAD_FINISHED_SIGNAL )
+DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "pageLoadError", PAGE_LOAD_ERROR_SIGNAL )
+DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "scrollEdgeReached", SCROLL_EDGE_REACHED_SIGNAL )
+DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "urlChanged", URL_CHANGED_SIGNAL )
+DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "formRepostDecision", FORM_REPOST_DECISION_SIGNAL )
+DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "frameRendered", FRAME_RENDERED_SIGNAL )
+DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "requestInterceptor", REQUEST_INTERCEPTOR_SIGNAL )
+DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "consoleMessage", CONSOLE_MESSAGE_SIGNAL )
+DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "responsePolicyDecided", POLICY_DECISION )
+DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "certificateConfirm", CERTIFICATE_CONFIRM_SIGNAL )
+DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "sslCertificateChanged", SSL_CERTIFICATE_CHANGED_SIGNAL)
+DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "httpAuthRequest", HTTP_AUTH_REQUEST_SIGNAL )
+DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "contextMenuShown", CONTEXT_MENU_SHOWN_SIGNAL )
+DALI_SIGNAL_REGISTRATION(Toolkit, WebView, "contextMenuHidden", CONTEXT_MENU_HIDDEN_SIGNAL )
DALI_TYPE_REGISTRATION_END()
// clang-format on
-const std::string kEmptyString;
-
} // namespace
#define GET_ENUM_STRING(structName, inputExp) \
WebView::WebView(const std::string& locale, const std::string& timezoneId)
: Control(ControlBehaviour(ACTOR_BEHAVIOUR_DEFAULT | DISABLE_STYLE_CHANGE_SIGNALS)),
- mUrl(),
mVisual(),
mWebViewSize(Stage::GetCurrent().GetSize()),
mWebEngine(),
WebView::WebView(uint32_t argc, char** argv)
: Control(ControlBehaviour(ACTOR_BEHAVIOUR_DEFAULT | DISABLE_STYLE_CHANGE_SIGNALS)),
- mUrl(),
mVisual(),
mWebViewSize(Stage::GetCurrent().GetSize()),
mWebEngine(),
mWebEngine.CertificateConfirmSignal().Connect(this, &WebView::OnCertificateConfirm);
mWebEngine.SslCertificateChangedSignal().Connect(this, &WebView::OnSslCertificateChanged);
mWebEngine.HttpAuthHandlerSignal().Connect(this, &WebView::OnHttpAuthenticationRequest);
- mWebEngine.ContextMenuCustomizedSignal().Connect(this, &WebView::OnContextMenuCustomized);
- mWebEngine.ContextMenuItemSelectedSignal().Connect(this, &WebView::OnContextMenuItemSelected);
+ mWebEngine.ContextMenuShownSignal().Connect(this, &WebView::OnContextMenuShown);
+ mWebEngine.ContextMenuHiddenSignal().Connect(this, &WebView::OnContextMenuHidden);
mWebContext = std::unique_ptr<Dali::Toolkit::WebContext>(new WebContext(mWebEngine.GetContext()));
mWebCookieManager = std::unique_ptr<Dali::Toolkit::WebCookieManager>(new WebCookieManager(mWebEngine.GetCookieManager()));
void WebView::LoadUrl(const std::string& url)
{
- mUrl = url;
if(mWebEngine)
{
- Texture texture = Dali::Texture::New(*mWebEngine.GetNativeImageSource());
- const std::string nativeImageUrl = Dali::Toolkit::TextureManager::AddTexture(texture);
- mVisual = Toolkit::VisualFactory::Get().CreateVisual(
- {{Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE},
- {Toolkit::ImageVisual::Property::URL, nativeImageUrl}});
-
- if(mVisual)
+ if(!mVisual)
{
- // Clean up previously registered visual and add new one.
- DevelControl::RegisterVisual(*this, Toolkit::WebView::Property::URL, mVisual);
- mWebEngine.LoadUrl(url);
+ mWebEngine.FrameRenderedSignal().Connect(this, &WebView::OnInitialFrameRendered);
}
- if(mVideoHoleEnabled)
- {
- EnableBlendMode(false);
- }
+ mWebEngine.LoadUrl(url);
}
}
{
if(mWebEngine)
{
- Texture texture = Dali::Texture::New(*mWebEngine.GetNativeImageSource());
- const std::string nativeImageUrl = Dali::Toolkit::TextureManager::AddTexture(texture);
- mVisual = Toolkit::VisualFactory::Get().CreateVisual(
- {{Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE},
- {Toolkit::ImageVisual::Property::URL, nativeImageUrl}});
-
- if(mVisual)
+ if(!mVisual)
{
- DevelControl::RegisterVisual(*this, Toolkit::WebView::Property::URL, mVisual);
- mWebEngine.LoadHtmlString(htmlString);
+ mWebEngine.FrameRenderedSignal().Connect(this, &WebView::OnInitialFrameRendered);
}
- if(mVideoHoleEnabled)
- {
- EnableBlendMode(false);
- }
+ mWebEngine.LoadHtmlString(htmlString);
}
}
if(!mWebEngine)
return false;
- Texture texture = Dali::Texture::New(*mWebEngine.GetNativeImageSource());
- const std::string nativeImageUrl = Dali::Toolkit::TextureManager::AddTexture(texture);
- mVisual = Toolkit::VisualFactory::Get().CreateVisual(
- {{Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE},
- {Toolkit::ImageVisual::Property::URL, nativeImageUrl}});
-
- bool result = false;
- if(mVisual)
+ if(!mVisual)
{
- DevelControl::RegisterVisual(*this, Toolkit::WebView::Property::URL, mVisual);
- result = mWebEngine.LoadHtmlStringOverrideCurrentEntry(html, basicUri, unreachableUrl);
+ mWebEngine.FrameRenderedSignal().Connect(this, &WebView::OnInitialFrameRendered);
}
- if(mVideoHoleEnabled)
- {
- EnableBlendMode(false);
- }
- return result;
+ return mWebEngine.LoadHtmlStringOverrideCurrentEntry(html, basicUri, unreachableUrl);
}
bool WebView::LoadContents(const std::string& contents, uint32_t contentSize, const std::string& mimeType, const std::string& encoding, const std::string& baseUri)
if(!mWebEngine)
return false;
- Texture texture = Dali::Texture::New(*mWebEngine.GetNativeImageSource());
- const std::string nativeImageUrl = Dali::Toolkit::TextureManager::AddTexture(texture);
- mVisual = Toolkit::VisualFactory::Get().CreateVisual(
- {{Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE},
- {Toolkit::ImageVisual::Property::URL, nativeImageUrl}});
-
- bool result = false;
- if(mVisual)
+ if(!mVisual)
{
- DevelControl::RegisterVisual(*this, Toolkit::WebView::Property::URL, mVisual);
- result = mWebEngine.LoadContents(contents, contentSize, mimeType, encoding, baseUri);
+ mWebEngine.FrameRenderedSignal().Connect(this, &WebView::OnInitialFrameRendered);
}
- if(mVideoHoleEnabled)
- {
- EnableBlendMode(false);
- }
- return result;
+ return mWebEngine.LoadContents(contents, contentSize, mimeType, encoding, baseUri);
}
void WebView::Reload()
return mHttpAuthHandlerSignal;
}
-Dali::Toolkit::WebView::WebViewContextMenuCustomizedSignalType& WebView::ContextMenuCustomizedSignal()
+Dali::Toolkit::WebView::WebViewContextMenuShownSignalType& WebView::ContextMenuShownSignal()
{
- return mContextMenuCustomizedSignal;
+ return mContextMenuShownSignal;
}
-Dali::Toolkit::WebView::WebViewContextMenuItemSelectedSignalType& WebView::ContextMenuItemSelectedSignal()
+Dali::Toolkit::WebView::WebViewContextMenuHiddenSignalType& WebView::ContextMenuHiddenSignal()
{
- return mContextMenuItemSelectedSignal;
+ return mContextMenuHiddenSignal;
}
void WebView::OnPageLoadStarted(const std::string& url)
}
}
+void WebView::OnInitialFrameRendered()
+{
+ mWebEngine.FrameRenderedSignal().Disconnect(this, &WebView::OnInitialFrameRendered);
+
+ Texture texture = Dali::Texture::New(*mWebEngine.GetNativeImageSource());
+ const std::string nativeImageUrl = Dali::Toolkit::TextureManager::AddTexture(texture);
+ mVisual = Toolkit::VisualFactory::Get().CreateVisual({{Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE}, {Toolkit::ImageVisual::Property::URL, nativeImageUrl}});
+
+ if(mVisual)
+ {
+ DevelControl::RegisterVisual(*this, Toolkit::WebView::Property::URL, mVisual);
+ EnableBlendMode(!mVideoHoleEnabled);
+ }
+}
+
void WebView::OnVisibilityChanged(Actor actor, bool isVisible, Dali::DevelActor::VisibilityChange::Type type)
{
if(type == Dali::DevelActor::VisibilityChange::Type::SELF)
}
}
-void WebView::OnContextMenuCustomized(std::shared_ptr<Dali::WebEngineContextMenu> menu)
+void WebView::OnContextMenuShown(std::shared_ptr<Dali::WebEngineContextMenu> menu)
{
- if(!mContextMenuCustomizedSignal.Empty())
+ if(!mContextMenuShownSignal.Empty())
{
Dali::Toolkit::WebView handle(GetOwner());
- mContextMenuCustomizedSignal.Emit(handle, std::move(menu));
+ mContextMenuShownSignal.Emit(handle, std::move(menu));
}
}
-void WebView::OnContextMenuItemSelected(std::shared_ptr<Dali::WebEngineContextMenuItem> item)
+void WebView::OnContextMenuHidden(std::shared_ptr<Dali::WebEngineContextMenu> menu)
{
- if(!mContextMenuItemSelectedSignal.Empty())
+ if(!mContextMenuHiddenSignal.Empty())
{
Dali::Toolkit::WebView handle(GetOwner());
- mContextMenuItemSelectedSignal.Emit(handle, std::move(item));
+ mContextMenuHiddenSignal.Emit(handle, std::move(menu));
}
}
webView.HttpAuthHandlerSignal().Connect(tracker, functor);
connected = true;
}
- else if(0 == strcmp(signalName.c_str(), CONTEXT_MENU_CUSTOMIZED_SIGNAL))
+ else if(0 == strcmp(signalName.c_str(), CONTEXT_MENU_SHOWN_SIGNAL))
{
- webView.ContextMenuCustomizedSignal().Connect(tracker, functor);
+ webView.ContextMenuShownSignal().Connect(tracker, functor);
connected = true;
}
- else if(0 == strcmp(signalName.c_str(), CONTEXT_MENU_ITEM_SELECTED_SIGNAL))
+ else if(0 == strcmp(signalName.c_str(), CONTEXT_MENU_HIDDEN_SIGNAL))
{
- webView.ContextMenuItemSelectedSignal().Connect(tracker, functor);
+ webView.ContextMenuHiddenSignal().Connect(tracker, functor);
connected = true;
}
{
case Toolkit::WebView::Property::URL:
{
- value = impl.mUrl;
+ value = impl.GetUrl();
break;
}
case Toolkit::WebView::Property::USER_AGENT:
std::string WebView::GetTitle() const
{
- return mWebEngine ? mWebEngine.GetTitle() : kEmptyString;
+ return mWebEngine ? mWebEngine.GetTitle() : std::string();
}
void WebView::SetDocumentBackgroundColor(Dali::Vector4 color)
std::string WebView::GetSelectedText() const
{
- return mWebEngine ? mWebEngine.GetSelectedText() : kEmptyString;
+ return mWebEngine ? mWebEngine.GetSelectedText() : std::string();
+}
+
+std::string WebView::GetUrl() const
+{
+ return mWebEngine ? mWebEngine.GetUrl() : std::string();
}
-const std::string& WebView::GetUserAgent() const
+std::string WebView::GetUserAgent() const
{
- return mWebEngine ? mWebEngine.GetUserAgent() : kEmptyString;
+ return mWebEngine ? mWebEngine.GetUserAgent() : std::string();
}
void WebView::SetUserAgent(const std::string& userAgent)
Dali::Toolkit::WebView::WebViewHttpAuthHandlerSignalType& HttpAuthHandlerSignal();
/**
- * @copydoc Dali::Toolkit::WebView::ContextMenuCustomizedSignal()
+ * @copydoc Dali::Toolkit::WebView::ContextMenuShownSignal()
*/
- Dali::Toolkit::WebView::WebViewContextMenuCustomizedSignalType& ContextMenuCustomizedSignal();
+ Dali::Toolkit::WebView::WebViewContextMenuShownSignalType& ContextMenuShownSignal();
/**
- * @copydoc Dali::Toolkit::WebView::ContextMenuItemSelectedSignal()
+ * @copydoc Dali::Toolkit::WebView::ContextMenuHiddenSignal()
*/
- Dali::Toolkit::WebView::WebViewContextMenuItemSelectedSignalType& ContextMenuItemSelectedSignal();
+ Dali::Toolkit::WebView::WebViewContextMenuHiddenSignalType& ContextMenuHiddenSignal();
public: // Properties
/**
std::string GetSelectedText() const;
/**
+ * @brief Get url of web page.
+ * @return The string of url
+ */
+ std::string GetUrl() const;
+
+ /**
* @brief Get user agent string.
* @return The string value of user agent
*/
- const std::string& GetUserAgent() const;
+ std::string GetUserAgent() const;
/**
* @brief Set user agent string.
void OnFrameRendered();
/**
+ * @brief Callback function to be called when frame is rendered. This is to check initial buffer is ready.
+ */
+ void OnInitialFrameRendered();
+
+ /**
* @brief Callback function to be called when visibility is changed.
* @param[in] actor The actor, or child of actor, whose visibility has changed
* @param[in] isVisible Whether the actor is now visible or not
void OnHttpAuthenticationRequest(std::shared_ptr<Dali::WebEngineHttpAuthHandler> handler);
/**
- * @brief Callback function to be called when context menu would be customized.
+ * @brief Callback function to be called when context menu would be shown.
* @param[in] e The scroll edge reached.
*/
- void OnContextMenuCustomized(std::shared_ptr<Dali::WebEngineContextMenu> menu);
+ void OnContextMenuShown(std::shared_ptr<Dali::WebEngineContextMenu> menu);
/**
- * @brief Callback function to be called when context menu item is selected.
+ * @brief Callback function to be called when context menu would be hidden.
* @param[in] url The url currently being loaded
*/
- void OnContextMenuItemSelected(std::shared_ptr<Dali::WebEngineContextMenuItem> item);
+ void OnContextMenuHidden(std::shared_ptr<Dali::WebEngineContextMenu> menu);
private:
- std::string mUrl;
Dali::Toolkit::Visual::Base mVisual;
Dali::Size mWebViewSize;
Dali::WebEngine mWebEngine;
- Dali::Toolkit::WebView::WebViewPageLoadSignalType mPageLoadStartedSignal;
- Dali::Toolkit::WebView::WebViewPageLoadSignalType mPageLoadInProgressSignal;
- Dali::Toolkit::WebView::WebViewPageLoadSignalType mPageLoadFinishedSignal;
- Dali::Toolkit::WebView::WebViewPageLoadErrorSignalType mPageLoadErrorSignal;
- Dali::Toolkit::WebView::WebViewUrlChangedSignalType mUrlChangedSignal;
- Dali::Toolkit::WebView::WebViewScrollEdgeReachedSignalType mScrollEdgeReachedSignal;
- Dali::Toolkit::WebView::WebViewFormRepostDecisionSignalType mFormRepostDecisionSignal;
- Dali::Toolkit::WebView::WebViewFrameRenderedSignalType mFrameRenderedSignal;
- Dali::Toolkit::WebView::WebViewRequestInterceptorSignalType mRequestInterceptorSignal;
- Dali::Toolkit::WebView::WebViewConsoleMessageSignalType mConsoleMessageSignal;
- Dali::Toolkit::WebView::WebViewResponsePolicyDecisionSignalType mResponsePolicyDecisionSignal;
- Dali::Toolkit::WebView::WebViewCertificateSignalType mCertificateConfirmSignal;
- Dali::Toolkit::WebView::WebViewCertificateSignalType mSslCertificateChangedSignal;
- Dali::Toolkit::WebView::WebViewHttpAuthHandlerSignalType mHttpAuthHandlerSignal;
- Dali::Toolkit::WebView::WebViewContextMenuCustomizedSignalType mContextMenuCustomizedSignal;
- Dali::Toolkit::WebView::WebViewContextMenuItemSelectedSignalType mContextMenuItemSelectedSignal;
+ Dali::Toolkit::WebView::WebViewPageLoadSignalType mPageLoadStartedSignal;
+ Dali::Toolkit::WebView::WebViewPageLoadSignalType mPageLoadInProgressSignal;
+ Dali::Toolkit::WebView::WebViewPageLoadSignalType mPageLoadFinishedSignal;
+ Dali::Toolkit::WebView::WebViewPageLoadErrorSignalType mPageLoadErrorSignal;
+ Dali::Toolkit::WebView::WebViewUrlChangedSignalType mUrlChangedSignal;
+ Dali::Toolkit::WebView::WebViewScrollEdgeReachedSignalType mScrollEdgeReachedSignal;
+ Dali::Toolkit::WebView::WebViewFormRepostDecisionSignalType mFormRepostDecisionSignal;
+ Dali::Toolkit::WebView::WebViewFrameRenderedSignalType mFrameRenderedSignal;
+ Dali::Toolkit::WebView::WebViewRequestInterceptorSignalType mRequestInterceptorSignal;
+ Dali::Toolkit::WebView::WebViewConsoleMessageSignalType mConsoleMessageSignal;
+ Dali::Toolkit::WebView::WebViewResponsePolicyDecisionSignalType mResponsePolicyDecisionSignal;
+ Dali::Toolkit::WebView::WebViewCertificateSignalType mCertificateConfirmSignal;
+ Dali::Toolkit::WebView::WebViewCertificateSignalType mSslCertificateChangedSignal;
+ Dali::Toolkit::WebView::WebViewHttpAuthHandlerSignalType mHttpAuthHandlerSignal;
+ Dali::Toolkit::WebView::WebViewContextMenuShownSignalType mContextMenuShownSignal;
+ Dali::Toolkit::WebView::WebViewContextMenuHiddenSignalType mContextMenuHiddenSignal;
std::unique_ptr<Dali::Toolkit::WebContext> mWebContext;
std::unique_ptr<Dali::Toolkit::WebCookieManager> mWebCookieManager;
textureColor = mix(textureColor, vec4(borderlineColor.xyz, 0.0), smoothstep(MinTexturelinePotential, MaxTexturelinePotential, potential));
}
borderlineOpacity *= borderlineColor.a;
+ return mix(textureColor, vec4(borderlineColor.xyz, 1.0), borderlineOpacity);
}
- return mix(textureColor, vec4(borderlineColor.xyz, 1.0), borderlineOpacity);
+ return mix(textureColor, borderlineColor, borderlineOpacity);
}
#endif
void main()
{
- lowp vec4 targetColor = vec4(mixColor, 1.0) * uColor;
+ lowp vec4 targetColor = vec4(mixColor, 1.0);
#if IS_REQUIRED_BLUR || IS_REQUIRED_ROUNDED_CORNER || IS_REQUIRED_BORDERLINE
// skip most potential calculate for performance
if(abs(vPosition.x) < vOptRectSize.x && abs(vPosition.y) < vOptRectSize.y)
{
- OUT_COLOR = targetColor;
+ OUT_COLOR = targetColor * uColor;
return;
}
PreprocessPotential();
#if !IS_REQUIRED_BLUR && IS_REQUIRED_BORDERLINE
targetColor = convertBorderlineColor(targetColor);
#endif
- OUT_COLOR = targetColor;
+ OUT_COLOR = targetColor * uColor;
#if IS_REQUIRED_BLUR
mediump float opacity = calculateBlurOpacity();
textureColor = mix(textureColor, vec4(borderlineColor.xyz, 0.0), smoothstep(MinTexturelinePotential, MaxTexturelinePotential, potential));
}
borderlineOpacity *= borderlineColor.a;
+ return mix(textureColor, vec4(borderlineColor.xyz, 1.0), borderlineOpacity);
}
- return mix(textureColor, vec4(borderlineColor.xyz, 1.0), borderlineOpacity);
+ return mix(textureColor, borderlineColor, borderlineOpacity);
}
#endif
void main()
{
#if RADIAL
- lowp vec4 textureColor = TEXTURE(sTexture, vec2(length(vTexCoord), 0.5)) * vec4(mixColor, 1.0) * uColor;
+ lowp vec4 textureColor = TEXTURE(sTexture, vec2(length(vTexCoord), 0.5)) * vec4(mixColor, 1.0);
#else
- lowp vec4 textureColor = TEXTURE(sTexture, vec2(vTexCoord.y, 0.5)) * vec4(mixColor, 1.0) * uColor;
+ lowp vec4 textureColor = TEXTURE(sTexture, vec2(vTexCoord.y, 0.5)) * vec4(mixColor, 1.0);
#endif
#if IS_REQUIRED_ROUNDED_CORNER || IS_REQUIRED_BORDERLINE
// skip most potential calculate for performance
if(abs(vPosition.x) < vOptRectSize.x && abs(vPosition.y) < vOptRectSize.y)
{
- OUT_COLOR = textureColor;
+ OUT_COLOR = textureColor * uColor;
return;
}
PreprocessPotential();
#if IS_REQUIRED_BORDERLINE
textureColor = convertBorderlineColor(textureColor);
#endif
- OUT_COLOR = textureColor;
+ OUT_COLOR = textureColor * uColor;
#if IS_REQUIRED_ROUNDED_CORNER
mediump float opacity = calculateCornerOpacity();
mediump float tCornerRadius = -gCenterPosition;
mediump float MaxTexturelinePotential = tCornerRadius + gPotentialRange;
mediump float MinTexturelinePotential = tCornerRadius - gPotentialRange;
+ lowp vec3 BorderlineColorRGB = borderlineColor.xyz;
+ BorderlineColorRGB *= mix(1.0, borderlineColor.a, preMultipliedAlpha);
if(potential > MaxTexturelinePotential)
{
// potential is out of texture range. use borderline color instead of texture
- textureColor = vec4(borderlineColor.xyz, 0.0);
+ textureColor = vec4(BorderlineColorRGB, 0.0);
}
else if(potential > MinTexturelinePotential)
{
// potential is in texture range
- textureColor = mix(textureColor, vec4(borderlineColor.xyz, 0.0), smoothstep(MinTexturelinePotential, MaxTexturelinePotential, potential));
+ textureColor = mix(textureColor, vec4(BorderlineColorRGB, 0.0), smoothstep(MinTexturelinePotential, MaxTexturelinePotential, potential));
}
borderlineOpacity *= borderlineColor.a;
+ return mix(textureColor, vec4(BorderlineColorRGB, 1.0), borderlineOpacity);
}
- return mix(textureColor, vec4(borderlineColor.xyz, 1.0), borderlineOpacity);
+ return mix(textureColor, borderlineColor, borderlineOpacity);
}
#endif
mediump vec2 texCoord = vTexCoord;
#endif
- lowp vec4 textureColor = TEXTURE( sTexture, texCoord ) * uColor * vec4( mixColor, 1.0 );
+ lowp vec4 textureColor = TEXTURE( sTexture, texCoord ) * vec4( mixColor, 1.0 );
#if IS_REQUIRED_ROUNDED_CORNER || IS_REQUIRED_BORDERLINE
// skip most potential calculate for performance
if(abs(vPosition.x) < vOptRectSize.x && abs(vPosition.y) < vOptRectSize.y)
{
- OUT_COLOR = textureColor;
+ OUT_COLOR = textureColor * uColor;
return;
}
PreprocessPotential();
#if IS_REQUIRED_BORDERLINE
textureColor = convertBorderlineColor(textureColor);
#endif
- OUT_COLOR = textureColor;
+ OUT_COLOR = textureColor * uColor;
#if IS_REQUIRED_ROUNDED_CORNER
mediump float opacity = calculateCornerOpacity();
CharacterIndex startIndex,
Length numberOfCharacters,
Vector<BidirectionalParagraphInfoRun>& bidirectionalInfo,
- bool matchSystemLanguageDirection,
+ bool matchLayoutDirection,
Dali::LayoutDirection::Type layoutDirection)
{
// Find where to insert the new paragraphs.
// Create the bidirectional info for the whole paragraph and store the index to the table with this info in the run.
bidirectionalRun.bidirectionalInfoIndex = bidirectionalSupport.CreateInfo(textBuffer + bidirectionalRun.characterRun.characterIndex,
bidirectionalRun.characterRun.numberOfCharacters,
- matchSystemLanguageDirection,
+ matchLayoutDirection,
layoutDirection);
bidirectionalRun.direction = bidirectionalSupport.GetParagraphDirection(bidirectionalRun.bidirectionalInfoIndex);
* @param[in] startIndex The character from where the bidirectional info is set.
* @param[in] numberOfCharacters The number of characters.
* @param[out] bidirectionalInfo Vector with the bidirectional infor for each paragraph.
- * @param[in] matchSystemLanguageDirection Whether match for system language direction or not.
- * @param[in] layoutDirection The direction of the system language.
+ * @param[in] matchLayoutDirection Whether match for layout direction or not.
+ * @param[in] layoutDirection The direction of the layout.
*/
void SetBidirectionalInfo(const Vector<Character>& text,
const Vector<ScriptRun>& scripts,
CharacterIndex startIndex,
Length numberOfCharacters,
Vector<BidirectionalParagraphInfoRun>& bidirectionalInfo,
- bool matchSystemLanguageDirection = false,
- Dali::LayoutDirection::Type layoutDirection = LayoutDirection::LEFT_TO_RIGHT);
+ bool matchLayoutDirection = false,
+ Dali::LayoutDirection::Type layoutDirection = LayoutDirection::LEFT_TO_RIGHT);
/**
* @brief Sets the visual to logical map table for a given line.
Vector<LineRun>& lines,
float& alignmentOffset,
Dali::LayoutDirection::Type layoutDirection,
- bool matchSystemLanguageDirection)
+ bool matchLayoutDirection)
{
const CharacterIndex lastCharacterPlusOne = startIndex + numberOfCharacters;
horizontalAlignment,
line,
layoutDirection,
- matchSystemLanguageDirection);
+ matchLayoutDirection);
// Updates the alignment offset.
alignmentOffset = std::min(alignmentOffset, line.alignmentOffset);
HorizontalAlignment::Type horizontalAlignment,
LineRun& line,
Dali::LayoutDirection::Type layoutDirection,
- bool matchSystemLanguageDirection)
+ bool matchLayoutDirection)
{
line.alignmentOffset = 0.f;
const bool isLineRTL = RTL == line.direction;
float lineLength = line.width;
// match align for system language direction
- if(matchSystemLanguageDirection)
+ if(matchLayoutDirection)
{
// Swap the alignment type if the line is right to left.
isLayoutRTL = layoutDirection == LayoutDirection::RIGHT_TO_LEFT;
Vector<LineRun>& lines,
float& alignmentOffset,
Dali::LayoutDirection::Type layoutDirection,
- bool matchSystemLanguageDirection)
+ bool matchLayoutDirection)
{
mImpl->Align(size,
startIndex,
lines,
alignmentOffset,
layoutDirection,
- matchSystemLanguageDirection);
+ matchLayoutDirection);
}
void Engine::SetDefaultLineSpacing(float lineSpacing)
* @param[in] horizontalAlignment The horizontal alignment.
* @param[in,out] lines The laid-out lines.
* @param[out] alignmentOffset The alignment offset.
- * @param[in] layoutDirection The direction of the system language.
- * @param[in] matchSystemLanguageDirection Whether match align for system language direction or not.
+ * @param[in] layoutDirection The direction of the layout.
+ * @param[in] matchLayoutDirection Whether match align for layout direction or not.
*/
void Align(const Size& size,
CharacterIndex startIndex,
Vector<LineRun>& lines,
float& alignmentOffset,
Dali::LayoutDirection::Type layoutDirection,
- bool matchSystemLanguageDirection);
+ bool matchLayoutDirection);
/**
* @brief Sets the default line spacing.
return mModel;
}
+Devel::PixelBuffer Typesetter::CreateImageBuffer(const unsigned int bufferWidth, const unsigned int bufferHeight, Pixel::Format pixelFormat)
+{
+ Devel::PixelBuffer imageBuffer = Devel::PixelBuffer::New(bufferWidth, bufferHeight, pixelFormat);
+
+ if(Pixel::RGBA8888 == pixelFormat)
+ {
+ const unsigned int bufferSizeInt = bufferWidth * bufferHeight;
+ const unsigned int bufferSizeChar = 4u * bufferSizeInt;
+ memset(imageBuffer.GetBuffer(), 0u, bufferSizeChar);
+ }
+ else
+ {
+ memset(imageBuffer.GetBuffer(), 0, bufferWidth * bufferHeight);
+ }
+
+ return imageBuffer;
+}
+
PixelData Typesetter::Render(const Vector2& size, Toolkit::DevelText::TextDirection::Type textDirection, RenderBehaviour behaviour, bool ignoreHorizontalAlignment, Pixel::Format pixelFormat)
{
// @todo. This initial implementation for a TextLabel has only one visible page.
}
else
{
- backgroundImageBuffer = Devel::PixelBuffer::New(bufferWidth, bufferHeight, pixelFormat);
+ backgroundImageBuffer = CreateImageBuffer(bufferWidth, bufferHeight, pixelFormat);
}
if(backgroundMarkupSet)
glyphData.verticalOffset = verticalOffset;
glyphData.width = bufferWidth;
glyphData.height = bufferHeight;
- glyphData.bitmapBuffer = Devel::PixelBuffer::New(bufferWidth, bufferHeight, pixelFormat);
+ glyphData.bitmapBuffer = CreateImageBuffer(bufferWidth, bufferHeight, pixelFormat);
glyphData.horizontalOffset = 0;
- if(Pixel::RGBA8888 == pixelFormat)
- {
- const unsigned int bufferSizeInt = bufferWidth * bufferHeight;
- const unsigned int bufferSizeChar = 4u * bufferSizeInt;
- memset(glyphData.bitmapBuffer.GetBuffer(), 0u, bufferSizeChar);
- }
- else
- {
- memset(glyphData.bitmapBuffer.GetBuffer(), 0, bufferWidth * bufferHeight);
- }
-
// Get a handle of the font client. Used to retrieve the bitmaps of the glyphs.
TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
Length hyphenIndex = 0;
Typesetter& operator=(const Typesetter& handle);
/**
- * @brief Create the image buffer for the given range of the glyphs in the given style.
+ * @brief Create & draw the image buffer for the given range of the glyphs in the given style.
*
* Does the following operations:
* - Retrieves the data buffers from the text model.
Devel::PixelBuffer CreateImageBuffer(const unsigned int bufferWidth, const unsigned int bufferHeight, Typesetter::Style style, bool ignoreHorizontalAlignment, Pixel::Format pixelFormat, int horizontalOffset, int verticalOffset, TextAbstraction::GlyphIndex fromGlyphIndex, TextAbstraction::GlyphIndex toGlyphIndex);
/**
+ * @brief Create an initialized image buffer.
+ *
+ * Creates the pixel data used to generate the final image with the given size.
+ *
+ * @param[in] bufferWidth The width of the image buffer.
+ * @param[in] bufferHeight The height of the image buffer.
+ * @param[in] pixelFormat The format of the pixel in the image that the text is rendered as (i.e. either Pixel::BGRA8888 or Pixel::L8).
+ *
+ * @return An image buffer.
+ */
+ Devel::PixelBuffer CreateImageBuffer(const unsigned int bufferWidth, const unsigned int bufferHeight, Pixel::Format pixelFormat);
+
+ /**
* @brief Combine the two RGBA image buffers together.
*
* The top layer buffer will blend over the bottom layer buffer:
if(nullptr != impl.mEditableControlInterface)
{
- impl.mEditableControlInterface->CaretMoved(eventData->mPrimaryCursorPosition);
+ impl.mEditableControlInterface->CursorMoved(eventData->mPrimaryCursorPosition);
}
if(eventData->mUpdateCursorHookPosition)
#include <dali-toolkit/internal/text/shaper.h>
#include <dali-toolkit/internal/text/text-control-interface.h>
#include <dali-toolkit/internal/text/text-controller-impl-event-handler.h>
+#include <dali-toolkit/internal/text/text-editable-control-interface.h>
+#include <dali-toolkit/internal/text/text-enumerations-impl.h>
#include <dali-toolkit/internal/text/text-run-container.h>
#include <dali-toolkit/internal/text/text-selection-handle-controller.h>
-#include <dali-toolkit/internal/text/text-enumerations-impl.h>
-
using namespace Dali;
namespace
Vector<unsigned short> mIndices; ///< container of indices
};
+// The relative luminance of a color is defined as (L = 0.2126 * R + 0.7152 * G + 0.0722 * B)
+// based on W3C Recommendations (https://www.w3.org/TR/WCAG20/)
+const float BRIGHTNESS_THRESHOLD = 0.179f;
+const float CONSTANT_R = 0.2126f;
+const float CONSTANT_G = 0.7152f;
+const float CONSTANT_B = 0.0722f;
+const Dali::Vector4 BLACK(0.f, 0.f, 0.f, 1.f);
+const Dali::Vector4 WHITE(1.f, 1.f, 1.f, 1.f);
const Dali::Vector4 LIGHT_BLUE(0.75f, 0.96f, 1.f, 1.f);
const Dali::Vector4 BACKGROUND_SUB4(0.58f, 0.87f, 0.96f, 1.f);
const Dali::Vector4 BACKGROUND_SUB5(0.83f, 0.94f, 0.98f, 1.f);
startIndex,
requestedNumberOfCharacters,
bidirectionalInfo,
- mModel->mMatchSystemLanguageDirection,
+ (mModel->mMatchLayoutDirection != DevelText::MatchLayoutDirection::CONTENTS),
mLayoutDirection);
if(0u != bidirectionalInfo.Count())
backgroundColorRun.color = textColor;
mModel->mLogicalModel->mBackgroundColorRuns.PushBack(backgroundColorRun);
- Vector4 backgroundColor = mModel->mVisualModel->GetBackgroundColor();
+ Vector4 backgroundColor = mModel->mVisualModel->GetBackgroundColor();
+ if(backgroundColor.a == 0) // There is no text background color.
+ {
+ // Try use the control's background color.
+ if(nullptr != mEditableControlInterface)
+ {
+ mEditableControlInterface->GetControlBackgroundColor(backgroundColor);
+ if(backgroundColor.a == 0) // There is no control background color.
+ {
+ // Determines black or white color according to text color.
+ // Based on W3C Recommendations (https://www.w3.org/TR/WCAG20/)
+ float L = CONSTANT_R * textColor.r + CONSTANT_G * textColor.g + CONSTANT_B * textColor.b;
+ backgroundColor = L > BRIGHTNESS_THRESHOLD ? BLACK : WHITE;
+ }
+ }
+ }
+
Vector<ColorRun> colorRuns;
colorRuns.Resize(1u);
ColorRun& colorRun = *(colorRuns.Begin());
cursorInfo.primaryCursorHeight = cursorInfo.lineHeight;
bool isRTL = false;
- if(mModel->mMatchSystemLanguageDirection)
+ if(mModel->mMatchLayoutDirection != DevelText::MatchLayoutDirection::CONTENTS)
{
isRTL = mLayoutDirection == LayoutDirection::RIGHT_TO_LEFT;
}
// Get the background color of the character.
// The color index zero is reserved for the default background color (i.e. Color::TRANSPARENT)
- const ColorIndex backgroundColorIndex = (nullptr == backgroundColorsBuffer) ? 0u : *(backgroundColorIndicesBuffer + i);
- const Vector4& backgroundColor = (0u == backgroundColorIndex) ? defaultBackgroundColor : *(backgroundColorsBuffer + backgroundColorIndex - 1u);
+ const bool isMarkupBackground = mView.IsMarkupBackgroundColorSet();
+ const ColorIndex backgroundColorIndex = isMarkupBackground ? *(backgroundColorIndicesBuffer + i) : 0u;
+ const bool isDefaultBackgroundColor = (0u == backgroundColorIndex);
+ const Vector4& backgroundColor = isDefaultBackgroundColor ? defaultBackgroundColor : *(backgroundColorsBuffer + backgroundColorIndex - 1u);
mModel->mVisualModel->GetNumberOfLines(i, 1, lineIndex, numberOfLines);
Length lineHeight = lineRun[lineIndex].ascender + -(lineRun[lineIndex].descender) + lineRun[lineIndex].lineSpacing;
mTextFitMaxSize(DEFAULT_TEXTFIT_MAX),
mTextFitStepSize(DEFAULT_TEXTFIT_STEP),
mTextFitEnabled(false),
- mFontSizeScale(DEFAULT_FONT_SIZE_SCALE)
+ mFontSizeScale(DEFAULT_FONT_SIZE_SCALE),
+ mIsLayoutDirectionChanged(false)
{
mModel = Model::New();
Shader mShaderBackground; ///< The shader for text background.
- float mTextFitMinSize; ///< Minimum Font Size for text fit. Default 10
- float mTextFitMaxSize; ///< Maximum Font Size for text fit. Default 100
- float mTextFitStepSize; ///< Step Size for font intervalse. Default 1
- bool mTextFitEnabled : 1; ///< Whether the text's fit is enabled.
- float mFontSizeScale; ///< Scale value for Font Size. Default 1.0
+ float mTextFitMinSize; ///< Minimum Font Size for text fit. Default 10
+ float mTextFitMaxSize; ///< Maximum Font Size for text fit. Default 100
+ float mTextFitStepSize; ///< Step Size for font intervalse. Default 1
+ bool mTextFitEnabled : 1; ///< Whether the text's fit is enabled.
+ float mFontSizeScale; ///< Scale value for Font Size. Default 1.0
+ bool mIsLayoutDirectionChanged : 1; ///< Whether the layout has changed.
private:
friend ControllerImplEventHandler;
textUpdateInfo.mCharacterIndex = 0u;
}
- if(model->mMatchSystemLanguageDirection && impl.mLayoutDirection != layoutDirection)
+ if(impl.mLayoutDirection != layoutDirection)
{
// Clear the update info. This info will be set the next time the text is updated.
textUpdateInfo.mClearAll = true;
GET_GLYPH_METRICS |
SHAPE_TEXT |
UPDATE_DIRECTION |
+ ALIGN |
LAYOUT |
BIDI_INFO |
REORDER);
lines,
impl.mModel->mAlignmentOffset,
impl.mLayoutDirection,
- impl.mModel->mMatchSystemLanguageDirection);
+ (impl.mModel->mMatchLayoutDirection != DevelText::MatchLayoutDirection::CONTENTS));
viewUpdated = true;
}
#include <dali-toolkit/internal/text/text-controller.h>
// EXTERNAL INCLUDES
+#include <dali-toolkit/devel-api/controls/control-depth-index-ranges.h>
+#include <dali/devel-api/adaptor-framework/window-devel.h>
#include <dali/integration-api/debug.h>
#include <memory.h>
#include <cmath>
mImpl->mModel->mIgnoreSpacesAfterText = ignore;
}
-bool Controller::IsMatchSystemLanguageDirection() const
+void Controller::ChangedLayoutDirection()
{
- return mImpl->mModel->mMatchSystemLanguageDirection;
+ mImpl->mIsLayoutDirectionChanged = true;
}
-void Controller::SetMatchSystemLanguageDirection(bool match)
+void Controller::SetMatchLayoutDirection(DevelText::MatchLayoutDirection type)
{
- mImpl->mModel->mMatchSystemLanguageDirection = match;
+ mImpl->mModel->mMatchLayoutDirection = type;
+}
+
+DevelText::MatchLayoutDirection Controller::GetMatchLayoutDirection() const
+{
+ return mImpl->mModel->mMatchLayoutDirection;
}
void Controller::SetLayoutDirection(Dali::LayoutDirection::Type layoutDirection)
mImpl->mLayoutDirection = layoutDirection;
}
+Dali::LayoutDirection::Type Controller::GetLayoutDirection(Dali::Actor& actor) const
+{
+ if(mImpl->mModel->mMatchLayoutDirection == DevelText::MatchLayoutDirection::LOCALE ||
+ (mImpl->mModel->mMatchLayoutDirection == DevelText::MatchLayoutDirection::INHERIT && !mImpl->mIsLayoutDirectionChanged))
+ {
+ return static_cast<Dali::LayoutDirection::Type>(DevelWindow::Get(actor).GetRootLayer().GetProperty(Dali::Actor::Property::LAYOUT_DIRECTION).Get<int>());
+ }
+ else
+ {
+ return static_cast<Dali::LayoutDirection::Type>(actor.GetProperty(Dali::Actor::Property::LAYOUT_DIRECTION).Get<int>());
+ }
+}
+
bool Controller::IsShowingRealText() const
{
return mImpl->IsShowingRealText();
void SetIgnoreSpacesAfterText(bool ignore);
/**
- * @brief Retrieves matchSystemLanguageDirection value from model
- * @return The value of matchSystemLanguageDirection
+ * @brief Sets SetMatchLayoutDirection value to model
+ * @param[in] match The value of matchLayoutDirection for the text
*/
- bool IsMatchSystemLanguageDirection() const;
+ void SetMatchLayoutDirection(DevelText::MatchLayoutDirection type);
/**
- * @brief Sets matchSystemLanguageDirection value to model
- * @param[in] match The value of matchSystemLanguageDirection for the text
+ * @brief Retrieves matchLayoutDirection value from model
+ * @return The value of matchLayoutDirection
*/
- void SetMatchSystemLanguageDirection(bool match);
+ DevelText::MatchLayoutDirection GetMatchLayoutDirection() const;
/**
- * @brief Sets layoutDirection value
- * @param[in] layoutDirection The value of system language direction
+ * @brief Sets layoutDirection type value.
+ * @param[in] layoutDirection The value of the layout direction type.
*/
void SetLayoutDirection(Dali::LayoutDirection::Type layoutDirection);
/**
+ * @brief Gets layoutDirection type value.
+ * @param[in] actor The actor which will get the layout direction type.
+ * @return The value of the layout direction type.
+ */
+ Dali::LayoutDirection::Type GetLayoutDirection(Dali::Actor& actor) const;
+
+ /**
+ * @brief Sets the layout direction changed.
+ */
+ void ChangedLayoutDirection();
+
+ /**
* @brief Retrieves if showing real text or not.
* @return The value of showing real text.
*/
/**
* @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;
virtual void AddDecoration(Actor& actor, bool needsClipping) = 0;
/**
+ * @brief Gets the color of the control.
+ *
+ * @param[out] The color of the control.
+ */
+ virtual void GetControlBackgroundColor(Vector4& color) const = 0;
+
+ /**
* @brief Editable status (on/off).
*
* @return true if it can be edit, else false.
bool const Model::IsMarkupBackgroundColorSet() const
{
- return (mVisualModel->mBackgroundColorIndices.Count() > 0);
+ return (mVisualModel->mBackgroundColors.Count() > 0);
}
const Vector4& Model::GetDefaultColor() const
mAlignmentOffset(0.0f),
mElideEnabled(false),
mIgnoreSpacesAfterText(true),
- mMatchSystemLanguageDirection(true)
+ mMatchLayoutDirection(DevelText::MatchLayoutDirection::INHERIT)
{
mLogicalModel = LogicalModel::New();
mVisualModel = VisualModel::New();
// Check environment variable for DALI_MATCH_SYSTEM_LANGUAGE_DIRECTION
- auto match = Dali::EnvironmentVariable::GetEnvironmentVariable(DALI_ENV_MATCH_SYSTEM_LANGUAGE_DIRECTION);
- mMatchSystemLanguageDirection = match ? (std::atoi(match) == 0 ? false : true) : mMatchSystemLanguageDirection;
+ auto match = Dali::EnvironmentVariable::GetEnvironmentVariable(DALI_ENV_MATCH_SYSTEM_LANGUAGE_DIRECTION);
+ if(match && (std::atoi(match) == 0))
+ {
+ mMatchLayoutDirection = DevelText::MatchLayoutDirection::CONTENTS;
+ }
}
Model::~Model()
* 0,0 means that the top-left corner of the layout matches the top-left corner of the UI control.
* Typically this will have a negative value with scrolling occurs.
*/
- Vector2 mScrollPosition; ///< The text is offset by this position when scrolling.
- Vector2 mScrollPositionLast; ///< The last offset value of mScrollPosition
- HorizontalAlignment::Type mHorizontalAlignment; ///< The layout's horizontal alignment.
- VerticalAlignment::Type mVerticalAlignment; ///< The layout's vertical alignment.
- DevelText::VerticalLineAlignment::Type mVerticalLineAlignment; ///< The layout's vertical line alignment.
- Text::LineWrap::Mode mLineWrapMode; ///< The text wrap mode
- float mAlignmentOffset; ///< The alignment offset.
- bool mElideEnabled : 1; ///< Whether the text's elide is enabled.
- bool mIgnoreSpacesAfterText : 1; ///< Whether ignoring spaces after text or not. Default is true.
- bool mMatchSystemLanguageDirection : 1; ///< Whether match align for system language direction or not. Default is false.
+ Vector2 mScrollPosition; ///< The text is offset by this position when scrolling.
+ Vector2 mScrollPositionLast; ///< The last offset value of mScrollPosition
+ HorizontalAlignment::Type mHorizontalAlignment; ///< The layout's horizontal alignment.
+ VerticalAlignment::Type mVerticalAlignment; ///< The layout's vertical alignment.
+ DevelText::VerticalLineAlignment::Type mVerticalLineAlignment; ///< The layout's vertical line alignment.
+ Text::LineWrap::Mode mLineWrapMode; ///< The text wrap mode
+ float mAlignmentOffset; ///< The alignment offset.
+ bool mElideEnabled : 1; ///< Whether the text's elide is enabled.
+ bool mIgnoreSpacesAfterText : 1; ///< Whether ignoring spaces after text or not. Default is true.
+ DevelText::MatchLayoutDirection mMatchLayoutDirection; ///< Whether to match text alignment with layout direction or not.
};
} // namespace Text
{
if(mImpl->mVisualModel)
{
- return (mImpl->mVisualModel->mBackgroundColorIndices.Count() > 0);
+ return (mImpl->mVisualModel->mBackgroundColors.Count() > 0);
}
return false;
// EXTERNAL INCLUDES
#include <dali/devel-api/adaptor-framework/image-loading.h>
-#include <dali/devel-api/adaptor-framework/window-devel.h>
#include <dali/devel-api/images/pixel-data-devel.h>
#include <dali/devel-api/rendering/renderer-devel.h>
#include <dali/devel-api/text-abstraction/text-abstraction-definitions.h>
return;
}
- Dali::LayoutDirection::Type layoutDirection;
- if(mController->IsMatchSystemLanguageDirection())
- {
- layoutDirection = static_cast<Dali::LayoutDirection::Type>(DevelWindow::Get(control).GetRootLayer().GetProperty(Dali::Actor::Property::LAYOUT_DIRECTION).Get<int>());
- }
- else
- {
- layoutDirection = static_cast<Dali::LayoutDirection::Type>(control.GetProperty(Dali::Actor::Property::LAYOUT_DIRECTION).Get<int>());
- }
+ Dali::LayoutDirection::Type layoutDirection = mController->GetLayoutDirection(control);
const Text::Controller::UpdateTextType updateTextType = mController->Relayout(relayoutSize, layoutDirection);
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "الحافظة"
+msgid "slider"
+msgstr ""
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Mübadilə buferi"
+msgid "icon"
+msgstr "Piktoqram"
+
+msgid "slider"
+msgstr "Sürüngəc"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Системен буфер"
+msgid "icon"
+msgstr "Икона"
+
+msgid "slider"
+msgstr "Плъзгач"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "ক্লিপবোর্ড"
+msgid "icon"
+msgstr "Icon"
+
+msgid "slider"
+msgstr "স্লাইডার"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Porta-retalls"
+msgid "slider"
+msgstr "control lliscant"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Schránka"
+msgid "slider"
+msgstr "šoupátko"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Udklipsholder"
+msgid "icon"
+msgstr "Ikon"
+
+msgid "slider"
+msgstr "skyder"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Zwischenablage"
+msgid "slider"
+msgstr ""
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Πρόχειρο"
+msgid "icon"
+msgstr "Εικονίδιο"
+
+msgid "slider"
+msgstr "Ρυθμιστικό"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Clipboard"
+msgid "icon"
+msgstr "Icon"
+
+msgid "slider"
+msgstr "Slider"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Clipboard"
+msgid "icon"
+msgstr "Icon"
+
+msgid "slider"
+msgstr "Slider"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Portapapeles"
+msgid "icon"
+msgstr "Icono"
+
+msgid "slider"
+msgstr "Controlador deslizante"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Portapapeles"
+msgid "icon"
+msgstr "Icono"
+
+msgid "slider"
+msgstr "Controlador deslizante"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Lõikelaud"
+msgid "icon"
+msgstr "Ikoon"
+
+msgid "slider"
+msgstr "Liugur"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Arbela"
+msgid "icon"
+msgstr "Ikonoa"
+
+msgid "slider"
+msgstr "Irristagailua"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "کلیپ بورد"
+msgid "slider"
+msgstr ""
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Leikepöytä"
+msgid "slider"
+msgstr "liukusäädin"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Presse-papier"
+msgid "slider"
+msgstr "curseur"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Presse-papier"
+msgid "icon"
+msgstr "Icône"
+
+msgid "slider"
+msgstr "Curseur"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Portapapeis"
+msgid "slider"
+msgstr "Barra de desprazamento"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Međuspremnik"
+msgid "icon"
+msgstr "Ikona"
+
+msgid "slider"
+msgstr "Klizač"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Vágólap"
+msgid "slider"
+msgstr "csúszka"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Գզրոց"
+msgid "icon"
+msgstr "Պատկերակ"
+
+msgid "slider"
+msgstr "Սողանիկ"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Klippiborð"
+msgid "icon"
+msgstr "Tákn"
+
+msgid "slider"
+msgstr "Skyggna"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Appunti"
+msgid "icon"
+msgstr "Icona"
+
+msgid "slider"
+msgstr "Dispositivo di scorrimento"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "ბუფერული მეხს."
+msgid "icon"
+msgstr "ნიშანი"
+
+msgid "slider"
+msgstr "სლაიდერი"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Буфер"
+msgid "icon"
+msgstr "Белгіше"
+
+msgid "slider"
+msgstr "Сырғытпа"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "클립보드"
+msgid "slider"
+msgstr "슬라이더"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Iškarpinė"
+msgid "slider"
+msgstr "šliaužiklis"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Starpliktuve"
+msgid "icon"
+msgstr "Ikona"
+
+msgid "slider"
+msgstr "Slīdnis"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Түр санах ой"
+msgid "icon"
+msgstr "Дүрс"
+
+msgid "slider"
+msgstr "Slider"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Utklippstavle"
+msgid "icon"
+msgstr "Ikon"
+
+msgid "slider"
+msgstr "Glidebryter"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Klembord"
+msgid "slider"
+msgstr ""
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Schowek"
+msgid "slider"
+msgstr "slajder"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Área de transferência"
+msgid "icon"
+msgstr "Ícone"
+
+msgid "slider"
+msgstr "Controle deslizante"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Área transferência"
+msgid "icon"
+msgstr "Ícone"
+
+msgid "slider"
+msgstr "Cursor de deslocamento"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Clipboard"
+msgid "icon"
+msgstr "Pictogr."
+
+msgid "slider"
+msgstr "Cursor"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Буфер обмена"
+msgid "icon"
+msgstr "Значок"
+
+msgid "slider"
+msgstr "Ползунок"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Schránka"
+msgid "icon"
+msgstr "Ikona"
+
+msgid "slider"
+msgstr "Posuvný ovládač"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Odložišče"
+msgid "slider"
+msgstr "drsnik"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Privremena memorija"
+msgid "slider"
+msgstr "клизач"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Urklipp"
+msgid "icon"
+msgstr "Ikon"
+
+msgid "slider"
+msgstr "Slider"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Pano"
+msgid "icon"
+msgstr "Simge"
+
+msgid "slider"
+msgstr "Kaydırıcı"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Буфер обміну"
+msgid "icon"
+msgstr "Значок"
+
+msgid "slider"
+msgstr "Слайдер"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "کلپ بورڈ"
+msgid "slider"
+msgstr ""
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Bufer"
+msgid "icon"
+msgstr "Ikoncha"
+
+msgid "slider"
+msgstr "Slider"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "Bộ nhớ tạm"
+msgid "slider"
+msgstr "Thanh Trượt"
msgid "IDS_COM_BODY_CLIPBOARD"
msgstr "剪贴板"
+msgid "slider"
+msgstr "滑块"
{
const unsigned int TOOLKIT_MAJOR_VERSION = 2;
const unsigned int TOOLKIT_MINOR_VERSION = 0;
-const unsigned int TOOLKIT_MICRO_VERSION = 32;
+const unsigned int TOOLKIT_MICRO_VERSION = 34;
const char* const TOOLKIT_BUILD_DATE = __DATE__ " " __TIME__;
#ifdef DEBUG_ENABLED
Name: dali2-toolkit
Summary: Dali 3D engine Toolkit
-Version: 2.0.32
+Version: 2.0.34
Release: 1
Group: System/Libraries
License: Apache-2.0 and BSD-3-Clause and MIT