From: sunghyun kim Date: Thu, 31 Aug 2023 04:07:43 +0000 (+0900) Subject: Add property to keep widget size X-Git-Tag: accepted/tizen/unified/20231031.163541^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2155104c1facc453fbf7a2c8a2886de923db9928;p=platform%2Fcore%2Fuifw%2Fwidget-viewer-dali.git Add property to keep widget size Add property so that the size of the widget does not change even if the size of the widget viewer changes Change-Id: Ibab741d062c0f8228a8b23d5bcfcfdf86acbcb92 --- diff --git a/widget_viewer_dali/internal/widget_view/widget_view_impl.cpp b/widget_viewer_dali/internal/widget_view/widget_view_impl.cpp index 1f25c61..f7de011 100644 --- a/widget_viewer_dali/internal/widget_view/widget_view_impl.cpp +++ b/widget_viewer_dali/internal/widget_view/widget_view_impl.cpp @@ -90,9 +90,10 @@ DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "widgetStateFaulted", DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "permanentDelete", BOOLEAN, PERMANENT_DELETE ) DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "retryText", MAP, RETRY_TEXT ) DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "effect", MAP, EFFECT ) +DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "keepWidgetSize", BOOLEAN, KEEP_WIDGET_SIZE ) // Internal property for compatibility. -const int TERMINATE_WIDGET = Dali::WidgetView::WidgetView::Property::EFFECT+1; +const int TERMINATE_WIDGET = Dali::WidgetView::WidgetView::Property::KEEP_WIDGET_SIZE+1; const int WIDGET_IMAGE = TERMINATE_WIDGET+1; Dali::PropertyRegistration internalProperty1( typeRegistration, "terminateWidget", TERMINATE_WIDGET, Property::BOOLEAN, Dali::WidgetView::Internal::WidgetView::SetProperty, Dali::WidgetView::Internal::WidgetView::GetProperty ); @@ -225,8 +226,8 @@ WidgetView::WidgetView() mInstanceId(), mContentInfo(), mTitle(), - mWidth( 0 ), - mHeight( 0 ), + mWidgetWidth( 0 ), + mWidgetHeight( 0 ), mPid( -1 ), mUpdatePeriod( 0.0 ), mLoadingTextString(), @@ -241,7 +242,8 @@ WidgetView::WidgetView() mPaused( false ), mPausedManually( false ), mWindowVisible( true ), - mPreviewEnable( true ) + mPreviewEnable( true ), + mKeepWidgetSize(false) { } @@ -251,8 +253,8 @@ WidgetView::WidgetView( const std::string& widgetId, const std::string& contentI mInstanceId(), mContentInfo( contentInfo ), mTitle(), - mWidth( width ), - mHeight( height ), + mWidgetWidth( width ), + mWidgetHeight( height ), mPid( -1 ), mUpdatePeriod( updatePeriod ), mLoadingTextString(), @@ -267,7 +269,8 @@ WidgetView::WidgetView( const std::string& widgetId, const std::string& contentI mPaused( false ), mPausedManually( false ), mWindowVisible( true ), - mPreviewEnable( true ) + mPreviewEnable( true ), + mKeepWidgetSize(false) { } @@ -524,6 +527,16 @@ bool WidgetView::IsPermanentDelete() return mPermanentDelete; } +void WidgetView::SetKeepWidgetSize( bool keepWidgetSize ) +{ + mKeepWidgetSize = keepWidgetSize; +} + +bool WidgetView::IsKeepWidgetSize() +{ + return mKeepWidgetSize; +} + void WidgetView::CreateWidgetRenderer() { Dali::Any source; @@ -635,7 +648,9 @@ void WidgetView::SendWidgetEvent( int event ) mCreated = true; if( mResizeRequired ) { - widget_instance_resize(mInstanceId.c_str(), mWidth, mHeight); + // widget_instance_resize() have to callled after WIDGET_INSTANCE_EVENT_CREATE signal. + // if it called before WIDGET_INSTANCE_EVENT_CREATE signal, widget is able to make some problem. + ResizeWidget(mWidgetWidth, mWidgetHeight); mResizeRequired = false; } break; @@ -829,6 +844,15 @@ void WidgetView::SetProperty( BaseObject* object, Property::Index index, const P } break; } + case Dali::WidgetView::WidgetView::Property::KEEP_WIDGET_SIZE: + { + bool keepWidgetSize; + if( value.Get( keepWidgetSize ) ) + { + impl.SetKeepWidgetSize( keepWidgetSize ); + } + break; + } case TERMINATE_WIDGET: { bool del = false; @@ -907,6 +931,11 @@ Property::Value WidgetView::GetProperty( BaseObject* object, Property::Index ind value = impl.IsPermanentDelete(); break; } + case Dali::WidgetView::WidgetView::Property::KEEP_WIDGET_SIZE: + { + value = impl.IsKeepWidgetSize(); + break; + } } } @@ -987,7 +1016,7 @@ void WidgetView::OnInitialize() } // Preview image - widget_service_get_size_type( mWidth, mHeight, &sizeType ); + widget_service_get_size_type( mWidgetWidth, mWidgetHeight, &sizeType ); previewPath = widget_service_get_preview_image_path( mWidgetId.c_str(), sizeType ); if( previewPath ) @@ -1014,7 +1043,7 @@ void WidgetView::OnInitialize() mPreviewImage.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); self.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS ); - self.SetProperty( Actor::Property::SIZE, Vector2(mWidth, mHeight)); + self.SetProperty( Actor::Property::SIZE, Vector2(mWidgetWidth, mWidgetHeight)); self.Add( mPreviewActor ); mPreviewActor.Add( mPreviewImage ); @@ -1338,8 +1367,8 @@ void WidgetView::DeleteBuffer(wl_buffer* buffer, WidgetBuffer* widgetBuffer) Vector3 WidgetView::GetNaturalSize() { Vector3 size; - size.x = mWidth; - size.y = mHeight; + size.x = mWidgetWidth; + size.y = mWidgetHeight; if( size.x > 0 && size.y > 0 ) { @@ -1742,7 +1771,7 @@ bool WidgetView::LaunchWidget() ops.added_cb = OnBufferAdded; mWatcherHandle = screen_connector_toolkit_add(&ops, (char *)mInstanceId.c_str(), static_cast(SCREEN_CONNECTOR_SCREEN_TYPE_WIDGET | SCREEN_CONNECTOR_SCREEN_TYPE_COMPONENT_BASED), this); - mPid = widget_instance_launch( mInstanceId.c_str(), (char *)mContentInfo.c_str(), mWidth, mHeight ); + mPid = widget_instance_launch( mInstanceId.c_str(), (char *)mContentInfo.c_str(), mWidgetWidth, mWidgetHeight ); if( mPid < 0) { ShowLoadingState( false ); @@ -1757,6 +1786,29 @@ bool WidgetView::LaunchWidget() return true; } +void WidgetView::ResizeWidget(int width, int height) +{ + if( !mKeepWidgetSize ) + { + // When widget is not created, we can't call widget_instance_resize(). + // in this case, we just save the size and do resize when instance is created. + if( mCreated ) + { + widget_instance_resize(mInstanceId.c_str(), width, height); + } + else + { + mResizeRequired = true; + mWidgetWidth = width; + mWidgetHeight = height; + } + } + else + { + DALI_LOG_RELEASE_INFO("widget instance is not resized(%dx%d), because KEEP_WIDGET_SIZE is true \n", width, height); + } +} + void WidgetView::ReloadWidget() { if(!mCreated) @@ -1883,25 +1935,13 @@ bool WidgetView::GetStringFromProperty( const Dali::Property::Value& value, std: void WidgetView::OnRelayout( const Vector2& size, RelayoutContainer& container ) { Control::OnRelayout( size, container ); - - // When widget is not created, we can't call widget_instance_resize(). - // in this case, we just save the size and do resize when instance is created. - if( mCreated ) - { - widget_instance_resize(mInstanceId.c_str(), size.x, size.y); - } - else - { - mResizeRequired = true; - mWidth = size.x; - mHeight = size.y; - } + ResizeWidget(size.x, size.y); } void WidgetView::OnSizeAnimation( Animation& animation, const Vector3& targetSize ) { Control::OnSizeAnimation( animation, targetSize ); - widget_instance_resize(mInstanceId.c_str(), targetSize.x, targetSize.y); + ResizeWidget(targetSize.x, targetSize.y); } WidgetView::WidgetViewAccessible::WidgetViewAccessible(Dali::Actor self) diff --git a/widget_viewer_dali/internal/widget_view/widget_view_impl.h b/widget_viewer_dali/internal/widget_view/widget_view_impl.h index 3dba52b..1c270a4 100644 --- a/widget_viewer_dali/internal/widget_view/widget_view_impl.h +++ b/widget_viewer_dali/internal/widget_view/widget_view_impl.h @@ -218,6 +218,15 @@ public: // Internal API */ bool IsWidgetFaulted(); + /** + * @brief Sets the keepWidgetSize status + */ + void SetKeepWidgetSize( bool keepWidgetSize ); + + /** + * @brief Returns the keepWidgetSize status + */ + bool IsKeepWidgetSize(); /** * @brief Creates a Widget Renderer */ @@ -463,6 +472,11 @@ private: */ bool LaunchWidget(); + /** + * @brief Call a widget_instance_resize + */ + void ResizeWidget(int width, int height); + /** * @brief Callback when the visibility of the window is changed. */ @@ -517,8 +531,8 @@ private: std::string mContentInfo; std::string mTitle; - int mWidth; - int mHeight; + int mWidgetWidth; + int mWidgetHeight; int mPid; float mUpdatePeriod; @@ -542,7 +556,8 @@ private: bool mPaused; ///< Check whether widget is paused or not bool mPausedManually; ///< Check whether widget is paused or not by application bool mWindowVisible; ///< Check whether window is visible or not - bool mPreviewEnable; ///< Check whether preview is enable or not + bool mPreviewEnable; ///< Check whether preview is enable or not + bool mKeepWidgetSize; ///< Check whether widget instance keep it's size or not Dali::Property::Map mEffectPropertyMap; ///< Shader for effect // Notification for property change confirmation diff --git a/widget_viewer_dali/public_api/widget_view/widget_view.h b/widget_viewer_dali/public_api/widget_view/widget_view.h index 4e7670e..fd7ee8d 100644 --- a/widget_viewer_dali/public_api/widget_view/widget_view.h +++ b/widget_viewer_dali/public_api/widget_view/widget_view.h @@ -172,7 +172,13 @@ public: * @brief name "effect", type Property::MAP * @since_tizen 4.0 */ - EFFECT + EFFECT, + + /** + * @brief name "keepWidgetSize", type boolean + * @since_tizen 8.0 + */ + KEEP_WIDGET_SIZE }; };