e_client: added to show guide rect while interactive resize instead of real time... drafts/for/tizen
authorJunseok, Kim <juns.kim@samsung.com>
Wed, 13 Oct 2021 00:40:44 +0000 (09:40 +0900)
committerJunseok, Kim <juns.kim@samsung.com>
Wed, 13 Oct 2021 00:40:44 +0000 (09:40 +0900)
Change-Id: I74ea8df8f844cd68bf059979764a939cc7d78733

src/bin/e_client.c
src/bin/e_client.h
src/bin/e_comp_wl_shell.c

index 0e82e2a5456d078d99d7a284c1942318475eb7a6..c9c56417344e757366df63c11600438e3cc79ca7 100644 (file)
@@ -1741,7 +1741,48 @@ _e_client_resize_handle(E_Client *ec)
        (ec->resize_mode == E_POINTER_RESIZE_TR))
      new_y += (h - new_h);
 
+# if 0 // JUNSEOK
    evas_object_geometry_set(ec->frame, new_x, new_y, new_w, new_h);
+# else
+  if (ec->manage_resize.is_started)
+  {
+    evas_object_geometry_set(ec->manage_resize.resize_guide, new_x, new_y, new_w, new_h);
+
+    ec->manage_resize.x = new_x;
+    ec->manage_resize.y = new_y;
+    ec->manage_resize.w = new_w;
+    ec->manage_resize.h = new_h;
+  }
+  else
+  {
+    if (ec->manage_resize.resize_guide == NULL)
+    {
+      ELOGF("JUNSEOK", "create resize guide rect", ec);
+      Evas_Object *guide_obj = evas_object_rectangle_add(ec->frame);
+      ELOGF("JUNSEOK", "new resize guide : %p", ec, guide_obj);
+
+      /* This object doesn't care about mouse event. And It's also
+        * to avoid events of mouse on the E_Client. */
+      evas_object_pass_events_set(guide_obj, EINA_TRUE);
+
+      evas_object_layer_set(guide_obj, evas_object_layer_get(ec->frame));
+      evas_object_stack_above(guide_obj, ec->frame);
+      evas_object_color_set(guide_obj, 128, 128, 128, 100);
+      evas_object_geometry_set(guide_obj, new_x, new_y, new_w, new_h);
+      evas_object_name_set(guide_obj, "guide_rectangle");
+      evas_object_show(guide_obj);
+      ELOGF("JUNSEOK", "guide rect show: %p", ec, guide_obj);
+
+      ec->manage_resize.resize_guide = guide_obj;
+      ec->manage_resize.is_started = EINA_TRUE;
+
+      ec->manage_resize.x = new_x;
+      ec->manage_resize.y = new_y;
+      ec->manage_resize.w = new_w;
+      ec->manage_resize.h = new_h;
+    }
+  }
+# endif
 }
 
 static int
@@ -1766,6 +1807,25 @@ _e_client_resize_end(E_Client *ec)
 
    ecresize = NULL;
 
+   ELOGF("JUNSEOK", "resize is end", ec);
+   if (ec->manage_resize.is_started)
+   {
+     ELOGF("JUNSEOK", "resize adjust to ec", ec);
+     evas_object_geometry_set(ec->frame,
+                              ec->manage_resize.x,
+                              ec->manage_resize.y,
+                              ec->manage_resize.w,
+                              ec->manage_resize.h);
+     if (ec->manage_resize.resize_guide)
+     {
+       evas_object_hide(ec->manage_resize.resize_guide);
+       ELOGF("JUNSEOK", "guide rect hide: %p", ec, ec->manage_resize.resize_guide);
+       evas_object_del(ec->manage_resize.resize_guide);
+       ec->manage_resize.resize_guide = NULL;
+     }
+     ec->manage_resize.is_started = EINA_FALSE;
+   }
+
    return 1;
 }
 
@@ -4455,6 +4515,9 @@ e_client_new(E_Pixmap *cp, int first_map, int internal)
    _e_client_hook_call(E_CLIENT_HOOK_NEW_CLIENT_POST, ec);
 #endif
 
+   ec->manage_resize.resize_guide = NULL;
+   ec->manage_resize.is_started = EINA_FALSE;
+
    return ec;
 }
 
index d5798c5c702abb8b6ca8a6ae2f4198489dcf3b93..30137a7a380e89416da169be6b38af8514c858b2 100644 (file)
@@ -1025,6 +1025,13 @@ struct E_Client
    } show_pending;
 
    E_Layer floating_saved_layer;
+
+   struct
+   {
+      int x, y, w, h;
+      Evas_Object *resize_guide;
+      Eina_Bool is_started;
+   } manage_resize;
 };
 
 #define e_client_focus_policy_click(ec) \
index 12bdb3ade6ff6e2f3855b9cb76a3cd3c1ed076ea..b8eed75cbd6e22457a838b34c867d6e962a88886 100644 (file)
@@ -274,6 +274,8 @@ e_shell_e_client_interactive_move(E_Client *ec,
 
    TRACE_DS_BEGIN(SHELL:SURFACE MOVE REQUEST CB);
 
+   ELOGF("JUNSEOK", "INTERACTIVE_MOVE START!!", ec);
+
    switch (e_comp_wl->ptr.button)
      {
       case BTN_LEFT:    ev.button = 1; break;
@@ -315,6 +317,8 @@ e_shell_e_client_interactive_resize(E_Client *ec,
 
    TRACE_DS_BEGIN(SHELL:SURFACE RESIZE REQUEST CB);
 
+   ELOGF("JUNSEOK", "INTERACTIVE_RESIZE START!!", ec);
+
    e_comp_wl->resize.resource = resource;
    e_comp_wl->resize.edges = edges;
    e_comp_wl->ptr.grab_x = e_comp_wl->ptr.x - wl_fixed_from_int(ec->client.x);