[gimp] app: update image-projection priority rect when switching displays
- From: Ell <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: update image-projection priority rect when switching displays
- Date: Thu, 5 Sep 2019 10:57:19 +0000 (UTC)
commit 582930aa61eabda5ee9d5ec7c60f5988d5cf26b2
Author: Ell <ell_se yahoo com>
Date: Thu Sep 5 13:51:35 2019 +0300
app: update image-projection priority rect when switching displays
Update the image-projection priority rect to the current display's
viewport when the display becomes active, so that the right region
is rendered first when switching between different displays of the
same image.
app/display/gimpdisplayshell-handlers.c | 26 +++++++++++++++++++
app/display/gimpdisplayshell.c | 46 ++++++++++++++++++---------------
app/display/gimpdisplayshell.h | 3 +++
3 files changed, 54 insertions(+), 21 deletions(-)
---
diff --git a/app/display/gimpdisplayshell-handlers.c b/app/display/gimpdisplayshell-handlers.c
index f307d6ef0e..5ce0184a5f 100644
--- a/app/display/gimpdisplayshell-handlers.c
+++ b/app/display/gimpdisplayshell-handlers.c
@@ -179,6 +179,9 @@ static void gimp_display_shell_quality_notify_handler (GObject *c
static void gimp_display_shell_color_config_notify_handler (GObject *config,
GParamSpec *param_spec,
GimpDisplayShell *shell);
+static void gimp_display_shell_display_changed_handler (GimpContext *context,
+ GimpDisplay *display,
+ GimpDisplayShell *shell);
/* public functions */
@@ -190,6 +193,7 @@ gimp_display_shell_connect (GimpDisplayShell *shell)
GimpContainer *vectors;
GimpDisplayConfig *config;
GimpColorConfig *color_config;
+ GimpContext *user_context;
GList *list;
g_return_if_fail (GIMP_IS_DISPLAY_SHELL (shell));
@@ -204,6 +208,8 @@ gimp_display_shell_connect (GimpDisplayShell *shell)
config = shell->display->config;
color_config = GIMP_CORE_CONFIG (config)->color_management;
+ user_context = gimp_get_user_context (shell->display->gimp);
+
g_signal_connect (image, "clean",
G_CALLBACK (gimp_display_shell_clean_dirty_handler),
shell);
@@ -384,6 +390,10 @@ gimp_display_shell_connect (GimpDisplayShell *shell)
G_CALLBACK (gimp_display_shell_color_config_notify_handler),
shell);
+ g_signal_connect (user_context, "display-changed",
+ G_CALLBACK (gimp_display_shell_display_changed_handler),
+ shell);
+
gimp_display_shell_active_vectors_handler (image, shell);
gimp_display_shell_invalidate_preview_handler (image, shell);
gimp_display_shell_quick_mask_changed_handler (image, shell);
@@ -414,6 +424,7 @@ gimp_display_shell_disconnect (GimpDisplayShell *shell)
GimpContainer *vectors;
GimpDisplayConfig *config;
GimpColorConfig *color_config;
+ GimpContext *user_context;
GList *list;
g_return_if_fail (GIMP_IS_DISPLAY_SHELL (shell));
@@ -428,6 +439,8 @@ gimp_display_shell_disconnect (GimpDisplayShell *shell)
config = shell->display->config;
color_config = GIMP_CORE_CONFIG (config)->color_management;
+ user_context = gimp_get_user_context (shell->display->gimp);
+
gimp_display_shell_icon_update_stop (shell);
gimp_canvas_layer_boundary_set_layer (GIMP_CANVAS_LAYER_BOUNDARY (shell->layer_boundary),
@@ -436,6 +449,10 @@ gimp_display_shell_disconnect (GimpDisplayShell *shell)
gimp_canvas_canvas_boundary_set_image (GIMP_CANVAS_CANVAS_BOUNDARY (shell->canvas_boundary),
NULL);
+ g_signal_handlers_disconnect_by_func (user_context,
+ gimp_display_shell_display_changed_handler,
+ shell);
+
g_signal_handlers_disconnect_by_func (color_config,
gimp_display_shell_color_config_notify_handler,
shell);
@@ -1214,3 +1231,12 @@ gimp_display_shell_color_config_notify_handler (GObject *config,
shell->color_config_set = FALSE;
}
}
+
+static void
+gimp_display_shell_display_changed_handler (GimpContext *context,
+ GimpDisplay *display,
+ GimpDisplayShell *shell)
+{
+ if (shell->display == display)
+ gimp_display_shell_update_priority_rect (shell);
+}
diff --git a/app/display/gimpdisplayshell.c b/app/display/gimpdisplayshell.c
index 65d51902ab..3ad034e4d7 100644
--- a/app/display/gimpdisplayshell.c
+++ b/app/display/gimpdisplayshell.c
@@ -964,23 +964,6 @@ gimp_display_shell_popup_menu (GtkWidget *widget)
return TRUE;
}
-static void
-gimp_display_shell_set_priority_viewport (GimpDisplayShell *shell)
-{
- GimpImage *image = gimp_display_get_image (shell->display);
-
- if (image)
- {
- GimpProjection *projection = gimp_image_get_projection (image);
- gint x, y;
- gint width, height;
-
- gimp_display_shell_untransform_viewport (shell, ! shell->show_all,
- &x, &y, &width, &height);
- gimp_projection_set_priority_rect (projection, x, y, width, height);
- }
-}
-
static void
gimp_display_shell_real_scaled (GimpDisplayShell *shell)
{
@@ -995,7 +978,7 @@ gimp_display_shell_real_scaled (GimpDisplayShell *shell)
if (shell->display == gimp_context_get_display (user_context))
{
- gimp_display_shell_set_priority_viewport (shell);
+ gimp_display_shell_update_priority_rect (shell);
gimp_ui_manager_update (shell->popup_manager, shell->display);
}
@@ -1015,7 +998,7 @@ gimp_display_shell_real_scrolled (GimpDisplayShell *shell)
if (shell->display == gimp_context_get_display (user_context))
{
- gimp_display_shell_set_priority_viewport (shell);
+ gimp_display_shell_update_priority_rect (shell);
}
}
@@ -1034,7 +1017,7 @@ gimp_display_shell_real_rotated (GimpDisplayShell *shell)
if (shell->display == gimp_context_get_display (user_context))
{
- gimp_display_shell_set_priority_viewport (shell);
+ gimp_display_shell_update_priority_rect (shell);
gimp_ui_manager_update (shell->popup_manager, shell->display);
}
@@ -1802,7 +1785,7 @@ gimp_display_shell_set_show_all (GimpDisplayShell *shell,
if (shell->display == gimp_context_get_display (user_context))
{
- gimp_display_shell_set_priority_viewport (shell);
+ gimp_display_shell_update_priority_rect (shell);
gimp_ui_manager_update (shell->popup_manager, shell->display);
}
@@ -1860,6 +1843,27 @@ gimp_display_shell_get_bounding_box (GimpDisplayShell *shell)
return bounding_box;
}
+void
+gimp_display_shell_update_priority_rect (GimpDisplayShell *shell)
+{
+ GimpImage *image;
+
+ g_return_if_fail (GIMP_IS_DISPLAY_SHELL (shell));
+
+ image = gimp_display_get_image (shell->display);
+
+ if (image)
+ {
+ GimpProjection *projection = gimp_image_get_projection (image);
+ gint x, y;
+ gint width, height;
+
+ gimp_display_shell_untransform_viewport (shell, ! shell->show_all,
+ &x, &y, &width, &height);
+ gimp_projection_set_priority_rect (projection, x, y, width, height);
+ }
+}
+
void
gimp_display_shell_flush (GimpDisplayShell *shell)
{
diff --git a/app/display/gimpdisplayshell.h b/app/display/gimpdisplayshell.h
index 20280da050..1abe00a7c1 100644
--- a/app/display/gimpdisplayshell.h
+++ b/app/display/gimpdisplayshell.h
@@ -318,6 +318,9 @@ GimpPickable * gimp_display_shell_get_pickable (GimpDisplayShell *shell);
GeglRectangle gimp_display_shell_get_bounding_box
(GimpDisplayShell *shell);
+void gimp_display_shell_update_priority_rect
+ (GimpDisplayShell *shell);
+
void gimp_display_shell_flush (GimpDisplayShell *shell);
void gimp_display_shell_pause (GimpDisplayShell *shell);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]