mirror of https://github.com/GNOME/gimp.git
Connect to the "image-changed" signal of GimpContext and update default
2007-08-17 Martin Nordholts <martinn@svn.gnome.org> * app/tools/gimpcroptool.c (gimp_crop_tool_constructor): Connect to the "image-changed" signal of GimpContext and update default aspect when image changes (fixes bug #417166), by using (gimp_crop_tool_update_default_fixed_ratio_options): which is a new function that does this. This function is called whenever it is time to update defualts. * app/tools/gimprectangletool.[ch]: Made gimp_rectangle_tool_get_constraint part of the rectangle tool API. svn path=/trunk/; revision=23312
This commit is contained in:
parent
3aed85c61d
commit
eb06a11ea9
13
ChangeLog
13
ChangeLog
|
@ -1,3 +1,16 @@
|
||||||
|
2007-08-17 Martin Nordholts <martinn@svn.gnome.org>
|
||||||
|
|
||||||
|
* app/tools/gimpcroptool.c
|
||||||
|
(gimp_crop_tool_constructor): Connect to the "image-changed"
|
||||||
|
signal of GimpContext and update default aspect when image
|
||||||
|
changes (fixes bug #417166), by using
|
||||||
|
(gimp_crop_tool_update_default_fixed_ratio_options): which is a
|
||||||
|
new function that does this. This function is called whenever it
|
||||||
|
is time to update defualts.
|
||||||
|
|
||||||
|
* app/tools/gimprectangletool.[ch]: Made
|
||||||
|
gimp_rectangle_tool_get_constraint part of the rectangle tool API.
|
||||||
|
|
||||||
2007-08-17 Michael Natterer <mitch@gimp.org>
|
2007-08-17 Michael Natterer <mitch@gimp.org>
|
||||||
|
|
||||||
* plug-ins/print/print-page-layout.c: set a default page setup on
|
* plug-ins/print/print-page-layout.c: set a default page setup on
|
||||||
|
|
|
@ -24,8 +24,11 @@
|
||||||
|
|
||||||
#include "tools-types.h"
|
#include "tools-types.h"
|
||||||
|
|
||||||
|
#include "core/gimp.h"
|
||||||
#include "core/gimpimage.h"
|
#include "core/gimpimage.h"
|
||||||
#include "core/gimpimage-crop.h"
|
#include "core/gimpimage-crop.h"
|
||||||
|
#include "core/gimpitem.h"
|
||||||
|
#include "core/gimptoolinfo.h"
|
||||||
|
|
||||||
#include "widgets/gimphelp-ids.h"
|
#include "widgets/gimphelp-ids.h"
|
||||||
|
|
||||||
|
@ -75,10 +78,17 @@ static gboolean gimp_crop_tool_execute (GimpRectangleTool *rectang
|
||||||
gint w,
|
gint w,
|
||||||
gint h);
|
gint h);
|
||||||
|
|
||||||
|
static void gimp_crop_tool_update_default_fixed_ratio_options
|
||||||
|
(GimpCropTool *crop_tool);
|
||||||
|
|
||||||
static void gimp_crop_tool_notify_layer_only (GimpCropOptions *options,
|
static void gimp_crop_tool_notify_layer_only (GimpCropOptions *options,
|
||||||
GParamSpec *pspec,
|
GParamSpec *pspec,
|
||||||
GimpTool *tool);
|
GimpTool *tool);
|
||||||
|
|
||||||
|
static void gimp_crop_tool_image_changed (GimpContext *gimp_context,
|
||||||
|
GimpImage *image,
|
||||||
|
GimpCropTool *crop_tool);
|
||||||
|
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_CODE (GimpCropTool, gimp_crop_tool, GIMP_TYPE_DRAW_TOOL,
|
G_DEFINE_TYPE_WITH_CODE (GimpCropTool, gimp_crop_tool, GIMP_TYPE_DRAW_TOOL,
|
||||||
G_IMPLEMENT_INTERFACE (GIMP_TYPE_RECTANGLE_TOOL,
|
G_IMPLEMENT_INTERFACE (GIMP_TYPE_RECTANGLE_TOOL,
|
||||||
|
@ -153,11 +163,25 @@ gimp_crop_tool_constructor (GType type,
|
||||||
{
|
{
|
||||||
GObject *object;
|
GObject *object;
|
||||||
GimpCropOptions *options;
|
GimpCropOptions *options;
|
||||||
|
GimpContext *gimp_context;
|
||||||
|
GimpToolInfo *tool_info;
|
||||||
|
|
||||||
object = G_OBJECT_CLASS (parent_class)->constructor (type, n_params, params);
|
object = G_OBJECT_CLASS (parent_class)->constructor (type, n_params, params);
|
||||||
|
|
||||||
gimp_rectangle_tool_constructor (object);
|
gimp_rectangle_tool_constructor (object);
|
||||||
|
|
||||||
|
|
||||||
|
g_object_get (object,
|
||||||
|
"tool-info", &tool_info,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
gimp_context = gimp_get_user_context (tool_info->gimp);
|
||||||
|
|
||||||
|
g_signal_connect_object (gimp_context, "image-changed",
|
||||||
|
G_CALLBACK (gimp_crop_tool_image_changed),
|
||||||
|
GIMP_CROP_TOOL (object), 0);
|
||||||
|
|
||||||
|
|
||||||
options = GIMP_CROP_TOOL_GET_OPTIONS (object);
|
options = GIMP_CROP_TOOL_GET_OPTIONS (object);
|
||||||
|
|
||||||
g_signal_connect_object (options, "notify::layer-only",
|
g_signal_connect_object (options, "notify::layer-only",
|
||||||
|
@ -169,6 +193,8 @@ gimp_crop_tool_constructor (GType type,
|
||||||
GIMP_RECTANGLE_CONSTRAIN_DRAWABLE :
|
GIMP_RECTANGLE_CONSTRAIN_DRAWABLE :
|
||||||
GIMP_RECTANGLE_CONSTRAIN_IMAGE);
|
GIMP_RECTANGLE_CONSTRAIN_IMAGE);
|
||||||
|
|
||||||
|
gimp_crop_tool_update_default_fixed_ratio_options (GIMP_CROP_TOOL (object));
|
||||||
|
|
||||||
return object;
|
return object;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -203,42 +229,9 @@ gimp_crop_tool_button_release (GimpTool *tool,
|
||||||
GimpButtonReleaseType release_type,
|
GimpButtonReleaseType release_type,
|
||||||
GimpDisplay *display)
|
GimpDisplay *display)
|
||||||
{
|
{
|
||||||
GimpRectangleOptions *options = GIMP_RECTANGLE_TOOL_GET_OPTIONS (tool);
|
|
||||||
|
|
||||||
gimp_tool_push_status (tool, display, _("Click or press Enter to crop"));
|
gimp_tool_push_status (tool, display, _("Click or press Enter to crop"));
|
||||||
|
|
||||||
if (tool->display != NULL)
|
gimp_crop_tool_update_default_fixed_ratio_options (GIMP_CROP_TOOL (tool));
|
||||||
{
|
|
||||||
gint crop_rectangle_width;
|
|
||||||
gint crop_rectangle_height;
|
|
||||||
|
|
||||||
/* There exists a pending crop rectangle, set default aspect ratio to the
|
|
||||||
* same aspect ratio of the rectangle.
|
|
||||||
*/
|
|
||||||
|
|
||||||
gimp_rectangle_tool_get_rectangle_size (GIMP_RECTANGLE_TOOL (tool),
|
|
||||||
&crop_rectangle_width,
|
|
||||||
&crop_rectangle_height);
|
|
||||||
if (crop_rectangle_width < 1.0)
|
|
||||||
crop_rectangle_width = 1.0;
|
|
||||||
|
|
||||||
if (crop_rectangle_height < 1.0)
|
|
||||||
crop_rectangle_height = 1.0;
|
|
||||||
|
|
||||||
g_object_set (options,
|
|
||||||
"default-aspect-numerator", (double) crop_rectangle_width,
|
|
||||||
"default-aspect-denominator", (double) crop_rectangle_height,
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* There exist no rectangle, set default to 1:1 */
|
|
||||||
/* TODO: Should be canvas/layer width/height when bug #417166 is fixed. */
|
|
||||||
g_object_set (options,
|
|
||||||
"default-aspect-numerator", 1.0,
|
|
||||||
"default-aspect-denominator", 1.0,
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
gimp_rectangle_tool_button_release (tool, coords, time, state, release_type,
|
gimp_rectangle_tool_button_release (tool, coords, time, state, release_type,
|
||||||
display);
|
display);
|
||||||
|
@ -324,11 +317,7 @@ gimp_crop_tool_execute (GimpRectangleTool *rectangle,
|
||||||
|
|
||||||
gimp_image_flush (image);
|
gimp_image_flush (image);
|
||||||
|
|
||||||
/* TODO: Should be canvas/layer width/height when bug #417166 is fixed. */
|
gimp_crop_tool_update_default_fixed_ratio_options (GIMP_CROP_TOOL (tool));
|
||||||
g_object_set (rectangle_options,
|
|
||||||
"default-aspect-numerator", 1.0,
|
|
||||||
"default-aspect-denominator", 1.0,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -336,6 +325,97 @@ gimp_crop_tool_execute (GimpRectangleTool *rectangle,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gimp_crop_tool_update_default_fixed_ratio_options:
|
||||||
|
* @crop_tool:
|
||||||
|
*
|
||||||
|
* Sets the default aspect numerator/denominator to that of the current
|
||||||
|
* layer/image/pending crop rectangle.
|
||||||
|
*/
|
||||||
|
static void gimp_crop_tool_update_default_fixed_ratio_options (GimpCropTool *crop_tool)
|
||||||
|
{
|
||||||
|
GimpTool *tool;
|
||||||
|
GimpRectangleTool *rectangle_tool;
|
||||||
|
GimpRectangleOptions *rectangle_options;
|
||||||
|
gdouble default_numerator;
|
||||||
|
gdouble default_denominator;
|
||||||
|
|
||||||
|
tool = GIMP_TOOL (crop_tool);
|
||||||
|
rectangle_tool = GIMP_RECTANGLE_TOOL (tool);
|
||||||
|
rectangle_options = GIMP_RECTANGLE_TOOL_GET_OPTIONS (rectangle_tool);
|
||||||
|
|
||||||
|
if (tool->display != NULL)
|
||||||
|
{
|
||||||
|
gint crop_rectangle_width;
|
||||||
|
gint crop_rectangle_height;
|
||||||
|
|
||||||
|
/* There exists a pending crop rectangle, set default aspect ratio to the
|
||||||
|
* same aspect ratio of the rectangle.
|
||||||
|
*/
|
||||||
|
|
||||||
|
gimp_rectangle_tool_get_rectangle_size (rectangle_tool,
|
||||||
|
&crop_rectangle_width,
|
||||||
|
&crop_rectangle_height);
|
||||||
|
|
||||||
|
default_numerator = MAX (crop_rectangle_width, 1.0);
|
||||||
|
default_denominator = MAX (crop_rectangle_height, 1.0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GimpRectangleConstraint constraint;
|
||||||
|
GimpContext *gimp_context;
|
||||||
|
GimpImage *image;
|
||||||
|
|
||||||
|
/* There exist no rectangle, set defaults */
|
||||||
|
|
||||||
|
gimp_context = gimp_get_user_context (tool->tool_info->gimp);
|
||||||
|
image = gimp_context_get_image (gimp_context);
|
||||||
|
|
||||||
|
if (image == NULL)
|
||||||
|
{
|
||||||
|
default_numerator = 1.0;
|
||||||
|
default_denominator = 1.0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
constraint = gimp_rectangle_tool_get_constraint (rectangle_tool);
|
||||||
|
|
||||||
|
switch (constraint)
|
||||||
|
{
|
||||||
|
case GIMP_RECTANGLE_CONSTRAIN_DRAWABLE:
|
||||||
|
{
|
||||||
|
GimpItem *item = GIMP_ITEM (gimp_image_get_active_layer (image));
|
||||||
|
|
||||||
|
if (item == NULL)
|
||||||
|
{
|
||||||
|
default_numerator = 1.0;
|
||||||
|
default_denominator = 1.0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
default_numerator = gimp_item_width (item);
|
||||||
|
default_denominator = gimp_item_height (item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GIMP_RECTANGLE_CONSTRAIN_IMAGE:
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
default_numerator = image->width;
|
||||||
|
default_denominator = image->height;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
g_object_set (rectangle_options,
|
||||||
|
"default-aspect-numerator", default_numerator,
|
||||||
|
"default-aspect-denominator", default_denominator,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gimp_crop_tool_notify_layer_only (GimpCropOptions *options,
|
gimp_crop_tool_notify_layer_only (GimpCropOptions *options,
|
||||||
GParamSpec *pspec,
|
GParamSpec *pspec,
|
||||||
|
@ -345,4 +425,14 @@ gimp_crop_tool_notify_layer_only (GimpCropOptions *options,
|
||||||
options->layer_only ?
|
options->layer_only ?
|
||||||
GIMP_RECTANGLE_CONSTRAIN_DRAWABLE :
|
GIMP_RECTANGLE_CONSTRAIN_DRAWABLE :
|
||||||
GIMP_RECTANGLE_CONSTRAIN_IMAGE);
|
GIMP_RECTANGLE_CONSTRAIN_IMAGE);
|
||||||
|
|
||||||
|
gimp_crop_tool_update_default_fixed_ratio_options (GIMP_CROP_TOOL (tool));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gimp_crop_tool_image_changed (GimpContext *gimp_context,
|
||||||
|
GimpImage *image,
|
||||||
|
GimpCropTool *crop_tool)
|
||||||
|
{
|
||||||
|
gimp_crop_tool_update_default_fixed_ratio_options (GIMP_CROP_TOOL (crop_tool));
|
||||||
}
|
}
|
||||||
|
|
|
@ -167,9 +167,6 @@ static void gimp_rectangle_tool_iface_base_init (GimpRectangleToolInterface
|
||||||
static GimpRectangleToolPrivate *
|
static GimpRectangleToolPrivate *
|
||||||
gimp_rectangle_tool_get_private (GimpRectangleTool *rectangle);
|
gimp_rectangle_tool_get_private (GimpRectangleTool *rectangle);
|
||||||
|
|
||||||
GimpRectangleConstraint
|
|
||||||
gimp_rectangle_tool_get_constraint (GimpRectangleTool *rectangle);
|
|
||||||
|
|
||||||
/* Rectangle helper functions */
|
/* Rectangle helper functions */
|
||||||
static void gimp_rectangle_tool_start (GimpRectangleTool *rectangle,
|
static void gimp_rectangle_tool_start (GimpRectangleTool *rectangle,
|
||||||
GimpDisplay *display);
|
GimpDisplay *display);
|
||||||
|
|
|
@ -124,6 +124,8 @@ gboolean gimp_rectangle_tool_execute (GimpRectangleTool *re
|
||||||
void gimp_rectangle_tool_cancel (GimpRectangleTool *rect_tool);
|
void gimp_rectangle_tool_cancel (GimpRectangleTool *rect_tool);
|
||||||
void gimp_rectangle_tool_set_constraint (GimpRectangleTool *rectangle,
|
void gimp_rectangle_tool_set_constraint (GimpRectangleTool *rectangle,
|
||||||
GimpRectangleConstraint constraint);
|
GimpRectangleConstraint constraint);
|
||||||
|
GimpRectangleConstraint gimp_rectangle_tool_get_constraint
|
||||||
|
(GimpRectangleTool *rectangle);
|
||||||
GimpRectangleFunction gimp_rectangle_tool_get_function (GimpRectangleTool *rectangle);
|
GimpRectangleFunction gimp_rectangle_tool_get_function (GimpRectangleTool *rectangle);
|
||||||
void gimp_rectangle_tool_set_function (GimpRectangleTool *rectangle,
|
void gimp_rectangle_tool_set_function (GimpRectangleTool *rectangle,
|
||||||
GimpRectangleFunction function);
|
GimpRectangleFunction function);
|
||||||
|
|
Loading…
Reference in New Issue