gimp r27519 - in trunk: . app/tools
- From: mitch svn gnome org
- To: svn-commits-list gnome org
- Subject: gimp r27519 - in trunk: . app/tools
- Date: Sat, 1 Nov 2008 19:05:57 +0000 (UTC)
Author: mitch
Date: Sat Nov 1 19:05:56 2008
New Revision: 27519
URL: http://svn.gnome.org/viewvc/gimp?rev=27519&view=rev
Log:
2008-11-01 Michael Natterer <mitch gimp org>
* app/tools/gimprectangletool.c
(gimp_rectangle_tool_cursor_update): set the MOVE cursor when we
are in MOVING mode.
* app/tools/gimptexttool.[ch]: remove members x1,x2,y1,y2 and use
the rectangle tool's bounding box for creating the text layer (x2
and y2) were unused anyway. Add boolean member "moving". Implement
oper_update() and set the tool to moving mode when ALT is pressed.
Changed button_press(), button_release() and motion() accordingly.
Some more cleanup and removal of comented out code.
Modified:
trunk/ChangeLog
trunk/app/tools/gimprectangletool.c
trunk/app/tools/gimptexttool.c
trunk/app/tools/gimptexttool.h
Modified: trunk/app/tools/gimprectangletool.c
==============================================================================
--- trunk/app/tools/gimprectangletool.c (original)
+++ trunk/app/tools/gimprectangletool.c Sat Nov 1 19:05:56 2008
@@ -1654,7 +1654,8 @@
{
GimpRectangleTool *rect_tool;
GimpRectangleToolPrivate *private;
- GimpCursorType cursor = GIMP_CURSOR_CROSSHAIR_SMALL;
+ GimpCursorType cursor = GIMP_CURSOR_CROSSHAIR_SMALL;
+ GimpCursorModifier modifier = GIMP_CURSOR_MODIFIER_NONE;
g_return_if_fail (GIMP_IS_RECTANGLE_TOOL (tool));
@@ -1669,7 +1670,8 @@
cursor = GIMP_CURSOR_CROSSHAIR_SMALL;
break;
case GIMP_RECTANGLE_TOOL_MOVING:
- cursor = GIMP_CURSOR_MOVE;
+ cursor = GIMP_CURSOR_MOVE;
+ modifier = GIMP_CURSOR_MODIFIER_MOVE;
break;
case GIMP_RECTANGLE_TOOL_RESIZING_UPPER_LEFT:
cursor = GIMP_CURSOR_CORNER_TOP_LEFT;
@@ -1701,7 +1703,8 @@
}
}
- gimp_tool_control_set_cursor (tool->control, cursor);
+ gimp_tool_control_set_cursor (tool->control, cursor);
+ gimp_tool_control_set_cursor_modifier (tool->control, modifier);
}
void
Modified: trunk/app/tools/gimptexttool.c
==============================================================================
--- trunk/app/tools/gimptexttool.c (original)
+++ trunk/app/tools/gimptexttool.c Sat Nov 1 19:05:56 2008
@@ -105,6 +105,11 @@
static gboolean gimp_text_tool_key_press (GimpTool *tool,
GdkEventKey *kevent,
GimpDisplay *display);
+static void gimp_text_tool_oper_update (GimpTool *tool,
+ const GimpCoords *coords,
+ GdkModifierType state,
+ gboolean proximity,
+ GimpDisplay *display);
static void gimp_text_tool_cursor_update (GimpTool *tool,
const GimpCoords *coords,
GdkModifierType state,
@@ -230,7 +235,7 @@
tool_class->motion = gimp_text_tool_motion;
tool_class->button_release = gimp_text_tool_button_release;
tool_class->key_press = gimp_text_tool_key_press;
- tool_class->oper_update = gimp_rectangle_tool_oper_update;
+ tool_class->oper_update = gimp_text_tool_oper_update;
tool_class->cursor_update = gimp_text_tool_cursor_update;
tool_class->get_popup = gimp_text_tool_get_popup;
@@ -414,12 +419,9 @@
gimp_draw_tool_pause (GIMP_DRAW_TOOL (tool));
g_signal_handlers_block_by_func (text_tool->text_buffer,
- G_CALLBACK (gimp_text_tool_text_buffer_mark_set),
+ gimp_text_tool_text_buffer_mark_set,
text_tool);
- text_tool->x1 = coords->x;
- text_tool->y1 = coords->y;
-
g_object_get (rect_tool,
"x1", &x1,
"y1", &y1,
@@ -428,7 +430,8 @@
NULL);
if (coords->x > x1 && coords->x <= x2 &&
- coords->y > y1 && coords->y <= y2)
+ coords->y > y1 && coords->y <= y2 &&
+ ! text_tool->moving)
{
text_tool->text_cursor_changing = TRUE;
@@ -480,7 +483,7 @@
/* did the user click on a text layer? */
if (gimp_text_tool_set_drawable (text_tool, drawable, TRUE))
{
- /*enable keyboard-handling for the text*/
+ /* enable keyboard-handling for the text */
gimp_draw_tool_pause (GIMP_DRAW_TOOL (tool));
@@ -493,7 +496,7 @@
gimp_text_tool_update_layout (text_tool);
}
- if (text_tool->layout)
+ if (text_tool->layout && ! text_tool->moving)
{
GtkTextIter cursor;
gint offset;
@@ -525,12 +528,6 @@
gtk_text_buffer_set_text (text_tool->text_buffer, "", -1);
gimp_text_tool_connect (text_tool, NULL, NULL);
gimp_text_tool_canvas_editor (text_tool);
-
-/* if (text_tool->text) */
-/* gtk_text_buffer_set_text (text_tool->text_buffer, */
-/* text_tool->text->text, -1); */
-/* else */
-/* gtk_text_buffer_set_text (text_tool->text_buffer, "", -1); */
}
#define MIN_LAYER_WIDTH 20
@@ -584,19 +581,22 @@
gimp_tool_control_halt (tool->control);
text_tool->handle_rectangle_change_complete = FALSE;
+
gimp_rectangle_tool_frame_item (rect_tool,
GIMP_ITEM (text_tool->layer));
+
text_tool->handle_rectangle_change_complete = TRUE;
g_signal_handlers_unblock_by_func (text_tool->text_buffer,
- G_CALLBACK (gimp_text_tool_text_buffer_mark_set),
+ gimp_text_tool_text_buffer_mark_set,
text_tool);
return;
}
- else
+ else if (! text_tool->moving)
{
- /* user has modified shape of an existing text layer */
+ /* user has selected text */
+
gimp_draw_tool_pause (GIMP_DRAW_TOOL (tool));
if (text_tool->layout && text_tool->text_cursor_changing)
@@ -636,10 +636,11 @@
gimp_rectangle_tool_button_release (tool, coords, time, state,
release_type, display);
+
text_tool->handle_rectangle_change_complete = TRUE;
g_signal_handlers_unblock_by_func (text_tool->text_buffer,
- G_CALLBACK (gimp_text_tool_text_buffer_mark_set),
+ gimp_text_tool_text_buffer_mark_set,
text_tool);
}
@@ -925,8 +926,9 @@
{
if (tool->display == display)
{
- gint x1, y1;
- gint x2, y2;
+ GimpTextTool *text_tool = GIMP_TEXT_TOOL (tool);
+ gint x1, y1;
+ gint x2, y2;
g_object_get (G_OBJECT (tool),
"x1", &x1,
@@ -936,11 +938,12 @@
NULL);
if (coords->x > x1 && coords->x <= x2 &&
- coords->y > y1 && coords->y <= y2)
+ coords->y > y1 && coords->y <= y2 &&
+ ! text_tool->moving)
{
- gimp_tool_control_set_cursor (tool->control, GDK_XTERM);
- gimp_tool_control_set_tool_cursor (tool->control,
- GIMP_TOOL_CURSOR_TEXT);
+ gimp_tool_control_set_cursor (tool->control, GDK_XTERM);
+ gimp_tool_control_set_cursor_modifier (tool->control,
+ GIMP_CURSOR_MODIFIER_NONE);
}
else
{
@@ -951,6 +954,23 @@
GIMP_TOOL_CLASS (parent_class)->cursor_update (tool, coords, state, display);
}
+static void
+gimp_text_tool_oper_update (GimpTool *tool,
+ const GimpCoords *coords,
+ GdkModifierType state,
+ gboolean proximity,
+ GimpDisplay *display)
+{
+ GimpTextTool *text_tool = GIMP_TEXT_TOOL (tool);
+ GimpRectangleTool *rect_tool = GIMP_RECTANGLE_TOOL (tool);
+
+ gimp_rectangle_tool_oper_update (tool, coords, state, proximity, display);
+
+ text_tool->moving = (gimp_rectangle_tool_get_function (rect_tool) ==
+ GIMP_RECTANGLE_TOOL_MOVING &&
+ (state & GDK_MOD1_MASK));
+}
+
static GimpUIManager *
gimp_text_tool_get_popup (GimpTool *tool,
const GimpCoords *coords,
@@ -1306,8 +1326,9 @@
if (text_tool->handle_rectangle_change_complete)
{
GimpText *text = text_tool->text;
- GimpItem *item;
- gint x1, y1, x2, y2;
+ GimpItem *item = GIMP_ITEM (text_tool->layer);
+ gint x1, y1;
+ gint x2, y2;
g_object_get (rect_tool,
"x1", &x1,
@@ -1337,7 +1358,6 @@
gimp_image_undo_group_start (text_tool->image, GIMP_UNDO_GROUP_TEXT,
_("Reshape Text Layer"));
- item = GIMP_ITEM (text_tool->layer);
gimp_item_translate (item,
x1 - item->offset_x,
y1 - item->offset_y,
@@ -1499,8 +1519,10 @@
GimpRectangleTool *rect_tool = GIMP_RECTANGLE_TOOL (text_tool);
text_tool->handle_rectangle_change_complete = FALSE;
+
gimp_rectangle_tool_frame_item (rect_tool,
GIMP_ITEM (text_tool->layer));
+
text_tool->handle_rectangle_change_complete = TRUE;
}
@@ -1625,7 +1647,8 @@
dest = G_OBJECT (text_tool->text);
g_signal_handlers_block_by_func (dest,
- gimp_text_tool_text_notify, text_tool);
+ gimp_text_tool_text_notify,
+ text_tool);
g_object_freeze_notify (dest);
@@ -1653,7 +1676,8 @@
g_object_thaw_notify (dest);
g_signal_handlers_unblock_by_func (dest,
- gimp_text_tool_text_notify, text_tool);
+ gimp_text_tool_text_notify,
+ text_tool);
if (push_undo)
{
@@ -1669,8 +1693,10 @@
if (layer->text->box_mode == GIMP_TEXT_BOX_DYNAMIC)
{
text_tool->handle_rectangle_change_complete = FALSE;
+
gimp_rectangle_tool_frame_item (GIMP_RECTANGLE_TOOL (text_tool),
GIMP_ITEM (layer));
+
text_tool->handle_rectangle_change_complete = TRUE;
}
@@ -1682,9 +1708,12 @@
gimp_text_tool_create_layer (GimpTextTool *text_tool,
GimpText *text)
{
- GimpTool *tool = GIMP_TOOL (text_tool);
- GimpImage *image;
- GimpLayer *layer;
+ GimpRectangleTool *rect_tool = GIMP_RECTANGLE_TOOL (text_tool);
+ GimpTool *tool = GIMP_TOOL (text_tool);
+ GimpImage *image = tool->display->image;
+ GimpLayer *layer;
+ gint x1, y1;
+ gint x2, y2;
if (text)
{
@@ -1704,7 +1733,6 @@
text = gimp_config_duplicate (GIMP_CONFIG (text_tool->proxy));
}
- image = tool->display->image;
layer = gimp_text_layer_new (image, text);
g_object_unref (text);
@@ -1730,23 +1758,22 @@
text_tool);
}
- GIMP_ITEM (layer)->offset_x = text_tool->x1;
- GIMP_ITEM (layer)->offset_y = text_tool->y1;
+ g_object_get (rect_tool,
+ "x1", &x1,
+ "y1", &y1,
+ "x2", &x2,
+ "y2", &y2,
+ NULL);
+
+ GIMP_ITEM (layer)->offset_x = x1;
+ GIMP_ITEM (layer)->offset_y = y1;
gimp_image_add_layer (image, layer, -1, TRUE);
if (text_tool->text_box_fixed)
{
- GimpRectangleTool *rect_tool = GIMP_RECTANGLE_TOOL (text_tool);
- GimpItem *item = GIMP_ITEM (layer);
- gint x1, y1, x2, y2;
+ GimpItem *item = GIMP_ITEM (layer);
- g_object_get (rect_tool,
- "x1", &x1,
- "y1", &y1,
- "x2", &x2,
- "y2", &y2,
- NULL);
g_object_set (text_tool->proxy,
"box-mode", GIMP_TEXT_BOX_FIXED,
"box-width", (gdouble) (x2 - x1),
@@ -1760,8 +1787,10 @@
else
{
text_tool->handle_rectangle_change_complete = FALSE;
+
gimp_rectangle_tool_frame_item (GIMP_RECTANGLE_TOOL (text_tool),
GIMP_ITEM (layer));
+
text_tool->handle_rectangle_change_complete = TRUE;
}
@@ -1987,8 +2016,10 @@
if (! gimp_rectangle_tool_rectangle_is_new (rect_tool))
{
text_tool->handle_rectangle_change_complete = FALSE;
+
gimp_rectangle_tool_frame_item (rect_tool,
GIMP_ITEM (text_tool->layer));
+
text_tool->handle_rectangle_change_complete = TRUE;
}
}
Modified: trunk/app/tools/gimptexttool.h
==============================================================================
--- trunk/app/tools/gimptexttool.h (original)
+++ trunk/app/tools/gimptexttool.h Sat Nov 1 19:05:56 2008
@@ -43,8 +43,7 @@
GList *pending;
guint idle_id;
- gint x1, y1;
- gint x2, y2;
+ gboolean moving;
GtkTextBuffer *text_buffer;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]