mirror of https://github.com/GNOME/gimp.git
New function to replace any occurance of
2008-07-11 Martin Nordholts <martinn@svn.gnome.org> * app/display/gimpdisplayshell-scroll.c (gimp_display_shell_get_scaled_image_viewport_offset): New function to replace any occurance of shell->disp_[xy]offset - shell->offset_[xy] that is just an implementation specific way of saying the same thing. * app/display/gimpdisplayshell-draw.c * app/display/gimpdisplayshell-transform.c: Make the code less implementation dependant by using the new function. svn path=/trunk/; revision=26137
This commit is contained in:
parent
78ef0cd13f
commit
18c89550fa
15
ChangeLog
15
ChangeLog
|
@ -1,3 +1,18 @@
|
|||
2008-07-11 Martin Nordholts <martinn@svn.gnome.org>
|
||||
|
||||
* app/display/gimpdisplayshell-scroll.c
|
||||
(gimp_display_shell_get_scaled_image_viewport_offset): New
|
||||
function to replace any occurance of
|
||||
|
||||
shell->disp_[xy]offset - shell->offset_[xy]
|
||||
|
||||
that is just an implementation specific way of saying the same
|
||||
thing.
|
||||
|
||||
* app/display/gimpdisplayshell-draw.c
|
||||
* app/display/gimpdisplayshell-transform.c: Make the code less
|
||||
implementation dependant by using the new function.
|
||||
|
||||
2008-07-11 Martin Nordholts <martinn@svn.gnome.org>
|
||||
|
||||
* app/display/gimpdisplayshell-draw.c
|
||||
|
|
|
@ -534,8 +534,7 @@ gimp_display_shell_draw_area (GimpDisplayShell *shell,
|
|||
level_height = tile_manager_height (tiles);
|
||||
|
||||
/* the size and position of the image viewport coordinates */
|
||||
sx = shell->disp_xoffset - shell->offset_x;
|
||||
sy = shell->disp_yoffset - shell->offset_y;
|
||||
gimp_display_shell_get_scaled_image_viewport_offset (shell, &sx, &sy);
|
||||
sw = PROJ_ROUND (level_width * (shell->scale_x * (1 << level)));
|
||||
sh = PROJ_ROUND (level_height * (shell->scale_y * (1 << level)));
|
||||
|
||||
|
|
|
@ -184,3 +184,21 @@ gimp_display_shell_get_viewport (GimpDisplayShell *shell,
|
|||
if (w) *w = shell->disp_width / shell->scale_x;
|
||||
if (h) *h = shell->disp_height / shell->scale_y;
|
||||
}
|
||||
|
||||
/**
|
||||
* gimp_display_shell_get_scaled_image_viewport_offset:
|
||||
* @shell:
|
||||
* @x:
|
||||
* @y:
|
||||
*
|
||||
* Gets the scaled image offset in viewport coordinates
|
||||
*
|
||||
**/
|
||||
void
|
||||
gimp_display_shell_get_scaled_image_viewport_offset (GimpDisplayShell *shell,
|
||||
gint *x,
|
||||
gint *y)
|
||||
{
|
||||
if (x) *x = shell->disp_xoffset - shell->offset_x;
|
||||
if (y) *y = shell->disp_yoffset - shell->offset_y;
|
||||
}
|
||||
|
|
|
@ -20,23 +20,27 @@
|
|||
#define __GIMP_DISPLAY_SHELL_SCROLL_H__
|
||||
|
||||
|
||||
void gimp_display_shell_scroll (GimpDisplayShell *shell,
|
||||
gdouble x_offset_into_image,
|
||||
gdouble y_offset_into_image);
|
||||
void gimp_display_shell_scroll (GimpDisplayShell *shell,
|
||||
gdouble x_offset_into_image,
|
||||
gdouble y_offset_into_image);
|
||||
|
||||
void gimp_display_shell_scroll_clamp_offsets (GimpDisplayShell *shell);
|
||||
void gimp_display_shell_scroll_clamp_offsets (GimpDisplayShell *shell);
|
||||
|
||||
void gimp_display_shell_get_scaled_viewport (GimpDisplayShell *shell,
|
||||
gint *x,
|
||||
gint *y,
|
||||
gint *w,
|
||||
gint *h);
|
||||
void gimp_display_shell_get_scaled_viewport (GimpDisplayShell *shell,
|
||||
gint *x,
|
||||
gint *y,
|
||||
gint *w,
|
||||
gint *h);
|
||||
|
||||
void gimp_display_shell_get_viewport (GimpDisplayShell *shell,
|
||||
gdouble *x,
|
||||
gdouble *y,
|
||||
gdouble *w,
|
||||
gdouble *h);
|
||||
void gimp_display_shell_get_viewport (GimpDisplayShell *shell,
|
||||
gdouble *x,
|
||||
gdouble *y,
|
||||
gdouble *w,
|
||||
gdouble *h);
|
||||
|
||||
void gimp_display_shell_get_scaled_image_viewport_offset (GimpDisplayShell *shell,
|
||||
gint *x,
|
||||
gint *y);
|
||||
|
||||
|
||||
#endif /* __GIMP_DISPLAY_SHELL_SCROLL_H__ */
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
|
||||
#include "gimpdisplay.h"
|
||||
#include "gimpdisplayshell.h"
|
||||
#include "gimpdisplayshell-scroll.h"
|
||||
#include "gimpdisplayshell-transform.h"
|
||||
|
||||
|
||||
|
@ -48,6 +49,9 @@ gimp_display_shell_transform_coordinate (GimpDisplayShell *shell,
|
|||
GimpCoords *image_coords,
|
||||
GimpCoords *display_coords)
|
||||
{
|
||||
gint scaled_image_viewport_offset_x;
|
||||
gint scaled_image_viewport_offset_y;
|
||||
|
||||
g_return_if_fail (GIMP_IS_DISPLAY_SHELL (shell));
|
||||
g_return_if_fail (image_coords != NULL);
|
||||
g_return_if_fail (display_coords != NULL);
|
||||
|
@ -57,8 +61,12 @@ gimp_display_shell_transform_coordinate (GimpDisplayShell *shell,
|
|||
display_coords->x = SCALEX (shell, image_coords->x);
|
||||
display_coords->y = SCALEY (shell, image_coords->y);
|
||||
|
||||
display_coords->x += - shell->offset_x + shell->disp_xoffset;
|
||||
display_coords->y += - shell->offset_y + shell->disp_yoffset;
|
||||
gimp_display_shell_get_scaled_image_viewport_offset (shell,
|
||||
&scaled_image_viewport_offset_x,
|
||||
&scaled_image_viewport_offset_y);
|
||||
|
||||
display_coords->x += scaled_image_viewport_offset_x;
|
||||
display_coords->y += scaled_image_viewport_offset_y;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -75,14 +83,21 @@ gimp_display_shell_untransform_coordinate (GimpDisplayShell *shell,
|
|||
GimpCoords *display_coords,
|
||||
GimpCoords *image_coords)
|
||||
{
|
||||
gint scaled_image_viewport_offset_x;
|
||||
gint scaled_image_viewport_offset_y;
|
||||
|
||||
g_return_if_fail (GIMP_IS_DISPLAY_SHELL (shell));
|
||||
g_return_if_fail (display_coords != NULL);
|
||||
g_return_if_fail (image_coords != NULL);
|
||||
|
||||
*image_coords = *display_coords;
|
||||
|
||||
image_coords->x = display_coords->x - shell->disp_xoffset + shell->offset_x;
|
||||
image_coords->y = display_coords->y - shell->disp_yoffset + shell->offset_y;
|
||||
gimp_display_shell_get_scaled_image_viewport_offset (shell,
|
||||
&scaled_image_viewport_offset_x,
|
||||
&scaled_image_viewport_offset_y);
|
||||
|
||||
image_coords->x = display_coords->x - scaled_image_viewport_offset_x;
|
||||
image_coords->y = display_coords->y - scaled_image_viewport_offset_y;
|
||||
|
||||
image_coords->x /= shell->scale_x;
|
||||
image_coords->y /= shell->scale_y;
|
||||
|
@ -96,6 +111,8 @@ gimp_display_shell_transform_xy (GimpDisplayShell *shell,
|
|||
gint *ny,
|
||||
gboolean use_offsets)
|
||||
{
|
||||
gint scaled_image_viewport_offset_x;
|
||||
gint scaled_image_viewport_offset_y;
|
||||
gint offset_x = 0;
|
||||
gint offset_y = 0;
|
||||
gint64 tx;
|
||||
|
@ -119,8 +136,11 @@ gimp_display_shell_transform_xy (GimpDisplayShell *shell,
|
|||
tx = ((gint64) x * shell->x_src_dec) / shell->x_dest_inc;
|
||||
ty = ((gint64) y * shell->y_src_dec) / shell->y_dest_inc;
|
||||
|
||||
tx += shell->disp_xoffset - shell->offset_x;
|
||||
ty += shell->disp_yoffset - shell->offset_y;
|
||||
gimp_display_shell_get_scaled_image_viewport_offset (shell,
|
||||
&scaled_image_viewport_offset_x,
|
||||
&scaled_image_viewport_offset_y);
|
||||
tx += scaled_image_viewport_offset_x;
|
||||
ty += scaled_image_viewport_offset_y;
|
||||
|
||||
/* The projected coordinates might overflow a gint in the case of big
|
||||
images at high zoom levels, so we clamp them here to avoid problems. */
|
||||
|
@ -153,6 +173,8 @@ gimp_display_shell_untransform_xy (GimpDisplayShell *shell,
|
|||
gboolean round,
|
||||
gboolean use_offsets)
|
||||
{
|
||||
gint scaled_image_viewport_offset_x;
|
||||
gint scaled_image_viewport_offset_y;
|
||||
gint offset_x = 0;
|
||||
gint offset_y = 0;
|
||||
gint64 tx;
|
||||
|
@ -170,8 +192,11 @@ gimp_display_shell_untransform_xy (GimpDisplayShell *shell,
|
|||
gimp_item_offsets (item, &offset_x, &offset_y);
|
||||
}
|
||||
|
||||
tx = (gint64) x + shell->offset_x - shell->disp_xoffset;
|
||||
ty = (gint64) y + shell->offset_y - shell->disp_yoffset;
|
||||
gimp_display_shell_get_scaled_image_viewport_offset (shell,
|
||||
&scaled_image_viewport_offset_x,
|
||||
&scaled_image_viewport_offset_y);
|
||||
tx = (gint64) x - scaled_image_viewport_offset_x;
|
||||
ty = (gint64) y - scaled_image_viewport_offset_y;
|
||||
|
||||
tx *= shell->x_dest_inc;
|
||||
ty *= shell->y_dest_inc;
|
||||
|
@ -308,17 +333,22 @@ gimp_display_shell_transform_points (GimpDisplayShell *shell,
|
|||
|
||||
for (i = 0; i < n_points ; i++)
|
||||
{
|
||||
gint scaled_image_viewport_offset_x;
|
||||
gint scaled_image_viewport_offset_y;
|
||||
gdouble x = points[i].x + offset_x;
|
||||
gdouble y = points[i].y + offset_y;
|
||||
|
||||
x = x * shell->x_src_dec / shell->x_dest_inc;
|
||||
y = y * shell->y_src_dec / shell->y_dest_inc;
|
||||
|
||||
gimp_display_shell_get_scaled_image_viewport_offset (shell,
|
||||
&scaled_image_viewport_offset_x,
|
||||
&scaled_image_viewport_offset_y);
|
||||
coords[i].x = CLAMP (PROJ_ROUND64 (x) +
|
||||
shell->disp_xoffset - shell->offset_x,
|
||||
scaled_image_viewport_offset_x,
|
||||
G_MININT, G_MAXINT);
|
||||
coords[i].y = CLAMP (PROJ_ROUND64 (y) +
|
||||
shell->disp_yoffset - shell->offset_y,
|
||||
scaled_image_viewport_offset_y,
|
||||
G_MININT, G_MAXINT);
|
||||
}
|
||||
}
|
||||
|
@ -358,17 +388,22 @@ gimp_display_shell_transform_coords (GimpDisplayShell *shell,
|
|||
|
||||
for (i = 0; i < n_coords ; i++)
|
||||
{
|
||||
gint scaled_image_viewport_offset_x;
|
||||
gint scaled_image_viewport_offset_y;
|
||||
gdouble x = image_coords[i].x + offset_x;
|
||||
gdouble y = image_coords[i].y + offset_y;
|
||||
|
||||
x = x * shell->x_src_dec / shell->x_dest_inc;
|
||||
y = y * shell->y_src_dec / shell->y_dest_inc;
|
||||
|
||||
gimp_display_shell_get_scaled_image_viewport_offset (shell,
|
||||
&scaled_image_viewport_offset_x,
|
||||
&scaled_image_viewport_offset_y);
|
||||
disp_coords[i].x = CLAMP (PROJ_ROUND64 (x) +
|
||||
shell->disp_xoffset - shell->offset_x,
|
||||
scaled_image_viewport_offset_x,
|
||||
G_MININT, G_MAXINT);
|
||||
disp_coords[i].y = CLAMP (PROJ_ROUND64 (y) +
|
||||
shell->disp_yoffset - shell->offset_y,
|
||||
scaled_image_viewport_offset_y,
|
||||
G_MININT, G_MAXINT);
|
||||
}
|
||||
}
|
||||
|
@ -408,6 +443,8 @@ gimp_display_shell_transform_segments (GimpDisplayShell *shell,
|
|||
|
||||
for (i = 0; i < n_segs ; i++)
|
||||
{
|
||||
gint scaled_image_viewport_offset_x;
|
||||
gint scaled_image_viewport_offset_y;
|
||||
gint64 x1, x2;
|
||||
gint64 y1, y2;
|
||||
|
||||
|
@ -421,13 +458,17 @@ gimp_display_shell_transform_segments (GimpDisplayShell *shell,
|
|||
y1 = (y1 * shell->y_src_dec) / shell->y_dest_inc;
|
||||
y2 = (y2 * shell->y_src_dec) / shell->y_dest_inc;
|
||||
|
||||
dest_segs[i].x1 = CLAMP (x1 + shell->disp_xoffset - shell->offset_x,
|
||||
gimp_display_shell_get_scaled_image_viewport_offset (shell,
|
||||
&scaled_image_viewport_offset_x,
|
||||
&scaled_image_viewport_offset_y);
|
||||
|
||||
dest_segs[i].x1 = CLAMP (x1 + scaled_image_viewport_offset_x,
|
||||
G_MININT, G_MAXINT);
|
||||
dest_segs[i].x2 = CLAMP (x2 + shell->disp_xoffset - shell->offset_x,
|
||||
dest_segs[i].x2 = CLAMP (x2 + scaled_image_viewport_offset_x,
|
||||
G_MININT, G_MAXINT);
|
||||
dest_segs[i].y1 = CLAMP (y1 + shell->disp_yoffset - shell->offset_y,
|
||||
dest_segs[i].y1 = CLAMP (y1 + scaled_image_viewport_offset_y,
|
||||
G_MININT, G_MAXINT);
|
||||
dest_segs[i].y2 = CLAMP (y2 + shell->disp_yoffset - shell->offset_y,
|
||||
dest_segs[i].y2 = CLAMP (y2 + scaled_image_viewport_offset_y,
|
||||
G_MININT, G_MAXINT);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue