From: David Steele Date: Fri, 16 Apr 2021 13:03:35 +0000 (+0100) Subject: [dali_2.0.22] Merge branch 'devel/master' X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=fdf726f51871aaaacf8c29cc688fdf546fc6e464;hp=8189dd071c31a8958d71d99fc9cd65de6a85ccb6 [dali_2.0.22] Merge branch 'devel/master' Change-Id: Ief122d9abf8ebae0e2591056cae1391eb8c20f30 --- diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls.cpp index bd8f3a4..f3d97a9 100644 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls.cpp @@ -98,6 +98,9 @@ int UtcDaliAccessibilityPushButtonStates(void) Dali::Accessibility::TestEnableSC( true ); + /* add to scene and remove from scene to touch AccessibilityDeregister */ + application.GetScene().Add( pushbutton ); + auto states = accessible->GetStates(); DALI_TEST_EQUALS( static_cast< unsigned int >( states[ Accessibility::State::PRESSED ] ), false, TEST_LOCATION ); @@ -108,6 +111,9 @@ int UtcDaliAccessibilityPushButtonStates(void) states = accessible->GetStates(); DALI_TEST_EQUALS( static_cast< unsigned int >( states[ Accessibility::State::PRESSED ] ), true, TEST_LOCATION ); + /* add to scene and remove from scene to touch AccessibilityDeregister */ + application.GetScene().Remove( pushbutton ); + Dali::Accessibility::TestEnableSC( false ); END_TEST; diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-web-engine.cpp b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-web-engine.cpp index d760930..430615d 100755 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-web-engine.cpp +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-web-engine.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -38,6 +39,7 @@ #include #include #include +#include #include #include #include @@ -70,6 +72,7 @@ bool OnEvaluteJavaScript(); bool OnJavaScriptAlert(); bool OnJavaScriptConfirm(); bool OnJavaScriptPrompt(); +bool OnHitTestCreated(); bool OnScrollEdge(); bool OnScreenshotCaptured(); bool OnVideoPlaying(); @@ -227,30 +230,6 @@ private: Dali::WebEngineContext::CacheModel mockModel; }; -class MockWebEngineSecurityOrigin : public Dali::WebEngineSecurityOrigin -{ -public: - MockWebEngineSecurityOrigin() - : mockUrl("https://test.html") - , mockPotocol("https") - { - } - - std::string GetHost() const - { - return mockUrl; - } - - std::string GetProtocol() const - { - return mockPotocol; - } - -private: - std::string mockUrl; - std::string mockPotocol; -}; - class MockWebEngineCookieManager : public Dali::WebEngineCookieManager { public: @@ -316,19 +295,31 @@ class MockWebEngineBackForwardList : public Dali::WebEngineBackForwardList { public: MockWebEngineBackForwardList() - : mockItem(), - pMockItem( &mockItem ) { } - Dali::WebEngineBackForwardListItem& GetCurrentItem() const override + std::unique_ptr GetCurrentItem() const override + { + std::unique_ptr ret(new MockWebEngineBackForwardListItem()); + return ret; + } + + std::unique_ptr GetPreviousItem() const override + { + std::unique_ptr ret(new MockWebEngineBackForwardListItem()); + return ret; + } + + std::unique_ptr GetNextItem() const override { - return *pMockItem; + std::unique_ptr ret(new MockWebEngineBackForwardListItem()); + return ret; } - Dali::WebEngineBackForwardListItem& GetItemAtIndex( uint32_t index ) const override + std::unique_ptr GetItemAtIndex( uint32_t index ) const override { - return *pMockItem; + std::unique_ptr ret(new MockWebEngineBackForwardListItem()); + return ret; } uint32_t GetItemCount() const override @@ -336,11 +327,24 @@ public: return 1; } -private: - MockWebEngineBackForwardListItem mockItem; - WebEngineBackForwardListItem* pMockItem; + std::vector> GetBackwardItems(int limit) override + { + std::vector> ret; + std::unique_ptr item(new MockWebEngineBackForwardListItem()); + ret.push_back(std::move(item)); + return ret; + } + + std::vector> GetForwardItems(int limit) override + { + std::vector> ret; + std::unique_ptr item(new MockWebEngineBackForwardListItem()); + ret.push_back(std::move(item)); + return ret; + } }; + class MockWebEngineCertificate : public Dali::WebEngineCertificate { public: @@ -676,6 +680,100 @@ public: } }; +class MockWebEngineHitTest : public Dali::WebEngineHitTest +{ +public: + MockWebEngineHitTest() + { + } + + ResultContext GetResultContext() const override + { + return ResultContext::DOCUMENT; + } + + std::string GetLinkUri() const override + { + return "http://test.html"; + } + + std::string GetLinkTitle() const override + { + return "test"; + } + + std::string GetLinkLabel() const override + { + return "label"; + } + + std::string GetImageUri() const override + { + return "http://test.jpg"; + } + + std::string GetMediaUri() const override + { + return "http://test.mp4"; + } + + std::string GetTagName() const override + { + return "img"; + } + + std::string GetNodeValue() const override + { + return "test"; + } + + Dali::Property::Map& GetAttributes() const override + { + return mockAttributesMap; + } + + std::string GetImageFileNameExtension() const override + { + return "jpg"; + } + + Dali::PixelData GetImageBuffer() override + { + uint8_t* faviconData = new uint8_t[ 16 ]; + memset(faviconData, 0xff, 16); + return Dali::PixelData::New( faviconData, 16, 2, 2, + Dali::Pixel::Format::RGBA8888, + Dali::PixelData::ReleaseFunction::DELETE_ARRAY ); + } + +private: + mutable Dali::Property::Map mockAttributesMap; +}; + +class MockWebEngineSecurityOrigin : public Dali::WebEngineSecurityOrigin +{ +public: + MockWebEngineSecurityOrigin() + : mockUrl("https://test.html") + , mockPotocol("https") + { + } + + std::string GetHost() const + { + return mockUrl; + } + + std::string GetProtocol() const + { + return mockPotocol; + } + +private: + std::string mockUrl; + std::string mockPotocol; +}; + class MockWebEngineSettings : public WebEngineSettings { public: @@ -891,6 +989,40 @@ public: { } + bool SetViewportMetaTag(bool enable) override + { + return true; + } + + bool SetForceZoom(bool enable) override + { + return true; + } + + bool IsZoomForced() const override + { + return true; + } + + bool SetTextZoomEnabled(bool enable) override + { + return true; + } + + bool IsTextZoomEnabled() const override + { + return true; + } + + void SetExtraFeature(const std::string& feature, bool enable) override + { + } + + bool IsExtraFeatureEnabled(const std::string& feature) const override + { + return true; + } + private: int mockDefaultFontSize; bool mockJavaScriptEnabled; @@ -1078,6 +1210,22 @@ public: } } + std::unique_ptr CreateHitTest(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode) + { + std::unique_ptr hitTest(new MockWebEngineHitTest()); + return hitTest; + } + + bool CreateHitTestAsynchronously(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode, Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback callback) + { + if (callback) + { + ConnectToGlobalSignal( &OnHitTestCreated ); + mHitTestCreatedCallback = callback; + } + return true; + } + void ClearHistory() { ConnectToGlobalSignal( &OnClearHistory ); @@ -1093,7 +1241,7 @@ public: mUserAgent = userAgent; } - void ScrollBy( int dx, int dy ) + void ScrollBy( int32_t dx, int32_t dy ) { mScrollPosition += Dali::Vector2( dx, dy ); if ( mScrollPosition.y + mScrollSize.height > mContentSize.height ) @@ -1102,7 +1250,7 @@ public: } } - bool ScrollEdgeBy( int dx, int dy ) + bool ScrollEdgeBy( int32_t dx, int32_t dy ) { mScrollPosition += Dali::Vector2( dx, dy ); if ( mScrollPosition.y + mScrollSize.height > mContentSize.height ) @@ -1112,7 +1260,7 @@ public: return true; } - void SetScrollPosition( int x, int y ) + void SetScrollPosition( int32_t x, int32_t y ) { mScrollPosition.x = x; mScrollPosition.y = y; @@ -1168,7 +1316,7 @@ public: return mScaleFactor; } - Dali::PixelData GetScreenshot(Dali::Rect viewArea, float scaleFactor) + Dali::PixelData GetScreenshot(Dali::Rect viewArea, float scaleFactor) { uint32_t bufferSize = viewArea.width * viewArea.height * 4 ; uint8_t* pixel = new uint8_t[ bufferSize ]; @@ -1178,7 +1326,7 @@ public: Dali::PixelData::ReleaseFunction::DELETE_ARRAY ); } - bool GetScreenshotAsynchronously(Dali::Rect viewArea, float scaleFactor, Dali::WebEnginePlugin::ScreenshotCapturedCallback callback) + bool GetScreenshotAsynchronously(Dali::Rect viewArea, float scaleFactor, Dali::WebEnginePlugin::ScreenshotCapturedCallback callback) { if ( callback ) { @@ -1322,13 +1470,14 @@ public: WebEngineCookieManager* mockWebEngineCookieManager; WebEngineSettings* mockWebEngineSettings; - std::vector mResultCallbacks; - Dali::WebEnginePlugin::JavaScriptAlertCallback mJavaScriptAlertCallback; - Dali::WebEnginePlugin::JavaScriptConfirmCallback mJavaScriptConfirmCallback; - Dali::WebEnginePlugin::JavaScriptPromptCallback mJavaScriptPromptCallback; - Dali::WebEnginePlugin::ScreenshotCapturedCallback mScreenshotCapturedCallback; - Dali::WebEnginePlugin::VideoPlayingCallback mVideoPlayingCallback; - Dali::WebEnginePlugin::GeolocationPermissionCallback mGeolocationPermissionCallback; + std::vector mResultCallbacks; + Dali::WebEnginePlugin::JavaScriptAlertCallback mJavaScriptAlertCallback; + Dali::WebEnginePlugin::JavaScriptConfirmCallback mJavaScriptConfirmCallback; + Dali::WebEnginePlugin::JavaScriptPromptCallback mJavaScriptPromptCallback; + Dali::WebEnginePlugin::ScreenshotCapturedCallback mScreenshotCapturedCallback; + Dali::WebEnginePlugin::VideoPlayingCallback mVideoPlayingCallback; + Dali::WebEnginePlugin::GeolocationPermissionCallback mGeolocationPermissionCallback; + Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback mHitTestCreatedCallback; }; @@ -1494,6 +1643,17 @@ bool OnGeolocationPermission() return false; } +bool OnHitTestCreated() +{ + DisconnectFromGlobalSignal(&OnHitTestCreated); + if (gInstance) + { + std::unique_ptr test(new MockWebEngineHitTest()); + gInstance->mHitTestCreatedCallback(std::move(test)); + } + return false; +} + bool OnClearHistory() { DisconnectFromGlobalSignal( &OnClearHistory ); @@ -1624,11 +1784,11 @@ WebEngine WebEngine::DownCast( BaseHandle handle ) return WebEngine( dynamic_cast< Internal::Adaptor::WebEngine* >( handle.GetObjectPtr() ) ); } -void WebEngine::Create( int width, int height, const std::string& locale, const std::string& timezoneId ) +void WebEngine::Create( uint32_t width, uint32_t height, const std::string& locale, const std::string& timezoneId ) { } -void WebEngine::Create( int width, int height, int argc, char** argv ) +void WebEngine::Create( uint32_t width, uint32_t height, uint32_t argc, char** argv ) { } @@ -1802,6 +1962,16 @@ void WebEngine::JavaScriptPromptReply( const std::string& result ) { } +std::unique_ptr WebEngine::CreateHitTest(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode) +{ + return Internal::Adaptor::GetImplementation(*this).CreateHitTest(x, y, mode); +} + +bool WebEngine::CreateHitTestAsynchronously(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode, Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback callback) +{ + return Internal::Adaptor::GetImplementation(*this).CreateHitTestAsynchronously(x, y, mode, callback); +} + void WebEngine::ClearAllTilesResources() { } @@ -1834,12 +2004,12 @@ void WebEngine::AddDynamicCertificatePath(const std::string& host, const std::st { } -Dali::PixelData WebEngine::GetScreenshot(Dali::Rect viewArea, float scaleFactor) +Dali::PixelData WebEngine::GetScreenshot(Dali::Rect viewArea, float scaleFactor) { return Internal::Adaptor::GetImplementation( *this ).GetScreenshot(viewArea, scaleFactor); } -bool WebEngine::GetScreenshotAsynchronously(Dali::Rect viewArea, float scaleFactor, Dali::WebEnginePlugin::ScreenshotCapturedCallback callback) +bool WebEngine::GetScreenshotAsynchronously(Dali::Rect viewArea, float scaleFactor, Dali::WebEnginePlugin::ScreenshotCapturedCallback callback) { return Internal::Adaptor::GetImplementation( *this ).GetScreenshotAsynchronously(viewArea, scaleFactor, callback); } @@ -1864,17 +2034,17 @@ void WebEngine::SetUserAgent( const std::string& userAgent ) Internal::Adaptor::GetImplementation( *this ).SetUserAgent( userAgent ); } -void WebEngine::ScrollBy( int dx, int dy ) +void WebEngine::ScrollBy( int32_t dx, int32_t dy ) { Internal::Adaptor::GetImplementation( *this ).ScrollBy( dx, dy ); } -bool WebEngine::ScrollEdgeBy( int dx, int dy ) +bool WebEngine::ScrollEdgeBy( int32_t dx, int32_t dy ) { return Internal::Adaptor::GetImplementation( *this ).ScrollEdgeBy( dx, dy ); } -void WebEngine::SetScrollPosition( int x, int y ) +void WebEngine::SetScrollPosition( int32_t x, int32_t y ) { Internal::Adaptor::GetImplementation( *this ).SetScrollPosition( x, y ); } @@ -1894,7 +2064,7 @@ Dali::Vector2 WebEngine::GetContentSize() const return Internal::Adaptor::GetImplementation( *this ).GetContentSize(); } -void WebEngine::SetSize( int width, int height ) +void WebEngine::SetSize( uint32_t width, uint32_t height ) { } @@ -1968,7 +2138,7 @@ float WebEngine::GetLoadProgressPercentage() const return Internal::Adaptor::GetImplementation( *this ).GetLoadProgressPercentage(); } -void WebEngine::UpdateDisplayArea( Dali::Rect< int > displayArea ) +void WebEngine::UpdateDisplayArea( Dali::Rect< int32_t > displayArea ) { } diff --git a/automated-tests/src/dali-toolkit/utc-Dali-AnimatedImageVisual.cpp b/automated-tests/src/dali-toolkit/utc-Dali-AnimatedImageVisual.cpp index c77b4ac..6d74b7c 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-AnimatedImageVisual.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-AnimatedImageVisual.cpp @@ -90,9 +90,9 @@ int UtcDaliAnimatedImageVisualGetPropertyMap01(void) DALI_TEST_CHECK( value ); DALI_TEST_CHECK( value->Get() == TEST_GIF_FILE_NAME ); - value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::FLOAT ); + value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4 ); DALI_TEST_CHECK( value ); - DALI_TEST_EQUALS( value->Get(), 22.2f, TEST_LOCATION ); + DALI_TEST_EQUALS( value->Get(), Vector4(22.2f, 22.2f, 22.2f, 22.2f), TEST_LOCATION ); value = resultMap.Find( Toolkit::DevelVisual::Property::CORNER_RADIUS_POLICY, Property::INTEGER ); DALI_TEST_CHECK( value ); @@ -136,7 +136,7 @@ int UtcDaliAnimatedImageVisualGetPropertyMap02(void) .Add( "pixelArea", Vector4() ) .Add( "wrapModeU", WrapMode::REPEAT ) .Add( "wrapModeV", WrapMode::DEFAULT ) - .Add( "cornerRadius", 50.0f ) + .Add( "cornerRadius", Vector4(50.0f, 25.0f, 12.5f, 33.0f) ) .Add( "cornerRadiusPolicy", Visual::Transform::Policy::RELATIVE )); Property::Map resultMap; @@ -174,7 +174,7 @@ int UtcDaliAnimatedImageVisualGetPropertyMap02(void) value = resultMap.Find( Toolkit::DevelVisual::Property::CORNER_RADIUS, "cornerRadius" ); DALI_TEST_CHECK( value ); - DALI_TEST_EQUALS( value->Get(), 50.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( value->Get(), Vector4(50.0f, 25.0f, 12.5f, 33.0f), TEST_LOCATION ); value = resultMap.Find( Toolkit::DevelVisual::Property::CORNER_RADIUS_POLICY, "cornerRadiusPolicy" ); DALI_TEST_CHECK( value ); @@ -242,7 +242,7 @@ int UtcDaliAnimatedImageVisualGetPropertyMap03(void) value = resultMap.Find( Toolkit::DevelVisual::Property::CORNER_RADIUS, "cornerRadius" ); DALI_TEST_CHECK( value ); - DALI_TEST_EQUALS( value->Get(), 50.5f, TEST_LOCATION ); + DALI_TEST_EQUALS( value->Get(), Vector4(50.5f, 50.5f, 50.5f, 50.5f), TEST_LOCATION ); value = resultMap.Find( Toolkit::DevelVisual::Property::CORNER_RADIUS_POLICY, "cornerRadiusPolicy" ); DALI_TEST_CHECK( value ); diff --git a/automated-tests/src/dali-toolkit/utc-Dali-AnimatedVectorImageVisual.cpp b/automated-tests/src/dali-toolkit/utc-Dali-AnimatedVectorImageVisual.cpp index b692ebb..dfd0b72 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-AnimatedVectorImageVisual.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-AnimatedVectorImageVisual.cpp @@ -172,7 +172,7 @@ int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void) tet_infoline( "UtcDaliVisualFactoryGetAnimatedVectorImageVisual04: Request animated vector image visual with a Property::Map" ); int startFrame = 1, endFrame = 3; - float cornerRadius = 50.0f; + float cornerRadius = 22.0f; Property::Array playRange; playRange.PushBack( startFrame ); playRange.PushBack( endFrame ); @@ -241,9 +241,9 @@ int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void) DALI_TEST_CHECK( value ); DALI_TEST_CHECK( value->Get< bool >() == false ); - value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::FLOAT ); + value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4 ); DALI_TEST_CHECK( value ); - DALI_TEST_EQUALS( value->Get< float >(), cornerRadius, TEST_LOCATION ); + DALI_TEST_EQUALS( value->Get< Vector4 >(), Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius), TEST_LOCATION ); value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS_POLICY, "cornerRadiusPolicy" ); DALI_TEST_CHECK( value ); @@ -261,7 +261,7 @@ int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void) tet_infoline( "UtcDaliAnimatedVectorImageVisualGetPropertyMap01" ); int startFrame = 1, endFrame = 3; - float cornerRadius = 50.0f; + Vector4 cornerRadius(50.0f, 22.0f, 0.0f, 3.0f); Property::Array playRange; playRange.PushBack( startFrame ); playRange.PushBack( endFrame ); @@ -332,9 +332,9 @@ int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void) DALI_TEST_CHECK( value ); DALI_TEST_CHECK( value->Get< bool >() == true ); // Check default value - value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::FLOAT ); + value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4 ); DALI_TEST_CHECK( value ); - DALI_TEST_EQUALS( value->Get< float >(), cornerRadius, TEST_LOCATION ); + DALI_TEST_EQUALS( value->Get< Vector4 >(), cornerRadius, TEST_LOCATION ); value = resultMap.Find( DevelVisual::Property::CORNER_RADIUS_POLICY, "cornerRadiusPolicy" ); DALI_TEST_CHECK( value ); diff --git a/automated-tests/src/dali-toolkit/utc-Dali-TextField.cpp b/automated-tests/src/dali-toolkit/utc-Dali-TextField.cpp index aa25cf2..05eaeb1 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-TextField.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-TextField.cpp @@ -3524,3 +3524,35 @@ int UtcDaliTextFieldPrimaryCursorPosition(void) END_TEST; } + +// test max length when set after setting long text +int utcDaliTextFieldMaxCharactersReachedAfterSetText(void) +{ + ToolkitTestApplication application; + tet_infoline(" utcDaliTextFieldMaxCharactersReachedAfterSetText"); + TextField field = TextField::New(); + DALI_TEST_CHECK( field ); + + application.GetScene().Add( field ); + + field.SetProperty(TextField::Property::TEXT, "123456789"); + + const int maxNumberOfCharacters = 3; + field.SetProperty( TextField::Property::MAX_LENGTH, maxNumberOfCharacters ); + + field.SetKeyInputFocus(); + + // connect to the text max lengh reached signal. + ConnectionTracker* testTracker = new ConnectionTracker(); + bool maxLengthReachedSignal = false; + field.ConnectSignal( testTracker, "maxLengthReached", CallbackFunctor(&maxLengthReachedSignal) ); + + application.ProcessEvent( GenerateKey( "a", "", "a", KEY_A_CODE, 0, 0, Integration::KeyEvent::DOWN, "a", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE ) ); + application.ProcessEvent( GenerateKey( "a", "", "a", KEY_A_CODE, 0, 0, Integration::KeyEvent::DOWN, "a", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE ) ); + + DALI_TEST_CHECK( maxLengthReachedSignal ); + + DALI_TEST_EQUALS( field.GetProperty( TextField::Property::TEXT ).Get(), "123456789", TEST_LOCATION ); + + END_TEST; +} \ No newline at end of file diff --git a/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp b/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp index a9a2ed2..127a611 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp @@ -516,9 +516,9 @@ int UtcDaliVisualGetPropertyMap1(void) DALI_TEST_CHECK( colorValue ); DALI_TEST_CHECK( colorValue->Get() == Color::BLUE ); - Property::Value* cornerRadiusValue = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::FLOAT ); + Property::Value* cornerRadiusValue = resultMap.Find( DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4 ); DALI_TEST_CHECK( cornerRadiusValue ); - DALI_TEST_CHECK( cornerRadiusValue->Get< float >() == 10.0f ); + DALI_TEST_CHECK( cornerRadiusValue->Get< Vector4 >() == Vector4(10.0f, 10.0f, 10.0f, 10.0f) ); Property::Value* cornerRadiusPolicyValue = resultMap.Find( DevelVisual::Property::CORNER_RADIUS_POLICY, Property::INTEGER ); DALI_TEST_CHECK( cornerRadiusPolicyValue ); @@ -3665,7 +3665,7 @@ int UtcDaliVisualRoundedCorner(void) static std::vector customUniforms = { - UniformData("cornerRadius", Property::Type::FLOAT), + UniformData("cornerRadius", Property::Type::VECTOR4), UniformData("cornerRadiusPolicy", Property::Type::FLOAT), }; @@ -3701,7 +3701,7 @@ int UtcDaliVisualRoundedCorner(void) application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadius", cornerRadius ), true, TEST_LOCATION ); + DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius) ), true, TEST_LOCATION ); // Default corner radius policy is absolute. DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION ); } @@ -3734,7 +3734,7 @@ int UtcDaliVisualRoundedCorner(void) application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadius", cornerRadius ), true, TEST_LOCATION ); + DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius) ), true, TEST_LOCATION ); DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION ); } @@ -3742,7 +3742,7 @@ int UtcDaliVisualRoundedCorner(void) { VisualFactory factory = VisualFactory::Get(); Property::Map properties; - float cornerRadius = 0.5f; + Vector4 cornerRadius(0.5f, 0.5f, 0.5f, 0.3f); properties[Visual::Property::TYPE] = Visual::COLOR; properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE; @@ -3766,7 +3766,7 @@ int UtcDaliVisualRoundedCorner(void) application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadius", cornerRadius ), true, TEST_LOCATION ); + DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", cornerRadius ), true, TEST_LOCATION ); DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::RELATIVE ), true, TEST_LOCATION ); } @@ -3774,7 +3774,7 @@ int UtcDaliVisualRoundedCorner(void) { VisualFactory factory = VisualFactory::Get(); Property::Map properties; - float cornerRadius = 30.0f; + Vector4 cornerRadius(30.0f, 30.0f, 30.0f, 20.0f); properties[Visual::Property::TYPE] = Visual::COLOR; properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE; @@ -3798,7 +3798,7 @@ int UtcDaliVisualRoundedCorner(void) application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadius", cornerRadius ), true, TEST_LOCATION ); + DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", cornerRadius ), true, TEST_LOCATION ); // Default corner radius policy is absolute. DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION ); } @@ -3845,7 +3845,7 @@ int UtcDaliVisualRoundedCorner(void) application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadius", cornerRadius ), true, TEST_LOCATION ); + DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius) ), true, TEST_LOCATION ); // Default corner radius policy is absolute. DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION ); } @@ -3854,11 +3854,11 @@ int UtcDaliVisualRoundedCorner(void) { VisualFactory factory = VisualFactory::Get(); Property::Map properties; - float cornerRadius = 24.0f; + Vector4 cornerRadius(24.0f, 23.0f, 22.0f, 21.0f); properties[Visual::Property::TYPE] = Visual::ANIMATED_IMAGE; properties[ImageVisual::Property::URL] = TEST_GIF_FILE_NAME; - properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius + 10.0f; // Dummy Input + properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius.x + 10.0f; // Dummy Input properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius; properties["cornerRadiusPolicy"] = Toolkit::Visual::Transform::Policy::ABSOLUTE; @@ -3881,7 +3881,7 @@ int UtcDaliVisualRoundedCorner(void) application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadius", cornerRadius ), true, TEST_LOCATION ); + DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", cornerRadius ), true, TEST_LOCATION ); DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION ); } @@ -3889,7 +3889,7 @@ int UtcDaliVisualRoundedCorner(void) { VisualFactory factory = VisualFactory::Get(); Property::Map properties; - float cornerRadius = 27.0f; + Vector4 cornerRadius(27.0f, 72.0f, 11.0f, 500.5f); properties[Visual::Property::TYPE] = Visual::SVG; properties[ImageVisual::Property::URL] = TEST_SVG_FILE_NAME; @@ -3914,7 +3914,7 @@ int UtcDaliVisualRoundedCorner(void) application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadius", cornerRadius ), true, TEST_LOCATION ); + DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", cornerRadius ), true, TEST_LOCATION ); // Default corner radius policy is absolute. DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION ); } @@ -3927,6 +3927,7 @@ int UtcDaliVisualRoundedCorner(void) properties[Visual::Property::TYPE] = DevelVisual::ANIMATED_VECTOR_IMAGE; properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME; + properties["cornerRadius"] = Vector4(1.0f, 100.0f, 10.0f, 0.1f); // Dummy Input properties["cornerRadius"] = cornerRadius; properties[DevelVisual::Property::CORNER_RADIUS_POLICY] = Toolkit::Visual::Transform::Policy::RELATIVE; @@ -3949,7 +3950,7 @@ int UtcDaliVisualRoundedCorner(void) application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadius", cornerRadius ), true, TEST_LOCATION ); + DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius) ), true, TEST_LOCATION ); DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::RELATIVE ), true, TEST_LOCATION ); } #else @@ -4148,7 +4149,7 @@ int UtcDaliVisualGetVisualProperty01(void) UniformData("mixColor", Property::Type::VECTOR3), UniformData("offset", Property::Type::VECTOR2), UniformData("size", Property::Type::VECTOR2), - UniformData("cornerRadius", Property::Type::FLOAT), + UniformData("cornerRadius", Property::Type::VECTOR4), UniformData("blurRadius", Property::Type::FLOAT), }; @@ -4159,7 +4160,7 @@ int UtcDaliVisualGetVisualProperty01(void) Property::Map propertyMap; propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR); propertyMap.Insert(Visual::Property::MIX_COLOR, Color::BLUE); - propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS, 10.0f); + propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS, Vector4(10.0f, 0.0f, 2.0f, 4.0f)); propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS_POLICY, Toolkit::Visual::Transform::Policy::RELATIVE); propertyMap.Insert(DevelColorVisual::Property::BLUR_RADIUS, 20.0f); Visual::Base colorVisual = factory.CreateVisual(propertyMap); @@ -4177,7 +4178,7 @@ int UtcDaliVisualGetVisualProperty01(void) Vector2 targetOffset(0.05f, 0.05f); Vector2 targetSize(1.1f, 1.1f); float targetOpacity = 0.5f; - float targetCornerRadius = 20.0f; + Vector4 targetCornerRadius(0.0f, 0.0f, 0.0f, 0.0f); float targetBlurRadius = 10.0f; Animation animation = Animation::New(1.0f); @@ -4213,9 +4214,9 @@ int UtcDaliVisualGetVisualProperty01(void) DALI_TEST_CHECK(sizeValue); DALI_TEST_EQUALS(sizeValue->Get(), targetSize, TEST_LOCATION); - Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::FLOAT); + Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4); DALI_TEST_CHECK(cornerRadiusValue); - DALI_TEST_EQUALS(cornerRadiusValue->Get< float >(), targetCornerRadius, TEST_LOCATION); + DALI_TEST_EQUALS(cornerRadiusValue->Get< Vector4 >(), targetCornerRadius, TEST_LOCATION); Property::Value* blurRadiusValue = resultMap.Find(DevelColorVisual::Property::BLUR_RADIUS, Property::FLOAT); DALI_TEST_CHECK(blurRadiusValue); @@ -4225,7 +4226,7 @@ int UtcDaliVisualGetVisualProperty01(void) DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("mixColor", targetColor), true, TEST_LOCATION); DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("offset", targetOffset), true, TEST_LOCATION); DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("size", targetSize), true, TEST_LOCATION); - DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("cornerRadius", targetCornerRadius), true, TEST_LOCATION); + DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("cornerRadius", targetCornerRadius), true, TEST_LOCATION); DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("blurRadius", targetBlurRadius), true, TEST_LOCATION); // Test not-supported property @@ -4248,7 +4249,6 @@ int UtcDaliVisualGetVisualProperty01(void) int UtcDaliVisualGetVisualProperty02(void) { -#ifdef OLD_GRAPHICS_TEST ToolkitTestApplication application; tet_infoline( "UtcDaliVisualGetVisualProperty02: Test animatable property" ); @@ -4257,7 +4257,7 @@ int UtcDaliVisualGetVisualProperty02(void) UniformData("mixColor", Property::Type::VECTOR3), UniformData("offset", Property::Type::VECTOR2), UniformData("size", Property::Type::VECTOR2), - UniformData("cornerRadius", Property::Type::FLOAT), + UniformData("cornerRadius", Property::Type::VECTOR4), UniformData("blurRadius", Property::Type::FLOAT), }; @@ -4282,7 +4282,7 @@ int UtcDaliVisualGetVisualProperty02(void) Vector2 targetOffset(0.05f, 0.05f); Vector2 targetSize(1.1f, 1.1f); float targetOpacity = 0.5f; - float targetCornerRadius = 20.0f; + Vector4 targetCornerRadius(20.0f, 0.0f, 20.0f, 0.0f); float targetBlurRadius = 10.0f; // Should work when the properties are not set before @@ -4319,22 +4319,21 @@ int UtcDaliVisualGetVisualProperty02(void) DALI_TEST_CHECK(sizeValue); DALI_TEST_EQUALS(sizeValue->Get(), targetSize, TEST_LOCATION); - Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::FLOAT); + Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4); DALI_TEST_CHECK(cornerRadiusValue); - DALI_TEST_EQUALS(cornerRadiusValue->Get< float >(), targetCornerRadius, TEST_LOCATION); + DALI_TEST_EQUALS(cornerRadiusValue->Get< Vector4 >(), targetCornerRadius, TEST_LOCATION); Property::Value* blurRadiusValue = resultMap.Find(DevelColorVisual::Property::BLUR_RADIUS, Property::FLOAT); DALI_TEST_CHECK(blurRadiusValue); DALI_TEST_EQUALS(blurRadiusValue->Get< float >(), targetBlurRadius, TEST_LOCATION); +#ifdef OLD_GRAPHICS_TEST // Test uniform values DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("mixColor", targetColor), true, TEST_LOCATION); DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("offset", targetOffset), true, TEST_LOCATION); DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("size", targetSize), true, TEST_LOCATION); - DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("cornerRadius", targetCornerRadius), true, TEST_LOCATION); + DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("cornerRadius", targetCornerRadius), true, TEST_LOCATION); DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("blurRadius", targetBlurRadius), true, TEST_LOCATION); -#else - tet_result(TET_PASS); #endif END_TEST; @@ -4348,7 +4347,7 @@ int UtcDaliVisualGetVisualProperty03(void) static std::vector customUniforms = { - UniformData("cornerRadius", Property::Type::FLOAT), + UniformData("cornerRadius", Property::Type::VECTOR4), }; TestGraphicsController& graphics = application.GetGraphicsController(); @@ -4373,7 +4372,7 @@ int UtcDaliVisualGetVisualProperty03(void) application.Render(); float targetOpacity = 0.5f; - float targetCornerRadius = 20.0f; + Vector4 targetCornerRadius(20.0f, 20.0f, 0.0f, 0.0f); Animation animation = Animation::New(1.0f); animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::OPACITY), targetOpacity); @@ -4392,12 +4391,12 @@ int UtcDaliVisualGetVisualProperty03(void) DALI_TEST_CHECK(colorValue); DALI_TEST_EQUALS(colorValue->Get(), Vector4(1.0f, 1.0f, 1.0f, targetOpacity), TEST_LOCATION); - Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::FLOAT); + Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4); DALI_TEST_CHECK(cornerRadiusValue); - DALI_TEST_EQUALS(cornerRadiusValue->Get< float >(), targetCornerRadius, TEST_LOCATION); + DALI_TEST_EQUALS(cornerRadiusValue->Get< Vector4 >(), targetCornerRadius, TEST_LOCATION); // Test uniform value - DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("cornerRadius", targetCornerRadius), true, TEST_LOCATION); + DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("cornerRadius", targetCornerRadius), true, TEST_LOCATION); #else tet_result(TET_PASS); #endif @@ -4413,7 +4412,7 @@ int UtcDaliVisualGetVisualProperty04(void) static std::vector customUniforms = { - UniformData("cornerRadius", Property::Type::FLOAT), + UniformData("cornerRadius", Property::Type::VECTOR4), }; TestGraphicsController& graphics = application.GetGraphicsController(); @@ -4445,7 +4444,7 @@ int UtcDaliVisualGetVisualProperty04(void) application.Render(); float targetOpacity = 0.5f; - float targetCornerRadius = 20.0f; + Vector4 targetCornerRadius(20.0f, 30.0f, 10.0f, 20.0f); Animation animation = Animation::New(1.0f); animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::OPACITY), targetOpacity); @@ -4464,12 +4463,12 @@ int UtcDaliVisualGetVisualProperty04(void) DALI_TEST_CHECK(colorValue); DALI_TEST_EQUALS(colorValue->Get(), Vector4(1.0f, 1.0f, 1.0f, targetOpacity), TEST_LOCATION); - Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::FLOAT); + Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4); DALI_TEST_CHECK(cornerRadiusValue); - DALI_TEST_EQUALS(cornerRadiusValue->Get< float >(), targetCornerRadius, TEST_LOCATION); + DALI_TEST_EQUALS(cornerRadiusValue->Get< Vector4 >(), targetCornerRadius, TEST_LOCATION); // Test uniform value - DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("cornerRadius", targetCornerRadius), true, TEST_LOCATION); + DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("cornerRadius", targetCornerRadius), true, TEST_LOCATION); #else tet_result(TET_PASS); #endif diff --git a/automated-tests/src/dali-toolkit/utc-Dali-WebView.cpp b/automated-tests/src/dali-toolkit/utc-Dali-WebView.cpp index bc0c261..39ebd29 100755 --- a/automated-tests/src/dali-toolkit/utc-Dali-WebView.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-WebView.cpp @@ -26,7 +26,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -41,10 +43,8 @@ #include #include #include -#include #include #include -#include #include #include @@ -75,7 +75,7 @@ static bool gTouched = false; static bool gHovered = false; static bool gWheelEventHandled = false; static int gFormRepostDecisionCallbackCalled = 0; -static std::shared_ptr gFormRepostDecisionInstance = nullptr; +static std::shared_ptr gFormRepostDecisionInstance = nullptr; static int gFrameRenderedCallbackCalled = 0; static int gRequestInterceptorCallbackCalled = 0; static std::shared_ptr gRequestInterceptorInstance = nullptr; @@ -97,9 +97,10 @@ static int gMimeOverriddenCallbackCalled = 0; static std::vector> gSecurityOriginList; static std::vector> gPasswordDataList; static int gContextMenuCustomizedCallbackCalled = 0; -static std::shared_ptr gContextMenuInstance = 0; +static std::shared_ptr gContextMenuInstance = nullptr; static int gContextMenuItemSelectedCallbackCalled = 0; -static std::shared_ptr gContextMenuItemInstance = 0; +static std::shared_ptr gContextMenuItemInstance = nullptr; +static int gHitTestCreatedCallbackCalled = 0; struct CallbackFunctor { @@ -146,6 +147,12 @@ static void OnUrlChanged( WebView view, const std::string& url ) gUrlChangedCallbackCalled++; } +static bool OnHitTestCreated(std::unique_ptr test) +{ + gHitTestCreatedCallbackCalled++; + return true; +} + static void OnPageLoadError(WebView view, std::shared_ptr error) { gPageLoadErrorCallbackCalled++; @@ -209,7 +216,7 @@ static bool OnWheelEvent( Actor actor, const Dali::WheelEvent& wheel ) return true; } -static void OnFormRepostDecision(WebView, std::shared_ptr decision) +static void OnFormRepostDecision(WebView, std::shared_ptr decision) { gFormRepostDecisionCallbackCalled++; gFormRepostDecisionInstance = std::move(decision); @@ -1336,6 +1343,50 @@ int UtcDaliWebViewPolicyDecisionRequest(void) END_TEST; } +int UtcDaliWebViewHitTest(void) +{ + ToolkitTestApplication application; + + WebView view = WebView::New(); + DALI_TEST_CHECK( view ); + + // load url. + view.LoadUrl( TEST_URL1 ); + + // sync hit test. + std::unique_ptr hitTest = view.CreateHitTest(100, 100, Dali::WebEngineHitTest::HitTestMode::DEFAULT); + DALI_TEST_CHECK(hitTest != 0); + DALI_TEST_EQUALS(hitTest->GetResultContext(), Dali::WebEngineHitTest::ResultContext::DOCUMENT, TEST_LOCATION); + std::string testLinkUri("http://test.html"); + DALI_TEST_EQUALS(hitTest->GetLinkUri(), testLinkUri, TEST_LOCATION); + std::string testLinkTitle("test"); + DALI_TEST_EQUALS(hitTest->GetLinkTitle(), testLinkTitle, TEST_LOCATION); + std::string testLinkLabel("label"); + DALI_TEST_EQUALS(hitTest->GetLinkLabel(), testLinkLabel, TEST_LOCATION); + std::string testImageUri("http://test.jpg"); + DALI_TEST_EQUALS(hitTest->GetImageUri(), testImageUri, TEST_LOCATION); + std::string testMediaUri("http://test.mp4"); + DALI_TEST_EQUALS(hitTest->GetMediaUri(), testMediaUri, TEST_LOCATION); + std::string testTagName("img"); + DALI_TEST_EQUALS(hitTest->GetTagName(), testTagName, TEST_LOCATION); + std::string testNodeValue("test"); + DALI_TEST_EQUALS(hitTest->GetNodeValue(), testNodeValue, TEST_LOCATION); + Dali::Property::Map* testMap = &hitTest->GetAttributes(); + DALI_TEST_CHECK(testMap); + std::string testImageFileNameExtension("jpg"); + DALI_TEST_EQUALS(hitTest->GetImageFileNameExtension(), testImageFileNameExtension, TEST_LOCATION); + Dali::PixelData testImageBuffer = hitTest->GetImageBuffer(); + DALI_TEST_CHECK((int)testImageBuffer.GetWidth() == 2 && (int)testImageBuffer.GetHeight() == 2); + + // async... + bool result = view.CreateHitTestAsynchronously(100, 100, Dali::WebEngineHitTest::HitTestMode::DEFAULT, &OnHitTestCreated); + DALI_TEST_CHECK(result); + Test::EmitGlobalTimerSignal(); + DALI_TEST_EQUALS( gHitTestCreatedCallbackCalled, 1, TEST_LOCATION ); + + END_TEST; +} + int UtcDaliWebViewEvaluteJavaScript(void) { ToolkitTestApplication application; @@ -1476,9 +1527,15 @@ int UtcDaliWebBackForwardListCheckItem(void) unsigned int itemCount = bfList->GetItemCount(); DALI_TEST_CHECK( itemCount == 1 ) - Dali::Toolkit::WebBackForwardListItem* citem = bfList->GetCurrentItem(); + std::unique_ptr citem = bfList->GetCurrentItem(); DALI_TEST_CHECK( citem != 0 ); + std::unique_ptr citemP = bfList->GetPreviousItem(); + DALI_TEST_CHECK( citemP != 0 ); + + std::unique_ptr citemN = bfList->GetNextItem(); + DALI_TEST_CHECK( citemN != 0 ); + const std::string kDefaultUrl( "http://url" ); std::string testValue = citem->GetUrl(); DALI_TEST_EQUALS( testValue, kDefaultUrl, TEST_LOCATION ); @@ -1491,9 +1548,15 @@ int UtcDaliWebBackForwardListCheckItem(void) testValue = citem->GetOriginalUrl(); DALI_TEST_EQUALS( testValue, kDefaultOriginalUrl, TEST_LOCATION ); - Dali::Toolkit::WebBackForwardListItem* item = bfList->GetItemAtIndex( 0 ); + std::unique_ptr item = bfList->GetItemAtIndex( 0 ); DALI_TEST_CHECK( item != 0 ); + std::vector> vecBack = bfList->GetBackwardItems(-1); + DALI_TEST_CHECK( vecBack.size() == 1 ); + + std::vector> vecForward = bfList->GetForwardItems(-1); + DALI_TEST_CHECK( vecForward.size() == 1 ); + END_TEST; } @@ -2144,3 +2207,78 @@ int UtcDaliWebSettingsGetSetDefaultTextEncodingName(void) END_TEST; } +int UtcDaliWebSettingsSetViewportMetaTag(void) +{ + ToolkitTestApplication application; + + WebView view = WebView::New(); + DALI_TEST_CHECK( view ); + + Dali::Toolkit::WebSettings* settings = view.GetSettings(); + DALI_TEST_CHECK( settings != 0 ) + + // Check the value is true or not + bool value = settings->SetViewportMetaTag(true); + DALI_TEST_CHECK( value ); + + END_TEST; +} + +int UtcDaliWebSettingsSetForceZoom(void) +{ + ToolkitTestApplication application; + + WebView view = WebView::New(); + DALI_TEST_CHECK( view ); + + Dali::Toolkit::WebSettings* settings = view.GetSettings(); + DALI_TEST_CHECK( settings != 0 ) + + // Check the value is true or not + bool value = settings->SetForceZoom(true); + DALI_TEST_CHECK( value ); + + value = settings->IsZoomForced(); + DALI_TEST_CHECK( value ); + + END_TEST; +} + +int UtcDaliWebSettingsSetTextZoomEnabled(void) +{ + ToolkitTestApplication application; + + WebView view = WebView::New(); + DALI_TEST_CHECK( view ); + + Dali::Toolkit::WebSettings* settings = view.GetSettings(); + DALI_TEST_CHECK( settings != 0 ) + + // Check the value is true or not + bool value = settings->SetTextZoomEnabled(true); + DALI_TEST_CHECK( value ); + + value = settings->IsTextZoomEnabled(); + DALI_TEST_CHECK( value ); + + END_TEST; +} + +int UtcDaliWebSettingsSetExtraFeature(void) +{ + ToolkitTestApplication application; + + WebView view = WebView::New(); + DALI_TEST_CHECK( view ); + + Dali::Toolkit::WebSettings* settings = view.GetSettings(); + DALI_TEST_CHECK( settings != 0 ) + + // Check the value is true or not + settings->SetExtraFeature("test", true); + bool value = settings->IsExtraFeatureEnabled("test"); + DALI_TEST_CHECK( value ); + + END_TEST; +} + diff --git a/dali-toolkit/devel-api/controls/web-view/web-back-forward-list-item.cpp b/dali-toolkit/devel-api/controls/web-view/web-back-forward-list-item.cpp deleted file mode 100644 index f50a912..0000000 --- a/dali-toolkit/devel-api/controls/web-view/web-back-forward-list-item.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/* - * 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -// CLASS HEADER -#include - -// EXTERNAL INCLUDES -#include - -namespace Dali -{ -namespace Toolkit -{ -const std::string EMPTY_STRING; - -WebBackForwardListItem::WebBackForwardListItem(const Dali::WebEngineBackForwardListItem* item) -: mWebEngineBackForwardListItem(item) -{ -} - -WebBackForwardListItem::~WebBackForwardListItem() -{ -} - -std::string WebBackForwardListItem::GetUrl() const -{ - return mWebEngineBackForwardListItem ? mWebEngineBackForwardListItem->GetUrl() : EMPTY_STRING; -} - -std::string WebBackForwardListItem::GetTitle() const -{ - return mWebEngineBackForwardListItem ? mWebEngineBackForwardListItem->GetTitle() : EMPTY_STRING; -} - -std::string WebBackForwardListItem::GetOriginalUrl() const -{ - return mWebEngineBackForwardListItem ? mWebEngineBackForwardListItem->GetOriginalUrl() : EMPTY_STRING; -} - -} // namespace Toolkit - -} // namespace Dali diff --git a/dali-toolkit/devel-api/controls/web-view/web-back-forward-list-item.h b/dali-toolkit/devel-api/controls/web-view/web-back-forward-list-item.h deleted file mode 100644 index 2ae0e35..0000000 --- a/dali-toolkit/devel-api/controls/web-view/web-back-forward-list-item.h +++ /dev/null @@ -1,94 +0,0 @@ -#ifndef DALI_TOOLKIT_WEB_BACK_FORWARD_LIST_ITEM_H -#define DALI_TOOLKIT_WEB_BACK_FORWARD_LIST_ITEM_H - -/* - * 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -// EXTERNAL INCLUDES -#include - -// INTERNAL INCLUDES -#include - -namespace Dali -{ -class WebEngineBackForwardListItem; - -namespace Toolkit -{ -/** - * @addtogroup dali_toolkit_controls_web_view - * @{ - */ - -/** - * @brief WebBackForwardListItem is a class for back-forward list item of WebView. - * - * - * For working WebBackForwardListItem, a Dali::WebBackForwardListItem should be provided. - * - */ -class DALI_TOOLKIT_API WebBackForwardListItem -{ -public: - /** - * @brief Creates a WebBackForwardListItem. - */ - WebBackForwardListItem(const Dali::WebEngineBackForwardListItem* item); - - /** - * @brief Destructor. - */ - virtual ~WebBackForwardListItem() final; - - /** - * @brief Returns the URL of the item. - * - * @details The returned URL may differ from the original URL (For example, - * if the page is redirected). - * - * @return The URL of the @a item, otherwise "" in case of an error - */ - std::string GetUrl() const; - - /** - * @brief Returns the title of the item. - * - * @return The title of the @a item, otherwise "" in case of an error - */ - std::string GetTitle() const; - - /** - * @brief Returns the original URL of the item. - * - * @return The original URL of the @a item, otherwise "" in case of an error - */ - std::string GetOriginalUrl() const; - -private: - const Dali::WebEngineBackForwardListItem* mWebEngineBackForwardListItem; -}; - -/** - * @} - */ - -} // namespace Toolkit - -} // namespace Dali - -#endif // DALI_TOOLKIT_WEB_BACK_FORWARD_LIST_ITEM_H diff --git a/dali-toolkit/devel-api/controls/web-view/web-back-forward-list.cpp b/dali-toolkit/devel-api/controls/web-view/web-back-forward-list.cpp old mode 100644 new mode 100755 index 75014f0..8b3d8e1 --- a/dali-toolkit/devel-api/controls/web-view/web-back-forward-list.cpp +++ b/dali-toolkit/devel-api/controls/web-view/web-back-forward-list.cpp @@ -19,16 +19,14 @@ #include // EXTERNAL INCLUDES -#include #include namespace Dali { namespace Toolkit { -WebBackForwardList::WebBackForwardList(const Dali::WebEngineBackForwardList& list) -: mWebEngineBackForwardList(list), - mWebBackForwardListItem(0) +WebBackForwardList::WebBackForwardList(Dali::WebEngineBackForwardList& list) +: mWebEngineBackForwardList(list) { } @@ -36,16 +34,24 @@ WebBackForwardList::~WebBackForwardList() { } -WebBackForwardListItem* WebBackForwardList::GetCurrentItem() +std::unique_ptr WebBackForwardList::GetCurrentItem() { - mWebBackForwardListItem = WebBackForwardListItem(&mWebEngineBackForwardList.GetCurrentItem()); - return &mWebBackForwardListItem; + return mWebEngineBackForwardList.GetCurrentItem(); } -WebBackForwardListItem* WebBackForwardList::GetItemAtIndex(uint32_t index) +std::unique_ptr WebBackForwardList::GetPreviousItem() { - mWebBackForwardListItem = WebBackForwardListItem(&mWebEngineBackForwardList.GetItemAtIndex(index)); - return &mWebBackForwardListItem; + return mWebEngineBackForwardList.GetPreviousItem(); +} + +std::unique_ptr WebBackForwardList::GetNextItem() +{ + return mWebEngineBackForwardList.GetNextItem(); +} + +std::unique_ptr WebBackForwardList::GetItemAtIndex(uint32_t index) +{ + return mWebEngineBackForwardList.GetItemAtIndex(index); } uint32_t WebBackForwardList::GetItemCount() const @@ -53,6 +59,16 @@ uint32_t WebBackForwardList::GetItemCount() const return mWebEngineBackForwardList.GetItemCount(); } +std::vector> WebBackForwardList::GetBackwardItems(int limit) +{ + return mWebEngineBackForwardList.GetBackwardItems(limit); +} + +std::vector> WebBackForwardList::GetForwardItems(int limit) +{ + return mWebEngineBackForwardList.GetForwardItems(limit); +} + } // namespace Toolkit } // namespace Dali diff --git a/dali-toolkit/devel-api/controls/web-view/web-back-forward-list.h b/dali-toolkit/devel-api/controls/web-view/web-back-forward-list.h old mode 100644 new mode 100755 index 9dc81fc..0b015bc --- a/dali-toolkit/devel-api/controls/web-view/web-back-forward-list.h +++ b/dali-toolkit/devel-api/controls/web-view/web-back-forward-list.h @@ -18,8 +18,12 @@ * */ +// EXTERNAL INCLUDES +#include +#include +#include + // INTERNAL INCLUDES -#include #include namespace Dali @@ -48,7 +52,7 @@ public: /** * @brief Creates a WebBackForwardList. */ - WebBackForwardList(const Dali::WebEngineBackForwardList& list); + WebBackForwardList(Dali::WebEngineBackForwardList& list); /** * @brief Destructor. @@ -59,14 +63,26 @@ public: * @brief Returns the current item in the @a list. * @return The current item in list. */ - WebBackForwardListItem* GetCurrentItem(); + std::unique_ptr GetCurrentItem(); + + /** + * @brief Returns the previous item in the @a list. + * @return The previous item in list. + */ + std::unique_ptr GetPreviousItem(); + + /** + * @brief Returns the next item in the @a list. + * @return The next item in list. + */ + std::unique_ptr GetNextItem(); /** * @brief Returns the item at a given @a index relative to the current item. * @param[in] index The index of the item * @return The current item in list. */ - WebBackForwardListItem* GetItemAtIndex(uint32_t index); + std::unique_ptr GetItemAtIndex(uint32_t index); /** * @brief Returns the length of the back-forward list including the current @@ -76,9 +92,38 @@ public: */ uint32_t GetItemCount() const; + /** + * @brief Creates a list containing the items preceding the current item limited + * by @a limit. + * + * @details The WebEngineBackForwardListItem elements are located in the result + list starting with the oldest one.\n + * If @a limit is equal to @c -1 all the items preceding the current + * item are returned. + * + * @param[in] limit The number of items to retrieve + * + * @return @c vector containing @c WebEngineBackForwardListItem elements,\n + */ + std::vector> GetBackwardItems(int limit); + + /** + * @brief Creates the list containing the items following the current item + * limited by @a limit. + * + * @details The @c WebEngineBackForwardListItem elements are located in the result + * list starting with the oldest one.\n + * If @a limit is equal to @c -1 all the items preceding the current + * item are returned. + * + * @param[in] limit The number of items to retrieve + * + * @return @c vector containing @c WebEngineBackForwardListItem elements,\n + */ + std::vector> GetForwardItems(int limit); + private: - const Dali::WebEngineBackForwardList& mWebEngineBackForwardList; - Dali::Toolkit::WebBackForwardListItem mWebBackForwardListItem; + Dali::WebEngineBackForwardList& mWebEngineBackForwardList; }; /** diff --git a/dali-toolkit/devel-api/controls/web-view/web-form-repost-decision.cpp b/dali-toolkit/devel-api/controls/web-view/web-form-repost-decision.cpp deleted file mode 100644 index 219d2ca..0000000 --- a/dali-toolkit/devel-api/controls/web-view/web-form-repost-decision.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -// CLASS HEADER -#include - -// EXTERNAL INCLUDES -#include - -namespace Dali -{ -namespace Toolkit -{ -WebFormRepostDecision::WebFormRepostDecision(std::shared_ptr decision) -: mFormRepostDecision(std::move(decision)) -{ -} - -WebFormRepostDecision::~WebFormRepostDecision() -{ -} - -void WebFormRepostDecision::Reply(bool allowed) -{ - if(mFormRepostDecision) - { - mFormRepostDecision->Reply(allowed); - } -} - -} // namespace Toolkit - -} // namespace Dali diff --git a/dali-toolkit/devel-api/controls/web-view/web-form-repost-decision.h b/dali-toolkit/devel-api/controls/web-view/web-form-repost-decision.h deleted file mode 100755 index 755fe57..0000000 --- a/dali-toolkit/devel-api/controls/web-view/web-form-repost-decision.h +++ /dev/null @@ -1,78 +0,0 @@ -#ifndef DALI_TOOLKIT_WEB_FORM_REPOST_DECISION_H -#define DALI_TOOLKIT_WEB_FORM_REPOST_DECISION_H - -/* - * 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -// EXTERNAL INCLUDES -#include -#include - -// INTERNAL INCLUDES -#include - -namespace Dali -{ -class WebEngineFormRepostDecision; - -namespace Toolkit -{ -/** - * @addtogroup dali_toolkit_controls_web_view - * @{ - */ - -/** - * @brief WebFormRepostDecision is a class for form repost decision of WebView. - * - * - * For working WebFormRepostDecision, a Dali::WebEngineFormRepostDecision should be provided. - * - */ -class DALI_TOOLKIT_API WebFormRepostDecision -{ -public: - /** - * @brief Creates a WebFormRepostDecision. - */ - WebFormRepostDecision(std::shared_ptr decision); - - /** - * @brief Destructor. - */ - virtual ~WebFormRepostDecision() final; - - /** - * @brief Reply the result about form repost decision. - * - * @param[in] allowed Whether allow form repost decision request or not - */ - void Reply(bool allowed); - -private: - std::shared_ptr mFormRepostDecision; -}; - -/** - * @} - */ - -} // namespace Toolkit - -} // namespace Dali - -#endif // DALI_TOOLKIT_WEB_FORM_REPOST_DECISION_H diff --git a/dali-toolkit/devel-api/controls/web-view/web-settings.cpp b/dali-toolkit/devel-api/controls/web-view/web-settings.cpp index d39a93e..b17f48d 100755 --- a/dali-toolkit/devel-api/controls/web-view/web-settings.cpp +++ b/dali-toolkit/devel-api/controls/web-view/web-settings.cpp @@ -234,6 +234,42 @@ void WebSettings::SetDefaultTextEncodingName(const std::string& defaultTextEncod mWebEngineSettings.SetDefaultTextEncodingName(defaultTextEncodingName); } +bool WebSettings::SetViewportMetaTag(bool enable) +{ + return mWebEngineSettings.SetViewportMetaTag(enable); +} + +bool WebSettings::SetForceZoom(bool enable) +{ + return mWebEngineSettings.SetForceZoom(enable); +} + +bool WebSettings::IsZoomForced() const +{ + return mWebEngineSettings.IsZoomForced(); +} + +bool WebSettings::SetTextZoomEnabled(bool enable) +{ + return mWebEngineSettings.SetTextZoomEnabled(enable); +} + +bool WebSettings::IsTextZoomEnabled() const +{ + return mWebEngineSettings.IsTextZoomEnabled(); +} + +void WebSettings::SetExtraFeature(const std::string& feature, bool enable) +{ + mWebEngineSettings.SetExtraFeature(feature, enable); +} + +bool WebSettings::IsExtraFeatureEnabled(const std::string& feature) const +{ + return mWebEngineSettings.IsExtraFeatureEnabled(feature); +} + + } // namespace Toolkit } // namespace Dali diff --git a/dali-toolkit/devel-api/controls/web-view/web-settings.h b/dali-toolkit/devel-api/controls/web-view/web-settings.h index ba8b1fa..de42833 100755 --- a/dali-toolkit/devel-api/controls/web-view/web-settings.h +++ b/dali-toolkit/devel-api/controls/web-view/web-settings.h @@ -344,6 +344,69 @@ public: */ void SetDefaultTextEncodingName(const std::string& defaultTextEncodingName); + /** + * @brief Enables/disables the viewport meta tag. + * + * By default, the viewport meta tag is enabled on mobile and wearable, + * but it is disabled on TV. + * + * @param[in] enable @c true to enable the viewport meta tag + * @c false to disable + * + * @return @c true on success or @c false on failure + */ + bool SetViewportMetaTag(bool enable); + + /** + * @brief Requests setting of force zoom. + * + * @param[in] enable to force zoom + * + * @return @c true on success or @c false on failure + */ + bool SetForceZoom(bool enable); + + /** + * @brief Returns the force zoom status. + * + * @return @c true if enable force zoom or @c false. + */ + bool IsZoomForced() const; + + /** + * @brief Requests setting use of text zoom. + * + * @param[in] enable to text zoom. + * + * @return @c true on success or @c false on failure + */ + bool SetTextZoomEnabled(bool enable); + + /** + * @brief Returns whether text zoom is enabled or not. + * + * @return @c true if enable text zoom or @c false. + */ + bool IsTextZoomEnabled() const; + + /** + * @brief Requests enables/disables to the specific extra feature + * + * @param[in] feature feature name + * @param[in] enable @c true to enable the specific extra feature + * @c false to disable + */ + void SetExtraFeature(const std::string& feature, bool enable); + + /** + * @brief Returns enable/disable to the specific extra feature + * + * @param[in] feature feature name + * + * @return @c true on enable or @c false on disable + */ + bool IsExtraFeatureEnabled(const std::string& feature) const; + private: Dali::WebEngineSettings& mWebEngineSettings; }; diff --git a/dali-toolkit/devel-api/controls/web-view/web-view.cpp b/dali-toolkit/devel-api/controls/web-view/web-view.cpp index f73e9dc..d3c201a 100755 --- a/dali-toolkit/devel-api/controls/web-view/web-view.cpp +++ b/dali-toolkit/devel-api/controls/web-view/web-view.cpp @@ -59,7 +59,7 @@ WebView WebView::New(const std::string& locale, const std::string& timezoneId) return Internal::WebView::New(locale, timezoneId); } -WebView WebView::New(int argc, char** argv) +WebView WebView::New(uint32_t argc, char** argv) { return Internal::WebView::New(argc, argv); } @@ -169,12 +169,12 @@ bool WebView::StopInspectorServer() return Dali::Toolkit::GetImpl(*this).StopInspectorServer(); } -void WebView::ScrollBy(int deltaX, int deltaY) +void WebView::ScrollBy(int32_t deltaX, int32_t deltaY) { Dali::Toolkit::GetImpl(*this).ScrollBy(deltaX, deltaY); } -bool WebView::ScrollEdgeBy(int deltaX, int deltaY) +bool WebView::ScrollEdgeBy(int32_t deltaX, int32_t deltaY) { return Dali::Toolkit::GetImpl(*this).ScrollEdgeBy(deltaX, deltaY); } @@ -244,6 +244,16 @@ void WebView::JavaScriptPromptReply(const std::string& result) Dali::Toolkit::GetImpl(*this).JavaScriptPromptReply(result); } +std::unique_ptr WebView::CreateHitTest(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode) +{ + return Dali::Toolkit::GetImpl(*this).CreateHitTest(x, y, mode); +} + +bool WebView::CreateHitTestAsynchronously(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode, Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback callback) +{ + return Dali::Toolkit::GetImpl(*this).CreateHitTestAsynchronously(x, y, mode, callback); +} + void WebView::ClearHistory() { Dali::Toolkit::GetImpl(*this).ClearHistory(); @@ -279,12 +289,12 @@ void WebView::AddDynamicCertificatePath(const std::string& host, const std::stri Dali::Toolkit::GetImpl(*this).AddDynamicCertificatePath(host, certPath); } -Dali::Toolkit::ImageView WebView::GetScreenshot(Dali::Rect viewArea, float scaleFactor) +Dali::Toolkit::ImageView WebView::GetScreenshot(Dali::Rect viewArea, float scaleFactor) { return Dali::Toolkit::GetImpl(*this).GetScreenshot(viewArea, scaleFactor); } -bool WebView::GetScreenshotAsynchronously(Dali::Rect viewArea, float scaleFactor, Dali::Toolkit::WebView::WebViewScreenshotCapturedCallback callback) +bool WebView::GetScreenshotAsynchronously(Dali::Rect viewArea, float scaleFactor, Dali::Toolkit::WebView::WebViewScreenshotCapturedCallback callback) { return Dali::Toolkit::GetImpl(*this).GetScreenshotAsynchronously(viewArea, scaleFactor, callback); } diff --git a/dali-toolkit/devel-api/controls/web-view/web-view.h b/dali-toolkit/devel-api/controls/web-view/web-view.h index 6d8d3b9..4f9159d 100755 --- a/dali-toolkit/devel-api/controls/web-view/web-view.h +++ b/dali-toolkit/devel-api/controls/web-view/web-view.h @@ -216,7 +216,7 @@ public: /** * @brief WebView signal type related with form repost decision. */ - using WebViewFormRepostDecisionSignalType = Signal)>; + using WebViewFormRepostDecisionSignalType = Signal)>; /** * @brief WebView signal type related with frame rendered. @@ -260,7 +260,7 @@ public: public: /** - * @brief Creates an initialized WebView. + * @brief Create an initialized WebView. * @return A handle to a newly allocated Dali WebView * * @note WebView will not display anything @@ -268,7 +268,7 @@ public: static WebView New(); /** - * @brief Creates an initialized WebView. + * @brief Create an initialized WebView. * * @param [in] locale The locale of Web * @param [in] timezoneId The timezoneId of Web @@ -276,15 +276,15 @@ public: static WebView New(const std::string& locale, const std::string& timezoneId); /** - * @brief Creates an initialized WebView. + * @brief Create an initialized WebView. * * @param [in] argc The count of arguments of Applications * @param [in] argv The string array of arguments of Applications */ - static WebView New(int argc, char** argv); + static WebView New(uint32_t argc, char** argv); /** - * @brief Creates an uninitialized WebView. + * @brief Create an uninitialized WebView. */ WebView(); @@ -311,7 +311,7 @@ public: WebView& operator=(const WebView& WebView); /** - * @brief Downcasts a handle to WebView handle. + * @brief Downcast a handle to WebView handle. * * If handle points to a WebView, the downcast produces valid handle. * If not, the returned handle is left uninitialized. @@ -349,14 +349,14 @@ public: Dali::Toolkit::ImageView& GetFavicon(); /** - * @brief Loads a web page based on a given URL. + * @brief Load a web page based on a given URL. * * @param [in] url The URL of the resource to load */ void LoadUrl(const std::string& url); /** - * @brief Loads a given string as web contents. + * @brief Load a given string as web contents. * * @param [in] htmlString The string to use as the contents of the web page */ @@ -374,7 +374,7 @@ public: bool LoadHtmlStringOverrideCurrentEntry(const std::string& html, const std::string& basicUri, const std::string& unreachableUrl); /** - * @brief Requests loading the given contents by MIME type into the view object + * @brief Request loading the given contents by MIME type into the view object * * @param[in] contents The content to load * @param[in] contentSize The size of contents (in bytes) @@ -387,27 +387,27 @@ public: bool LoadContents(const std::string& contents, uint32_t contentSize, const std::string& mimeType, const std::string& encoding, const std::string& baseUri); /** - * @brief Reloads the Web. + * @brief Reload the Web. */ void Reload(); /** - * @brief Reloads the current page's document without cache + * @brief Reload the current page's document without cache */ bool ReloadWithoutCache(); /** - * @brief Stops loading web contents on the current page. + * @brief Stop loading web contents on the current page. */ void StopLoading(); /** - * @brief Suspends the operation associated with the view. + * @brief Suspend the operation associated with the view. */ void Suspend(); /** - * @brief Resumes the operation associated with the view object after calling Suspend(). + * @brief Resume the operation associated with the view object after calling Suspend(). */ void Resume(); @@ -457,48 +457,48 @@ public: bool StopInspectorServer(); /** - * @brief Scrolls web page of view by deltaX and deltaY. + * @brief Scroll web page of view by deltaX and deltaY. * @param[in] deltaX The delta x of scroll * @param[in] deltaY The delta y of scroll */ - void ScrollBy(int deltaX, int deltaY); + void ScrollBy(int32_t deltaX, int32_t deltaY); /** - * @brief Scrolls edge of view by deltaX and deltaY. + * @brief Scroll edge of view by deltaX and deltaY. * * @param[in] deltaX horizontal offset to scroll * @param[in] deltaY vertical offset to scroll * * @return true if succeeded, false otherwise */ - bool ScrollEdgeBy(int deltaX, int deltaY); + bool ScrollEdgeBy(int32_t deltaX, int32_t deltaY); /** - * @brief Returns whether forward is possible. + * @brief Return whether forward is possible. * * @return True if forward is possible, false otherwise */ bool CanGoForward(); /** - * @brief Goes forward in the navigation history. + * @brief Go forward in the navigation history. */ void GoForward(); /** - * @brief Returns whether backward is possible. + * @brief Return whether backward is possible. * * @return True if backward is possible, false otherwise */ bool CanGoBack(); /** - * @brief Goes back in the navigation history. + * @brief Go back in the navigation history. */ void GoBack(); /** - * @brief Evaluates JavaScript code represented as a string. + * @brief Evaluate JavaScript code represented as a string. * * @param[in] script The JavaScript code * @param[in] resultHandler The callback function to be called by the JavaScript runtime. This carries evaluation result @@ -506,7 +506,7 @@ public: void EvaluateJavaScript(const std::string& script, std::function resultHandler); /** - * @brief Evaluates JavaScript code represented as a string. + * @brief Evaluate JavaScript code represented as a string. * * @param[in] script The JavaScript code */ @@ -577,24 +577,47 @@ public: void JavaScriptPromptReply(const std::string& result); /** - * @brief Clears the history of Web. + * @brief Create a new hit test. + * + * @param[in] x the horizontal position to query + * @param[in] y the vertical position to query + * @param[in] mode the mode of hit test + * + * @return a new hit test object. + */ + std::unique_ptr CreateHitTest(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode); + + /** + * @brief Create a hit test asynchronously. + * + * @param[in] x the horizontal position to query + * @param[in] y the vertical position to query + * @param[in] mode the mode of hit test + * @param[in] callback The callback function + * + * @return true if succeeded, false otherwise. + */ + bool CreateHitTestAsynchronously(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode, Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback callback); + + /** + * @brief Clear the history of Web. */ void ClearHistory(); /** - * @brief Clears all tiles resources of Web. + * @brief Clear all tiles resources of Web. */ void ClearAllTilesResources(); /** - * @brief Scales the current page, centered at the given point. + * @brief Scale the current page, centered at the given point. * @param[in] scaleFactor a new factor to be scaled. * @param[in] point a center coordinate. */ void SetScaleFactor(float scaleFactor, Dali::Vector2 point); /** - * @brief Gets the current scale factor of the page. + * @brief Get the current scale factor of the page. * @return The current scale factor. */ float GetScaleFactor() const; @@ -606,7 +629,7 @@ public: void ActivateAccessibility(bool activated); /** - * @brief Searches and highlights the given string in the document. + * @brief Search and highlights the given string in the document. * @param[in] text The text to find * @param[in] options The options to find * @param[in] maxMatchCount The maximum match count to find @@ -630,7 +653,7 @@ public: * * @return image view of screen shot */ - Dali::Toolkit::ImageView GetScreenshot(Dali::Rect viewArea, float scaleFactor); + Dali::Toolkit::ImageView GetScreenshot(Dali::Rect viewArea, float scaleFactor); /** * @brief Request to get snapshot of the specified viewArea of page asynchronously. @@ -641,7 +664,7 @@ public: * * @return true if requested successfully, false otherwise */ - bool GetScreenshotAsynchronously(Dali::Rect viewArea, float scaleFactor, WebViewScreenshotCapturedCallback callback); + bool GetScreenshotAsynchronously(Dali::Rect viewArea, float scaleFactor, WebViewScreenshotCapturedCallback callback); /** * @brief Asynchronous request to check if there is a video playing in the given view. @@ -774,14 +797,14 @@ public: public: // Not intended for application developers /// @cond internal /** - * @brief Creates a handle using the Toolkit::Internal implementation. + * @brief Create a handle using the Toolkit::Internal implementation. * * @param[in] implementation The WebView implementation */ DALI_INTERNAL WebView(Internal::WebView& implementation); /** - * @brief Allows the creation of this WebView from an Internal::CustomActor pointer. + * @brief Allow the creation of this WebView from an Internal::CustomActor pointer. * * @param[in] internal A pointer to the internal CustomActor */ diff --git a/dali-toolkit/devel-api/file.list b/dali-toolkit/devel-api/file.list index 5516ac8..f583d3c 100755 --- a/dali-toolkit/devel-api/file.list +++ b/dali-toolkit/devel-api/file.list @@ -40,10 +40,8 @@ SET( devel_api_src_files ${devel_api_src_dir}/controls/tool-bar/tool-bar.cpp ${devel_api_src_dir}/controls/video-view/video-view-devel.cpp ${devel_api_src_dir}/controls/web-view/web-back-forward-list.cpp - ${devel_api_src_dir}/controls/web-view/web-back-forward-list-item.cpp ${devel_api_src_dir}/controls/web-view/web-context.cpp ${devel_api_src_dir}/controls/web-view/web-cookie-manager.cpp - ${devel_api_src_dir}/controls/web-view/web-form-repost-decision.cpp ${devel_api_src_dir}/controls/web-view/web-settings.cpp ${devel_api_src_dir}/controls/web-view/web-view.cpp ${devel_api_src_dir}/focus-manager/keyinput-focus-manager.cpp @@ -257,10 +255,8 @@ SET( devel_api_video_view_header_files SET( devel_api_web_view_header_files ${devel_api_src_dir}/controls/web-view/web-back-forward-list.h - ${devel_api_src_dir}/controls/web-view/web-back-forward-list-item.h ${devel_api_src_dir}/controls/web-view/web-context.h ${devel_api_src_dir}/controls/web-view/web-cookie-manager.h - ${devel_api_src_dir}/controls/web-view/web-form-repost-decision.h ${devel_api_src_dir}/controls/web-view/web-settings.h ${devel_api_src_dir}/controls/web-view/web-view.h ) diff --git a/dali-toolkit/devel-api/visuals/visual-properties-devel.h b/dali-toolkit/devel-api/visuals/visual-properties-devel.h index 6a5f51d..1098b7d 100644 --- a/dali-toolkit/devel-api/visuals/visual-properties-devel.h +++ b/dali-toolkit/devel-api/visuals/visual-properties-devel.h @@ -73,8 +73,16 @@ enum Type /** * @brief The radius for the rounded corners of the visual - * @details Name "cornerRadius", type Property::FLOAT, animatable - * @note Optional. + * @details Name "cornerRadius", type Property::FLOAT or Prooperty::VECTOR4, animatable + * @note By default, it is Vector::ZERO. + * @note Only Property::Vector4 can be animated. + * @note Radius value are used in clockwise order from top-left-corner to bottom-left-corner. + * When radius is Vector4(x, y, z, w) + * x y + * +--+ + * | | + * +--+ + * w z */ CORNER_RADIUS = OPACITY + 2, diff --git a/dali-toolkit/internal/controls/control/control-data-impl.cpp b/dali-toolkit/internal/controls/control/control-data-impl.cpp index 1c48bc1..070fa82 100644 --- a/dali-toolkit/internal/controls/control/control-data-impl.cpp +++ b/dali-toolkit/internal/controls/control/control-data-impl.cpp @@ -487,7 +487,7 @@ Control::Impl::~Impl() StopObservingVisual(iter->visual); } - AccessibilityDeregister(); + AccessibilityDeregister(false); // All gesture detectors will be destroyed so no need to disconnect. delete mStartingPinchScale; @@ -1942,12 +1942,32 @@ void Control::Impl::AccessibilityRegister() } } -void Control::Impl::AccessibilityDeregister() +void Control::Impl::AccessibilityDeregister(bool remove) { if(accessibilityNotificationSet) { + accessibilityNotificationPosition.NotifySignal().Disconnect(&Control::Impl::PositionOrSizeChangedCallback); + if(remove) + { + mControlImpl.Self().RemovePropertyNotification(accessibilityNotificationPosition); + } + accessibilityNotificationPosition.Reset(); accessibilityNotificationPosition = {}; + + accessibilityNotificationSize.NotifySignal().Disconnect(&Control::Impl::PositionOrSizeChangedCallback); + if(remove) + { + mControlImpl.Self().RemovePropertyNotification(accessibilityNotificationSize); + } + accessibilityNotificationSize.Reset(); accessibilityNotificationSize = {}; + + accessibilityNotificationCulled.NotifySignal().Disconnect(&Control::Impl::CulledChangedCallback); + if(remove) + { + mControlImpl.Self().RemovePropertyNotification(accessibilityNotificationCulled); + } + accessibilityNotificationCulled.Reset(); accessibilityNotificationCulled = {}; accessibilityNotificationSet = false; } diff --git a/dali-toolkit/internal/controls/control/control-data-impl.h b/dali-toolkit/internal/controls/control/control-data-impl.h index 492461e..a3ab6c0 100644 --- a/dali-toolkit/internal/controls/control/control-data-impl.h +++ b/dali-toolkit/internal/controls/control/control-data-impl.h @@ -544,7 +544,7 @@ public: Dali::Accessibility::Accessible* GetAccessibilityObject(); void AccessibilityRegister(); - void AccessibilityDeregister(); + void AccessibilityDeregister(bool remove); std::function(Actor)> accessibilityConstructor; std::unique_ptr accessibilityObject; diff --git a/dali-toolkit/internal/controls/web-view/web-view-impl.cpp b/dali-toolkit/internal/controls/web-view/web-view-impl.cpp index 0dd6834..6a3af8d 100644 --- a/dali-toolkit/internal/controls/web-view/web-view-impl.cpp +++ b/dali-toolkit/internal/controls/web-view/web-view-impl.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -46,7 +47,6 @@ #include #include #include -#include #include #include #include @@ -141,7 +141,7 @@ WebView::WebView(const std::string& locale, const std::string& timezoneId) } } -WebView::WebView(int argc, char** argv) +WebView::WebView(uint32_t argc, char** argv) : Control(ControlBehaviour(ACTOR_BEHAVIOUR_DEFAULT | DISABLE_STYLE_CHANGE_SIGNALS)), mUrl(), mVisual(), @@ -196,7 +196,7 @@ Toolkit::WebView WebView::New(const std::string& locale, const std::string& time return handle; } -Toolkit::WebView WebView::New(int argc, char** argv) +Toolkit::WebView WebView::New(uint32_t argc, char** argv) { WebView* impl = new WebView(argc, argv); Toolkit::WebView handle = Toolkit::WebView(*impl); @@ -449,7 +449,7 @@ bool WebView::StopInspectorServer() return mWebEngine ? mWebEngine.StopInspectorServer() : false; } -void WebView::ScrollBy(int deltaX, int deltaY) +void WebView::ScrollBy(int32_t deltaX, int32_t deltaY) { if(mWebEngine) { @@ -457,7 +457,7 @@ void WebView::ScrollBy(int deltaX, int deltaY) } } -bool WebView::ScrollEdgeBy(int deltaX, int deltaY) +bool WebView::ScrollEdgeBy(int32_t deltaX, int32_t deltaY) { return mWebEngine ? mWebEngine.ScrollEdgeBy(deltaX, deltaY) : false; } @@ -552,6 +552,27 @@ void WebView::JavaScriptPromptReply(const std::string& result) } } +std::unique_ptr WebView::CreateHitTest(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode) +{ + std::unique_ptr webHitTest; + if(!mWebEngine) + { + return webHitTest; + } + + return mWebEngine.CreateHitTest(x, y, mode); +} + +bool WebView::CreateHitTestAsynchronously(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode, Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback callback) +{ + bool result = false; + if(mWebEngine) + { + result = mWebEngine.CreateHitTestAsynchronously(x, y, mode, callback); + } + return result; +} + void WebView::ClearHistory() { if(mWebEngine) @@ -602,7 +623,7 @@ void WebView::AddDynamicCertificatePath(const std::string& host, const std::stri } } -Dali::Toolkit::ImageView WebView::GetScreenshot(Dali::Rect viewArea, float scaleFactor) +Dali::Toolkit::ImageView WebView::GetScreenshot(Dali::Rect viewArea, float scaleFactor) { Dali::Toolkit::ImageView imageView; if(mWebEngine) @@ -613,7 +634,7 @@ Dali::Toolkit::ImageView WebView::GetScreenshot(Dali::Rect viewArea, float return imageView; } -bool WebView::GetScreenshotAsynchronously(Dali::Rect viewArea, float scaleFactor, Dali::Toolkit::WebView::WebViewScreenshotCapturedCallback callback) +bool WebView::GetScreenshotAsynchronously(Dali::Rect viewArea, float scaleFactor, Dali::Toolkit::WebView::WebViewScreenshotCapturedCallback callback) { mScreenshotCapturedCallback = callback; return mWebEngine ? mWebEngine.GetScreenshotAsynchronously(viewArea, scaleFactor, std::bind(&WebView::OnScreenshotCaptured, this, std::placeholders::_1)) : false; @@ -644,7 +665,7 @@ void WebView::UpdateDisplayArea(Dali::PropertyNotification& /*source*/) Vector3 anchorPointOffSet = actorSize * (positionUsesAnchorPoint ? self.GetCurrentProperty(Actor::Property::ANCHOR_POINT) : AnchorPoint::TOP_LEFT); Vector2 screenPosition = self.GetProperty(Actor::Property::SCREEN_POSITION); - Dali::Rect displayArea; + Dali::Rect displayArea; displayArea.x = screenPosition.x - anchorPointOffSet.x; displayArea.y = screenPosition.y - anchorPointOffSet.y; displayArea.width = actorSize.x; @@ -831,9 +852,8 @@ void WebView::OnFormRepostDecision(std::shared_ptr repostDecision(new Dali::Toolkit::WebFormRepostDecision(decision)); - mFormRepostDecisionSignal.Emit(handle, std::move(repostDecision)); + Dali::Toolkit::WebView handle(GetOwner()); + mFormRepostDecisionSignal.Emit(handle, std::move(decision)); } } @@ -1277,7 +1297,7 @@ bool WebView::OnKeyEvent(const Dali::KeyEvent& event) bool WebView::OnHoverEvent(Actor actor, const Dali::HoverEvent& hover) { bool result = false; - if(mWebEngine) + if(mWebEngine && mMouseEventsEnabled) { result = mWebEngine.SendHoverEvent(hover); } @@ -1287,7 +1307,7 @@ bool WebView::OnHoverEvent(Actor actor, const Dali::HoverEvent& hover) bool WebView::OnWheelEvent(Actor actor, const Dali::WheelEvent& wheel) { bool result = false; - if(mWebEngine) + if(mWebEngine && mMouseEventsEnabled) { result = mWebEngine.SendWheelEvent(wheel); } @@ -1314,7 +1334,7 @@ void WebView::OnKeyInputFocusLost() EmitKeyInputFocusSignal(false); // Calls back into the Control hence done last. } -void WebView::SetScrollPosition(int x, int y) +void WebView::SetScrollPosition(int32_t x, int32_t y) { if(mWebEngine) { diff --git a/dali-toolkit/internal/controls/web-view/web-view-impl.h b/dali-toolkit/internal/controls/web-view/web-view-impl.h index 99a964c..4031ee6 100755 --- a/dali-toolkit/internal/controls/web-view/web-view-impl.h +++ b/dali-toolkit/internal/controls/web-view/web-view-impl.h @@ -52,7 +52,7 @@ protected: WebView(const std::string& locale, const std::string& timezoneId); - WebView(int argc, char** argv); + WebView(uint32_t argc, char** argv); virtual ~WebView(); @@ -68,34 +68,32 @@ public: static Toolkit::WebView New(const std::string& locale, const std::string& timezoneId); /** - * @copydoc Dali::Toolkit::WebView::New( int, char** ) + * @copydoc Dali::Toolkit::WebView::New( uint32_t, char** ) */ - static Toolkit::WebView New(int argc, char** argv); + static Toolkit::WebView New(uint32_t argc, char** argv); /** - * @brief Get settings of WebEngine. + * @copydoc Dali::Toolkit::WebView::GetSettings() */ Dali::Toolkit::WebSettings* GetSettings() const; /** - * @brief Get context of WebEngine. + * @copydoc Dali::Toolkit::WebView::GetContext() */ Dali::Toolkit::WebContext* GetContext() const; /** - * @brief Get cookie manager of WebEngine. + * @copydoc Dali::Toolkit::WebView::GetCookieManager() */ Dali::Toolkit::WebCookieManager* GetCookieManager() const; /** - * @brief Get WebBackForwardList of WebEngine. + * @copydoc Dali::Toolkit::WebView::GetBackForwardList() */ Dali::Toolkit::WebBackForwardList* GetBackForwardList() const; /** - * @brief Get Favicon of web page. - * - * @return Handle to a fav icon + * @copydoc Dali::Toolkit::WebView::GetFavicon() */ Dali::Toolkit::ImageView& GetFavicon(); @@ -177,12 +175,12 @@ public: /** * @copydoc Dali::Toolkit::WebView::ScrollBy() */ - void ScrollBy(int deltaX, int deltaY); + void ScrollBy(int32_t deltaX, int32_t deltaY); /** * @copydoc Dali::WebEngine::ScrollEdgeBy() */ - bool ScrollEdgeBy(int deltaX, int deltaY); + bool ScrollEdgeBy(int32_t deltaX, int32_t deltaY); /** * @copydoc Dali::Toolkit::WebView::CanGoForward() @@ -245,6 +243,16 @@ public: void JavaScriptPromptReply(const std::string& result); /** + * @copydoc Dali::Toolkit::WebView::CreateHitTest() + */ + std::unique_ptr CreateHitTest(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode); + + /** + * @copydoc Dali::Toolkit::WebView::CreateHitTestAsynchronously() + */ + bool CreateHitTestAsynchronously(int32_t x, int32_t y, Dali::WebEngineHitTest::HitTestMode mode, Dali::WebEnginePlugin::WebEngineHitTestCreatedCallback callback); + + /** * @copydoc Dali::Toolkit::WebView::ClearHistory() */ void ClearHistory(); @@ -282,12 +290,12 @@ public: /** * @copydoc Dali::Toolkit::WebView::GetScreenshot() */ - Dali::Toolkit::ImageView GetScreenshot(Dali::Rect viewArea, float scaleFactor); + Dali::Toolkit::ImageView GetScreenshot(Dali::Rect viewArea, float scaleFactor); /** * @copydoc Dali::Toolkit::WebView::GetScreenshotAsynchronously() */ - bool GetScreenshotAsynchronously(Dali::Rect viewArea, float scaleFactor, Dali::Toolkit::WebView::WebViewScreenshotCapturedCallback callback); + bool GetScreenshotAsynchronously(Dali::Rect viewArea, float scaleFactor, Dali::Toolkit::WebView::WebViewScreenshotCapturedCallback callback); /** * @copydoc Dali::Toolkit::WebView::CheckVideoPlayingAsynchronously() @@ -451,10 +459,10 @@ private: * @param[in] x The coordinate x of scroll * @param[in] y The coordinate y of scroll */ - void SetScrollPosition(int x, int y); + void SetScrollPosition(int32_t x, int32_t y); /** - * @brief Gets the current scroll position of the given view. + * @brief Get the current scroll position of the given view. * @param[out] x The coordinate x of scroll * @param[out] y The coordinate y of scroll */ @@ -640,7 +648,7 @@ private: void OnUrlChanged(const std::string& url); /** - * Signal occurs when the Web View has been touched. + * @brief Signal occurs when the Web View has been touched. * @param[in] actor The Actor Touched * @param[in] touch The Touch Data. * @return Whether to consume event or not. @@ -648,7 +656,7 @@ private: bool OnTouchEvent(Actor actor, const Dali::TouchEvent& touch); /** - * Signal occurs when the Web View has been hovered. + * @brief Signal occurs when the Web View has been hovered. * @param[in] actor The Actor Hovered * @param[in] hover The Hover Data. * @return Whether to consume event or not. @@ -656,7 +664,7 @@ private: bool OnHoverEvent(Actor actor, const Dali::HoverEvent& hover); /** - * Signal occurs when the Web View receives wheel event. + * @brief Signal occurs when the Web View receives wheel event. * @param[in] actor The Actor that receives Wheel event. * @param[in] wheel The Wheel Data. * @return Whether to consume event or not. @@ -769,7 +777,7 @@ private: Dali::PropertyNotification mPositionUpdateNotification; Dali::PropertyNotification mSizeUpdateNotification; Dali::PropertyNotification mScaleUpdateNotification; - Dali::Rect mWebViewArea; + Dali::Rect mWebViewArea; bool mVideoHoleEnabled; bool mMouseEventsEnabled; bool mKeyEventsEnabled; diff --git a/dali-toolkit/internal/graphics/shaders/color-visual-blur-edge-shader.frag b/dali-toolkit/internal/graphics/shaders/color-visual-blur-edge-shader.frag index df817b2..a3bb80a 100644 --- a/dali-toolkit/internal/graphics/shaders/color-visual-blur-edge-shader.frag +++ b/dali-toolkit/internal/graphics/shaders/color-visual-blur-edge-shader.frag @@ -1,6 +1,7 @@ INPUT mediump vec2 vPosition; INPUT mediump vec2 vRectSize; -INPUT mediump float vCornerRadius; +INPUT mediump vec2 vOptRectSize; +INPUT mediump vec4 vCornerRadius; uniform lowp vec4 uColor; uniform lowp vec3 mixColor; @@ -9,20 +10,31 @@ uniform mediump float blurRadius; void main() { OUT_COLOR = vec4(mixColor, 1.0) * uColor; + if(abs(vPosition.x) < vOptRectSize.x && abs(vPosition.y) < vOptRectSize.y) + { + return; + } + + mediump float radius = + mix( + mix(vCornerRadius.x, vCornerRadius.y, sign(vPosition.x) * 0.5 + 0.5), + mix(vCornerRadius.w, vCornerRadius.z, sign(vPosition.x) * 0.5 + 0.5), + sign(vPosition.y) * 0.5 + 0.5 + ); - mediump vec2 v = abs(vPosition) - vRectSize; - mediump float cy = vCornerRadius + blurRadius; - mediump float cr = vCornerRadius + blurRadius; + mediump vec2 v = abs(vPosition) - vRectSize + radius; + mediump float cy = radius + blurRadius; + mediump float cr = radius + blurRadius; - cy = min(cy, min(vRectSize.x, vRectSize.y)); + cy = min(cy, min(vRectSize.x, vRectSize.y) - radius); v = vec2(min(v.x, v.y), max(v.x, v.y)); v = v + cy; mediump float blur = 1.0; mediump float potential = 0.0; - mediump float alias = min(vCornerRadius, 1.0); - mediump float potentialMin = cy + vCornerRadius - blurRadius - alias; - mediump float potentialMax = cy + vCornerRadius + blurRadius + alias; + mediump float alias = min(radius, 1.0); + mediump float potentialMin = cy + radius - blurRadius - alias; + mediump float potentialMax = cy + radius + blurRadius + alias; // move center of circles for reduce defact mediump float cyDiff = min(cy, 0.2 * blurRadius); diff --git a/dali-toolkit/internal/graphics/shaders/color-visual-blur-edge-shader.vert b/dali-toolkit/internal/graphics/shaders/color-visual-blur-edge-shader.vert index e20110b..5306aef 100644 --- a/dali-toolkit/internal/graphics/shaders/color-visual-blur-edge-shader.vert +++ b/dali-toolkit/internal/graphics/shaders/color-visual-blur-edge-shader.vert @@ -1,7 +1,8 @@ INPUT mediump vec2 aPosition; OUTPUT mediump vec2 vPosition; OUTPUT mediump vec2 vRectSize; -OUTPUT mediump float vCornerRadius; +OUTPUT mediump vec2 vOptRectSize; +OUTPUT mediump vec4 vCornerRadius; uniform highp mat4 uMvpMatrix; uniform highp vec3 uSize; @@ -14,7 +15,7 @@ uniform mediump vec4 offsetSizeMode; uniform mediump vec2 origin; uniform mediump vec2 anchorPoint; uniform mediump float blurRadius; -uniform mediump float cornerRadius; +uniform mediump vec4 cornerRadius; uniform mediump float cornerRadiusPolicy; vec4 ComputeVertexPosition() @@ -24,7 +25,11 @@ vec4 ComputeVertexPosition() mediump float minSize = min( visualSize.x, visualSize.y ); vCornerRadius = mix( cornerRadius * minSize, cornerRadius, cornerRadiusPolicy ); vCornerRadius = min( vCornerRadius, minSize * 0.5 ); - vRectSize = visualSize / 2.0 - vec2( vCornerRadius ); + vRectSize = visualSize / 2.0; + // optimize fragment shader + mediump float maxRadius = max(max(vCornerRadius.x, vCornerRadius.y), max(vCornerRadius.z, vCornerRadius.w)); + vOptRectSize = vRectSize - 0.2929 * maxRadius - 1.0 - blurRadius; + vPosition = aPosition * (visualSize + 2.0 * blurRadius); return vec4( vPosition + anchorPoint*visualSize + (visualOffset + origin)*uSize.xy, 0.0, 1.0 ); } diff --git a/dali-toolkit/internal/graphics/shaders/color-visual-rounded-corner-shader.frag b/dali-toolkit/internal/graphics/shaders/color-visual-rounded-corner-shader.frag index 4654ab4..811dc1d 100644 --- a/dali-toolkit/internal/graphics/shaders/color-visual-rounded-corner-shader.frag +++ b/dali-toolkit/internal/graphics/shaders/color-visual-rounded-corner-shader.frag @@ -1,6 +1,7 @@ INPUT mediump vec2 vPosition; INPUT mediump vec2 vRectSize; -INPUT mediump float vCornerRadius; +INPUT mediump vec2 vOptRectSize; +INPUT mediump vec4 vCornerRadius; uniform lowp vec4 uColor; uniform lowp vec3 mixColor; @@ -8,18 +9,29 @@ uniform lowp vec3 mixColor; void main() { OUT_COLOR = vec4(mixColor, 1.0) * uColor; - mediump vec2 diff = abs( vPosition ) - vRectSize; - mediump float dist = length( max( diff, vec2( 0.0 ) ) ) - vCornerRadius; - if( dist > 1.0 ) + if(abs(vPosition.x) < vOptRectSize.x && abs(vPosition.y) < vOptRectSize.y) + { + return; + } + mediump float radius = + mix( + mix(vCornerRadius.x, vCornerRadius.y, sign(vPosition.x) * 0.5 + 0.5), + mix(vCornerRadius.w, vCornerRadius.z, sign(vPosition.x) * 0.5 + 0.5), + sign(vPosition.y) * 0.5 + 0.5 + ); + + mediump vec2 diff = abs(vPosition) - vRectSize + radius; + mediump float dist = length(max(diff, vec2(0.0))) - radius; + if(dist > 1.0) { OUT_COLOR.a = 0.0; } - else if( dist > -1.0 ) + else if(dist > -1.0) { - if( min( diff.x, diff.y ) < 0.0) + if(min(diff.x, diff.y) < 0.0) { - dist += min( diff.x, diff.y ) / vCornerRadius; + dist += min(diff.x, diff.y) / max(radius, 1.0); } - OUT_COLOR.a *= 1.0 - smoothstep( -1.0, 1.0, dist ); + OUT_COLOR.a *= 1.0 - smoothstep(-1.0, 1.0, dist); } } diff --git a/dali-toolkit/internal/graphics/shaders/color-visual-rounded-corner-shader.vert b/dali-toolkit/internal/graphics/shaders/color-visual-rounded-corner-shader.vert index 33216e5..0a6a257 100644 --- a/dali-toolkit/internal/graphics/shaders/color-visual-rounded-corner-shader.vert +++ b/dali-toolkit/internal/graphics/shaders/color-visual-rounded-corner-shader.vert @@ -1,7 +1,8 @@ INPUT mediump vec2 aPosition; OUTPUT mediump vec2 vPosition; OUTPUT mediump vec2 vRectSize; -OUTPUT mediump float vCornerRadius; +OUTPUT mediump vec2 vOptRectSize; +OUTPUT mediump vec4 vCornerRadius; uniform highp mat4 uMvpMatrix; uniform highp vec3 uSize; @@ -13,7 +14,7 @@ uniform mediump vec2 extraSize; uniform mediump vec4 offsetSizeMode; uniform mediump vec2 origin; uniform mediump vec2 anchorPoint; -uniform mediump float cornerRadius; +uniform mediump vec4 cornerRadius; uniform mediump float cornerRadiusPolicy; vec4 ComputeVertexPosition() @@ -23,8 +24,10 @@ vec4 ComputeVertexPosition() mediump float minSize = min( visualSize.x, visualSize.y ); vCornerRadius = mix( cornerRadius * minSize, cornerRadius, cornerRadiusPolicy); vCornerRadius = min( vCornerRadius, minSize * 0.5 ); - vRectSize = visualSize / 2.0 - vCornerRadius; - vCornerRadius = max( vCornerRadius, 1.0 ); + vRectSize = visualSize / 2.0; + // optimize fragment shader + mediump float maxRadius = max(max(vCornerRadius.x, vCornerRadius.y), max(vCornerRadius.z, vCornerRadius.w)); + vOptRectSize = vRectSize - 0.2929 * maxRadius - 1.0; vPosition = aPosition* visualSize; return vec4( vPosition + anchorPoint*visualSize + (visualOffset + origin)*uSize.xy, 0.0, 1.0 ); } diff --git a/dali-toolkit/internal/graphics/shaders/gradient-visual-bounding-box-rounded-corner-shader.vert b/dali-toolkit/internal/graphics/shaders/gradient-visual-bounding-box-rounded-corner-shader.vert index 144fa81..bd08a63 100644 --- a/dali-toolkit/internal/graphics/shaders/gradient-visual-bounding-box-rounded-corner-shader.vert +++ b/dali-toolkit/internal/graphics/shaders/gradient-visual-bounding-box-rounded-corner-shader.vert @@ -5,7 +5,8 @@ uniform mediump mat3 uAlignmentMatrix; varying mediump vec2 vTexCoord; varying mediump vec2 vPosition; varying mediump vec2 vRectSize; -varying mediump float vCornerRadius; +varying mediump vec2 vOptRectSize; +varying mediump vec4 vCornerRadius; //Visual size and offset uniform mediump vec2 offset; @@ -13,20 +14,22 @@ uniform highp vec2 size; uniform mediump vec4 offsetSizeMode; uniform mediump vec2 origin; uniform mediump vec2 anchorPoint; -uniform mediump float cornerRadius; +uniform mediump vec4 cornerRadius; uniform mediump float cornerRadiusPolicy; vec4 ComputeVertexPosition() { - vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw ); - vec2 visualOffset = mix( offset, offset/uSize.xy, offsetSizeMode.xy); - mediump float minSize = min( visualSize.x, visualSize.y ); - vCornerRadius = mix( cornerRadius * minSize, cornerRadius, cornerRadiusPolicy); - vCornerRadius = min( vCornerRadius, minSize * 0.5 ); - vRectSize = visualSize * 0.5 - vCornerRadius; - vCornerRadius = max( vCornerRadius, 1.0 ); + vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw); + vec2 visualOffset = mix(offset, offset/uSize.xy, offsetSizeMode.xy); + mediump float minSize = min(visualSize.x, visualSize.y); + vCornerRadius = mix(cornerRadius * minSize, cornerRadius, cornerRadiusPolicy); + vCornerRadius = min(vCornerRadius, minSize * 0.5); + vRectSize = visualSize * 0.5; + // Optimize fragment shader + mediump float maxRadius = max(max(vCornerRadius.x, vCornerRadius.y), max(vCornerRadius.z, vCornerRadius.w)); + vOptRectSize = vRectSize - 0.2929 * maxRadius - 1.0; vPosition = aPosition * visualSize; - return vec4( (aPosition + anchorPoint)*visualSize + (visualOffset + origin)*uSize.xy, 0.0, 1.0 ); + return vec4((aPosition + anchorPoint)*visualSize + (visualOffset + origin)*uSize.xy, 0.0, 1.0); } void main() diff --git a/dali-toolkit/internal/graphics/shaders/gradient-visual-linear-rounded-corner-shader.frag b/dali-toolkit/internal/graphics/shaders/gradient-visual-linear-rounded-corner-shader.frag index 548367c..1b29ae0 100644 --- a/dali-toolkit/internal/graphics/shaders/gradient-visual-linear-rounded-corner-shader.frag +++ b/dali-toolkit/internal/graphics/shaders/gradient-visual-linear-rounded-corner-shader.frag @@ -4,23 +4,35 @@ uniform lowp vec3 mixColor; varying mediump vec2 vTexCoord; varying mediump vec2 vPosition; varying mediump vec2 vRectSize; -varying mediump float vCornerRadius; +varying mediump vec2 vOptRectSize; +varying mediump vec4 vCornerRadius; void main() { gl_FragColor = texture2D( sTexture, vec2( vTexCoord.y, 0.5 ) ) * vec4(mixColor, 1.0) * uColor; - mediump vec2 diff = abs( vPosition ) - vRectSize; - mediump float dist = length( max( diff, vec2( 0.0 ) ) ) - vCornerRadius; - if( dist > 1.0 ) + if(abs(vPosition.x) < vOptRectSize.x && abs(vPosition.y) < vOptRectSize.y) { - gl_FragColor = vec4( 0.0 ); + return; } - else if( dist > -1.0 ) + mediump float radius = + mix( + mix(vCornerRadius.x, vCornerRadius.y, sign(vPosition.x) * 0.5 + 0.5), + mix(vCornerRadius.w, vCornerRadius.z, sign(vPosition.x) * 0.5 + 0.5), + sign(vPosition.y) * 0.5 + 0.5 + ); + + mediump vec2 diff = abs(vPosition) - vRectSize + radius; + mediump float dist = length(max(diff, vec2(0.0))) - radius; + if(dist > 1.0) + { + gl_FragColor = vec4(0.0); + } + else if(dist > -1.0) { - if( min( diff.x, diff.y ) < 0.0 ) + if(min(diff.x, diff.y) < 0.0) { - dist += min( diff.x, diff.y ) / vCornerRadius; + dist += min(diff.x, diff.y) / max(radius, 1.0); } - gl_FragColor *= 1.0 - smoothstep( -1.0, 1.0, dist ); + gl_FragColor *= 1.0 - smoothstep(-1.0, 1.0, dist); } } diff --git a/dali-toolkit/internal/graphics/shaders/gradient-visual-radial-rounded-corner-shader.frag b/dali-toolkit/internal/graphics/shaders/gradient-visual-radial-rounded-corner-shader.frag index 10bf0fe..68df0c5 100644 --- a/dali-toolkit/internal/graphics/shaders/gradient-visual-radial-rounded-corner-shader.frag +++ b/dali-toolkit/internal/graphics/shaders/gradient-visual-radial-rounded-corner-shader.frag @@ -4,23 +4,35 @@ uniform lowp vec3 mixColor; varying mediump vec2 vTexCoord; varying mediump vec2 vPosition; varying mediump vec2 vRectSize; -varying mediump float vCornerRadius; +varying mediump vec2 vOptRectSize; +varying mediump vec4 vCornerRadius; void main() { gl_FragColor = texture2D( sTexture, vec2( length(vTexCoord), 0.5 ) ) * vec4(mixColor, 1.0) * uColor; - mediump vec2 diff = abs( vPosition ) - vRectSize; - mediump float dist = length( max( diff, vec2( 0.0 ) ) ) - vCornerRadius; - if( dist > 1.0 ) + if(abs(vPosition.x) < vOptRectSize.x && abs(vPosition.y) < vOptRectSize.y) { - gl_FragColor = vec4( 0.0 ); + return; } - else if( dist > -1.0 ) + mediump float radius = + mix( + mix(vCornerRadius.x, vCornerRadius.y, sign(vPosition.x) * 0.5 + 0.5), + mix(vCornerRadius.w, vCornerRadius.z, sign(vPosition.x) * 0.5 + 0.5), + sign(vPosition.y) * 0.5 + 0.5 + ); + + mediump vec2 diff = abs(vPosition) - vRectSize + radius; + mediump float dist = length(max(diff, vec2(0.0))) - radius; + if(dist > 1.0) + { + gl_FragColor = vec4(0.0); + } + else if(dist > -1.0) { - if( min( diff.x, diff.y ) < 0.0) + if(min(diff.x, diff.y) < 0.0) { - dist += min( diff.x, diff.y ) / vCornerRadius; + dist += min(diff.x, diff.y) / max(radius, 1.0); } - gl_FragColor *= 1.0 - smoothstep( -1.0, 1.0, dist ); + gl_FragColor *= 1.0 - smoothstep(-1.0, 1.0, dist); } } diff --git a/dali-toolkit/internal/graphics/shaders/gradient-visual-user-space-rounded-corner-shader.vert b/dali-toolkit/internal/graphics/shaders/gradient-visual-user-space-rounded-corner-shader.vert index f383185..23ded26 100644 --- a/dali-toolkit/internal/graphics/shaders/gradient-visual-user-space-rounded-corner-shader.vert +++ b/dali-toolkit/internal/graphics/shaders/gradient-visual-user-space-rounded-corner-shader.vert @@ -5,7 +5,8 @@ uniform mediump mat3 uAlignmentMatrix; varying mediump vec2 vTexCoord; varying mediump vec2 vPosition; varying mediump vec2 vRectSize; -varying mediump float vCornerRadius; +varying mediump vec2 vOptRectSize; +varying mediump vec4 vCornerRadius; //Visual size and offset uniform mediump vec2 offset; @@ -13,20 +14,23 @@ uniform highp vec2 size; uniform mediump vec4 offsetSizeMode; uniform mediump vec2 origin; uniform mediump vec2 anchorPoint; -uniform mediump float cornerRadius; +uniform mediump vec4 cornerRadius; uniform mediump float cornerRadiusPolicy; vec4 ComputeVertexPosition() { - vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw ); - vec2 visualOffset = mix( offset, offset/uSize.xy, offsetSizeMode.xy); - mediump float minSize = min( visualSize.x, visualSize.y ); - vCornerRadius = mix( cornerRadius * minSize, cornerRadius, cornerRadiusPolicy); - vCornerRadius = min( vCornerRadius, minSize * 0.5 ); - vRectSize = visualSize * 0.5 - vCornerRadius; - vCornerRadius = max( vCornerRadius, 1.0 ); + vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw); + vec2 visualOffset = mix(offset, offset/uSize.xy, offsetSizeMode.xy); + mediump float minSize = min(visualSize.x, visualSize.y); + vCornerRadius = mix(cornerRadius * minSize, cornerRadius, cornerRadiusPolicy); + vCornerRadius = min(vCornerRadius, minSize * 0.5); + vRectSize = visualSize * 0.5; + // Optimze fragment shader + mediump float maxRadius = max(max(vCornerRadius.x, vCornerRadius.y), max(vCornerRadius.z, vCornerRadius.w)); + vOptRectSize = vRectSize - 0.2929 * maxRadius - 1.0; + vCornerRadius = max(vCornerRadius, 1.0); vPosition = aPosition * visualSize; - return vec4( (aPosition + anchorPoint)*visualSize + (visualOffset + origin)*uSize.xy, 0.0, 1.0 ); + return vec4((aPosition + anchorPoint)*visualSize + (visualOffset + origin)*uSize.xy, 0.0, 1.0); } void main() diff --git a/dali-toolkit/internal/graphics/shaders/image-visual-rounded-corner-shader.frag b/dali-toolkit/internal/graphics/shaders/image-visual-rounded-corner-shader.frag index 0e2c1d8..6eacb93 100644 --- a/dali-toolkit/internal/graphics/shaders/image-visual-rounded-corner-shader.frag +++ b/dali-toolkit/internal/graphics/shaders/image-visual-rounded-corner-shader.frag @@ -1,7 +1,8 @@ INPUT mediump vec2 vTexCoord; INPUT mediump vec2 vPosition; INPUT mediump vec2 vRectSize; -INPUT mediump float vCornerRadius; +INPUT mediump vec2 vOptRectSize; +INPUT mediump vec4 vCornerRadius; uniform sampler2D sTexture; uniform lowp vec4 uColor; @@ -10,23 +11,35 @@ uniform lowp float preMultipliedAlpha; void main() { - mediump vec2 diff = abs( vPosition ) - vRectSize; - mediump float dist = length( max( diff, vec2( 0.0 ) ) ) - vCornerRadius; + if(abs(vPosition.x) < vOptRectSize.x && abs(vPosition.y) < vOptRectSize.y) + { + OUT_COLOR = TEXTURE(sTexture, vTexCoord) * uColor * vec4(mixColor, 1.0); + return; + } + mediump float radius = + mix( + mix(vCornerRadius.x, vCornerRadius.y, sign(vPosition.x) * 0.5 + 0.5), + mix(vCornerRadius.w, vCornerRadius.z, sign(vPosition.x) * 0.5 + 0.5), + sign(vPosition.y) * 0.5 + 0.5 + ); + + mediump vec2 diff = abs(vPosition) - vRectSize + radius; + mediump float dist = length(max(diff, vec2(0.0))) - radius; mediump float opacity = 1.0; - if( dist > 1.0 ) + if(dist > 1.0) { opacity = 0.0; } - else if( dist > -1.0 ) + else if(dist > -1.0) { - if( min( diff.x, diff.y ) < 0.0 ) + if(min(diff.x, diff.y) < 0.0) { - dist += min( diff.x, diff.y ) / vCornerRadius; + dist += min(diff.x, diff.y) / max(radius, 1.0); } - opacity = 1.0 - smoothstep( -1.0, 1.0, dist ); + opacity = 1.0 - smoothstep(-1.0, 1.0, dist); } - OUT_COLOR = TEXTURE( sTexture, vTexCoord ) * uColor * vec4( mixColor, 1.0 ); + OUT_COLOR = TEXTURE(sTexture, vTexCoord) * uColor * vec4(mixColor, 1.0); OUT_COLOR.a *= opacity; - OUT_COLOR.rgb *= mix( 1.0, opacity, preMultipliedAlpha ); + OUT_COLOR.rgb *= mix(1.0, opacity, preMultipliedAlpha); } diff --git a/dali-toolkit/internal/graphics/shaders/image-visual-rounded-corner-shader.vert b/dali-toolkit/internal/graphics/shaders/image-visual-rounded-corner-shader.vert index 0bd3530..c35b1b6 100644 --- a/dali-toolkit/internal/graphics/shaders/image-visual-rounded-corner-shader.vert +++ b/dali-toolkit/internal/graphics/shaders/image-visual-rounded-corner-shader.vert @@ -2,7 +2,8 @@ INPUT mediump vec2 aPosition; OUTPUT mediump vec2 vTexCoord; OUTPUT mediump vec2 vPosition; OUTPUT mediump vec2 vRectSize; -OUTPUT mediump float vCornerRadius; +OUTPUT mediump vec2 vOptRectSize; +OUTPUT mediump vec4 vCornerRadius; uniform highp mat4 uMvpMatrix; uniform highp vec3 uSize; @@ -14,25 +15,27 @@ uniform highp vec2 size; uniform mediump vec4 offsetSizeMode; uniform mediump vec2 origin; uniform mediump vec2 anchorPoint; -uniform mediump float cornerRadius; +uniform mediump vec4 cornerRadius; uniform mediump float cornerRadiusPolicy; uniform mediump vec2 extraSize; vec4 ComputeVertexPosition() { - vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw ) + extraSize; - vec2 visualOffset = mix( offset, offset/uSize.xy, offsetSizeMode.xy); - mediump float minSize = min( visualSize.x, visualSize.y ); - vCornerRadius = mix( cornerRadius * minSize, cornerRadius, cornerRadiusPolicy); - vCornerRadius = min( vCornerRadius, minSize * 0.5 ); - vRectSize = visualSize * 0.5 - vCornerRadius; - vCornerRadius = max( vCornerRadius, 1.0 ); + vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw) + extraSize; + vec2 visualOffset = mix(offset, offset/uSize.xy, offsetSizeMode.xy); + mediump float minSize = min(visualSize.x, visualSize.y); + vCornerRadius = mix(cornerRadius * minSize, cornerRadius, cornerRadiusPolicy); + vCornerRadius = min(vCornerRadius, minSize * 0.5); + vRectSize = visualSize * 0.5; + // Optimize fragment shader + mediump float maxRadius = max(max(vCornerRadius.x, vCornerRadius.y), max(vCornerRadius.z, vCornerRadius.w)); + vOptRectSize = vRectSize - 0.2929 * maxRadius - 1.0; vPosition = aPosition* visualSize; - return vec4( vPosition + anchorPoint*visualSize + (visualOffset + origin)*uSize.xy, 0.0, 1.0 ); + return vec4(vPosition + anchorPoint*visualSize + (visualOffset + origin)*uSize.xy, 0.0, 1.0); } void main() { gl_Position = uMvpMatrix * ComputeVertexPosition(); - vTexCoord = pixelArea.xy+pixelArea.zw*(aPosition + vec2(0.5) ); + vTexCoord = pixelArea.xy+pixelArea.zw*(aPosition + vec2(0.5)); } diff --git a/dali-toolkit/internal/text/text-controller-text-updater.cpp b/dali-toolkit/internal/text/text-controller-text-updater.cpp index 69e05bf..81adb8a 100644 --- a/dali-toolkit/internal/text/text-controller-text-updater.cpp +++ b/dali-toolkit/internal/text/text-controller-text-updater.cpp @@ -254,7 +254,8 @@ void Controller::TextUpdater::InsertText(Controller& controller, const std::stri const Length numberOfCharactersInModel = logicalModel->mText.Count(); // Restrict new text to fit within Maximum characters setting. - Length maxSizeOfNewText = std::min((impl.mMaximumNumberOfCharacters - numberOfCharactersInModel), characterCount); + Length temp_length = (impl.mMaximumNumberOfCharacters > numberOfCharactersInModel ? impl.mMaximumNumberOfCharacters - numberOfCharactersInModel : 0); + Length maxSizeOfNewText = std::min(temp_length, characterCount); maxLengthReached = (characterCount > maxSizeOfNewText); // The cursor position. diff --git a/dali-toolkit/internal/visuals/visual-base-data-impl.cpp b/dali-toolkit/internal/visuals/visual-base-data-impl.cpp index bb3f8d0..2d42f93 100644 --- a/dali-toolkit/internal/visuals/visual-base-data-impl.cpp +++ b/dali-toolkit/internal/visuals/visual-base-data-impl.cpp @@ -119,7 +119,7 @@ Internal::Visual::Base::Impl::Impl(FittingMode fittingMode, Toolkit::Visual::Typ mTransform(), mMixColor(Color::WHITE), mControlSize(Vector2::ZERO), - mCornerRadius(0.0f), + mCornerRadius(Vector4::ZERO), mCornerRadiusPolicy(1.0f), mDepthIndex(0.0f), mMixColorIndex(Property::INVALID_INDEX), diff --git a/dali-toolkit/internal/visuals/visual-base-data-impl.h b/dali-toolkit/internal/visuals/visual-base-data-impl.h index 2967b1d..acb6805 100644 --- a/dali-toolkit/internal/visuals/visual-base-data-impl.h +++ b/dali-toolkit/internal/visuals/visual-base-data-impl.h @@ -123,7 +123,7 @@ struct Base::Impl Transform mTransform; Vector4 mMixColor; Size mControlSize; - float mCornerRadius; + Vector4 mCornerRadius; float mCornerRadiusPolicy; int mDepthIndex; Property::Index mMixColorIndex; diff --git a/dali-toolkit/internal/visuals/visual-base-impl.cpp b/dali-toolkit/internal/visuals/visual-base-impl.cpp index 331eaf5..528bc14 100644 --- a/dali-toolkit/internal/visuals/visual-base-impl.cpp +++ b/dali-toolkit/internal/visuals/visual-base-impl.cpp @@ -219,10 +219,26 @@ void Visual::Base::SetProperties(const Property::Map& propertyMap) } case Toolkit::DevelVisual::Property::CORNER_RADIUS: { - float radius; - if(value.Get(radius)) + if(value.GetType() == Property::VECTOR4) { - mImpl->mCornerRadius = radius; + // If CORNER_RADIUS Property is Vector4, + // Each values mean the radius of + // (top-left, top-right, bottom-right, bottom-left) + Vector4 radius; + if(value.Get(radius)) + { + mImpl->mCornerRadius = radius; + } + } + else + { + // If CORNER_RADIUS Property is float, + // Every corner radius have same value + float radius; + if(value.Get(radius)) + { + mImpl->mCornerRadius = Vector4(radius, radius, radius, radius); + } } break; } @@ -370,7 +386,7 @@ void Visual::Base::CreatePropertyMap(Property::Map& map) const } if(mImpl->mCornerRadiusIndex != Property::INVALID_INDEX) { - mImpl->mCornerRadius = mImpl->mRenderer.GetProperty(mImpl->mCornerRadiusIndex); + mImpl->mCornerRadius = mImpl->mRenderer.GetProperty(mImpl->mCornerRadiusIndex); } } @@ -449,9 +465,9 @@ bool Visual::Base::IsRoundedCornerRequired() const if(mImpl->mRenderer && mImpl->mCornerRadiusIndex != Property::INVALID_INDEX) { // Update values from Renderer - mImpl->mCornerRadius = mImpl->mRenderer.GetProperty(mImpl->mCornerRadiusIndex); + mImpl->mCornerRadius = mImpl->mRenderer.GetProperty(mImpl->mCornerRadiusIndex); } - return !EqualsZero(mImpl->mCornerRadius) || mImpl->mNeedCornerRadius; + return !(mImpl->mCornerRadius == Vector4::ZERO) || mImpl->mNeedCornerRadius; } void Visual::Base::OnDoAction(const Property::Index actionId, const Property::Value& attributes) diff --git a/dali-toolkit/public-api/controls/control-impl.cpp b/dali-toolkit/public-api/controls/control-impl.cpp index 2c90452..62b1079 100644 --- a/dali-toolkit/public-api/controls/control-impl.cpp +++ b/dali-toolkit/public-api/controls/control-impl.cpp @@ -605,7 +605,7 @@ void Control::OnSceneDisconnection() { if(Accessibility::IsUp()) { - mImpl->AccessibilityDeregister(); + mImpl->AccessibilityDeregister(true); } mImpl->OnSceneDisconnection(); } diff --git a/dali-toolkit/public-api/dali-toolkit-version.cpp b/dali-toolkit/public-api/dali-toolkit-version.cpp index 6330360..7d2ab8a 100644 --- a/dali-toolkit/public-api/dali-toolkit-version.cpp +++ b/dali-toolkit/public-api/dali-toolkit-version.cpp @@ -29,7 +29,7 @@ namespace Toolkit { const unsigned int TOOLKIT_MAJOR_VERSION = 2; const unsigned int TOOLKIT_MINOR_VERSION = 0; -const unsigned int TOOLKIT_MICRO_VERSION = 21; +const unsigned int TOOLKIT_MICRO_VERSION = 22; const char* const TOOLKIT_BUILD_DATE = __DATE__ " " __TIME__; #ifdef DEBUG_ENABLED diff --git a/packaging/dali-toolkit.spec b/packaging/dali-toolkit.spec index 6746d55..674addb 100644 --- a/packaging/dali-toolkit.spec +++ b/packaging/dali-toolkit.spec @@ -1,6 +1,6 @@ Name: dali2-toolkit Summary: Dali 3D engine Toolkit -Version: 2.0.21 +Version: 2.0.22 Release: 1 Group: System/Libraries License: Apache-2.0 and BSD-3-Clause and MIT