DALI_PROPERTY_REGISTRATION( Toolkit, WebView, "scrollSize", VECTOR2, SCROLL_SIZE )
DALI_PROPERTY_REGISTRATION( Toolkit, WebView, "contentSize", VECTOR2, CONTENT_SIZE )
DALI_PROPERTY_REGISTRATION( Toolkit, WebView, "title", STRING, TITLE )
+DALI_PROPERTY_REGISTRATION( Toolkit, WebView, "videoHoleEnabled", BOOLEAN, VIDEO_HOLE_ENABLED )
DALI_SIGNAL_REGISTRATION( Toolkit, WebView, "pageLoadStarted", PAGE_LOAD_STARTED_SIGNAL )
DALI_SIGNAL_REGISTRATION( Toolkit, WebView, "pageLoadFinished", PAGE_LOAD_FINISHED_SIGNAL )
mWebEngine(),
mPageLoadStartedSignal(),
mPageLoadFinishedSignal(),
- mPageLoadErrorSignal()
+ mPageLoadErrorSignal(),
+ mVideoHoleEnabled( true ),
+ mWebViewArea ( 0, 0, mWebViewSize.width, mWebViewSize.height )
{
mWebEngine = Dali::WebEngine::New();
mWebEngine(),
mPageLoadStartedSignal(),
mPageLoadFinishedSignal(),
- mPageLoadErrorSignal()
+ mPageLoadErrorSignal(),
+ mVideoHoleEnabled( true ),
+ mWebViewArea ( 0, 0, mWebViewSize.width, mWebViewSize.height )
{
mWebEngine = Dali::WebEngine::New();
WebView::~WebView()
{
+ if( mWebEngine )
+ {
+ mWebEngine.Destroy();
+ }
}
Toolkit::WebView WebView::New()
void WebView::OnInitialize()
{
- Self().SetProperty( Actor::Property::KEYBOARD_FOCUSABLE, true );
- Self().TouchedSignal().Connect( this, &WebView::OnTouchEvent );
+ Actor self = Self();
+
+ self.SetProperty( Actor::Property::KEYBOARD_FOCUSABLE, true );
+ self.TouchedSignal().Connect( this, &WebView::OnTouchEvent );
+
+ mPositionUpdateNotification = self.AddPropertyNotification( Actor::Property::WORLD_POSITION, StepCondition( 1.0f, 1.0f ) );
+ mSizeUpdateNotification = self.AddPropertyNotification( Actor::Property::SIZE, StepCondition( 1.0f, 1.0f ) );
+ mScaleUpdateNotification = self.AddPropertyNotification( Actor::Property::WORLD_SCALE, StepCondition( 0.1f, 1.0f ) );
+ mPositionUpdateNotification.NotifySignal().Connect( this, &WebView::UpdateDisplayArea );
+ mSizeUpdateNotification.NotifySignal().Connect( this, &WebView::UpdateDisplayArea );
+ mScaleUpdateNotification.NotifySignal().Connect( this, &WebView::UpdateDisplayArea );
if( mWebEngine )
{
Dali::PixelData pixelData = mWebEngine.GetFavicon();
std::string url = Dali::Toolkit::Image::GenerateUrl( pixelData );
mFaviconView = Dali::Toolkit::ImageView::New( url );
- mFaviconView.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
+ mFaviconView.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
mFaviconView.SetProperty( Dali::Actor::Property::SIZE, Vector2( pixelData.GetWidth(), pixelData.GetHeight() ) );
}
return mFaviconView;
DevelControl::RegisterVisual( *this, Toolkit::WebView::Property::URL, mVisual );
mWebEngine.LoadUrl( url );
}
+
+ if ( mVideoHoleEnabled )
+ {
+ EnableBlendMode( false );
+ }
}
}
DevelControl::RegisterVisual( *this, Toolkit::WebView::Property::URL, mVisual );
mWebEngine.LoadHtmlString( htmlString );
}
+
+ if ( mVideoHoleEnabled )
+ {
+ EnableBlendMode( false );
+ }
}
}
}
}
+void WebView::UpdateDisplayArea( Dali::PropertyNotification& /*source*/ )
+{
+ if( !mWebEngine )
+ return;
+
+ Actor self( Self() );
+
+ bool positionUsesAnchorPoint = self.GetProperty< bool >( Actor::Property::POSITION_USES_ANCHOR_POINT );
+ Vector3 actorSize = self.GetCurrentProperty< Vector3 >( Actor::Property::SIZE ) * self.GetCurrentProperty< Vector3 >( Actor::Property::SCALE );
+ Vector3 anchorPointOffSet = actorSize * ( positionUsesAnchorPoint ? self.GetCurrentProperty< Vector3 >( Actor::Property::ANCHOR_POINT ) : AnchorPoint::TOP_LEFT );
+ Vector2 screenPosition = self.GetProperty< Vector2 >( Actor::Property::SCREEN_POSITION );
+
+ Dali::Rect< int > displayArea;
+ displayArea.x = screenPosition.x - anchorPointOffSet.x;
+ displayArea.y = screenPosition.y - anchorPointOffSet.y;
+ displayArea.width = actorSize.x;
+ displayArea.height = actorSize.y;
+
+ Size displaySize = Size( displayArea.width, displayArea.height );
+ if ( mWebViewSize != displaySize )
+ {
+ mWebViewSize = displaySize;
+ }
+
+ if (mWebViewArea != displayArea )
+ {
+ mWebViewArea = displayArea;
+ mWebEngine.UpdateDisplayArea( mWebViewArea );
+ }
+}
+
+void WebView::EnableVideoHole( bool enabled )
+{
+ mVideoHoleEnabled = enabled;
+
+ EnableBlendMode( !mVideoHoleEnabled );
+
+ if( mWebEngine )
+ {
+ mWebEngine.EnableVideoHole( mVideoHoleEnabled );
+ }
+}
+
+void WebView::EnableBlendMode( bool blendEnabled )
+{
+ Actor self = Self();
+ for (uint32_t i = 0; i < self.GetRendererCount(); i++)
+ {
+ Dali::Renderer render = self.GetRendererAt( i );
+ render.SetProperty( Renderer::Property::BLEND_MODE, blendEnabled ? BlendMode::ON : BlendMode::OFF );
+ }
+}
+
Dali::Toolkit::WebView::WebViewPageLoadSignalType& WebView::PageLoadStartedSignal()
{
return mPageLoadStartedSignal;
return Vector3( mWebViewSize );
}
-void WebView::OnRelayout( const Vector2& size, RelayoutContainer& container )
+void WebView::OnSceneConnection( int depth )
{
- Control::OnRelayout( size, container );
-
- if( size.width > 0 && size.height > 0 && mWebViewSize != size )
- {
- mWebViewSize = size;
+ Control::OnSceneConnection( depth );
- if( mWebEngine )
- {
- mWebEngine.SetSize( size.width, size.height );
- }
- }
+ EnableBlendMode( !mVideoHoleEnabled );
}
void WebView::SetProperty( BaseObject* object, Property::Index index, const Property::Value& value )
}
break;
}
+ case Toolkit::WebView::Property::VIDEO_HOLE_ENABLED:
+ {
+ bool input;
+ if( value.Get( input ) )
+ {
+ impl.EnableVideoHole( input );
+ }
+ break;
+ }
}
}
}
}
case Toolkit::WebView::Property::SCROLL_POSITION:
{
- int x, y;
- impl.GetScrollPosition( x, y );
- value = Vector2( x, y );
+ value = impl.GetScrollPosition();
break;
}
case Toolkit::WebView::Property::SCROLL_SIZE:
{
- int width, height;
- impl.GetScrollSize( width, height );
- value = Vector2( width, height );
+ value = impl.GetScrollSize();
break;
}
case Toolkit::WebView::Property::CONTENT_SIZE:
{
- int width, height;
- impl.GetContentSize( width, height );
- value = Vector2( width, height );
+ value = impl.GetContentSize();
break;
}
case Toolkit::WebView::Property::TITLE:
value = impl.GetTitle();
break;
}
+ case Toolkit::WebView::Property::VIDEO_HOLE_ENABLED:
+ {
+ value = impl.mVideoHoleEnabled;
+ break;
+ }
default:
break;
}
}
}
-void WebView::GetScrollPosition( int& x, int& y ) const
+Dali::Vector2 WebView::GetScrollPosition() const
{
- if( mWebEngine )
- {
- mWebEngine.GetScrollPosition( x, y );
- }
+ return mWebEngine ? mWebEngine.GetScrollPosition() : Dali::Vector2::ZERO;
}
-void WebView::GetScrollSize( int& width, int& height ) const
+Dali::Vector2 WebView::GetScrollSize() const
{
- if( mWebEngine )
- {
- mWebEngine.GetScrollSize( width, height );
- }
+ return mWebEngine ? mWebEngine.GetScrollSize() : Dali::Vector2::ZERO;
}
-void WebView::GetContentSize( int& width, int& height ) const
+Dali::Vector2 WebView::GetContentSize() const
{
- if( mWebEngine )
- {
- mWebEngine.GetContentSize( width, height );
- }
+ return mWebEngine ? mWebEngine.GetContentSize() : Dali::Vector2::ZERO;
}
std::string WebView::GetTitle() const