Add property to keep widget size 71/298071/5 accepted/tizen/8.0/unified/20231103.040905 accepted/tizen/unified/20231031.163541
authorsunghyun kim <scholb.kim@samsung.com>
Thu, 31 Aug 2023 04:07:43 +0000 (13:07 +0900)
committersunghyun kim <scholb.kim@samsung.com>
Fri, 27 Oct 2023 01:06:06 +0000 (10:06 +0900)
Add property so that the size of the widget does not change even if the size of the widget viewer changes

Change-Id: Ibab741d062c0f8228a8b23d5bcfcfdf86acbcb92

widget_viewer_dali/internal/widget_view/widget_view_impl.cpp
widget_viewer_dali/internal/widget_view/widget_view_impl.h
widget_viewer_dali/public_api/widget_view/widget_view.h

index 1f25c618056b58597e3a546307ec325656da6b20..f7de011c5fd983ad97357cd1d8c1c074acc7c2e8 100644 (file)
@@ -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_e>(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)
index 3dba52bf6aed326a4c0c4d9934c5a8b5d74b47dc..1c270a41b69876b1c0bb3c8b3a5716b03219260d 100644 (file)
@@ -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
index 4e7670e2ff4c7a8ad27013e2e49a4fc69665bb46..fd7ee8dae518cd19eafaa53e8c813d1d08118d91 100644 (file)
@@ -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
 
     };
   };