diff options
author | Thomas White <taw@bitwiz.org.uk> | 2011-10-09 22:06:39 +0200 |
---|---|---|
committer | Thomas White <taw@bitwiz.org.uk> | 2011-10-09 22:06:39 +0200 |
commit | fc8f986b76af09d4f2dea80854cceaf1f8fdd43f (patch) | |
tree | 066dc7a194d77ffb254c53ff89a2199d8e4e989b /src/tool_text.c | |
parent | 5ac069656c36aa1404d90cfad915d05736fa91d2 (diff) |
Drag to create region
Diffstat (limited to 'src/tool_text.c')
-rw-r--r-- | src/tool_text.c | 66 |
1 files changed, 62 insertions, 4 deletions
diff --git a/src/tool_text.c b/src/tool_text.c index a6a17d5..038b375 100644 --- a/src/tool_text.c +++ b/src/tool_text.c @@ -40,6 +40,12 @@ struct text_toolinfo { struct toolinfo base; PangoContext *pc; + + int create_dragging; + double start_corner_x; + double start_corner_y; + double drag_corner_x; + double drag_corner_y; }; @@ -455,6 +461,42 @@ static void drag_object(struct toolinfo *tip, struct presentation *p, } +static void start_drag_create(struct toolinfo *tip, struct presentation *p, + double x, double y) +{ + struct text_toolinfo *ti = (struct text_toolinfo *)tip; + + ti->start_corner_x = x; + ti->start_corner_y = y; + ti->create_dragging = 1; +} + + +static void drag_create(struct toolinfo *tip, struct presentation *p, + double x, double y) +{ + struct text_toolinfo *ti = (struct text_toolinfo *)tip; + + ti->drag_corner_x = x; + ti->drag_corner_y = y; + + redraw_overlay(p); +} + + +static void finish_drag_create(struct toolinfo *tip, struct presentation *p, + double x, double y) +{ + struct text_toolinfo *ti = (struct text_toolinfo *)tip; + + ti->drag_corner_x = x; + ti->drag_corner_y = y; + ti->create_dragging = 0; + + redraw_overlay(p); +} + + static void create_default(struct presentation *p, struct style *sty, struct toolinfo *tip) { @@ -484,11 +526,24 @@ static int deselect_object(struct object *o, struct toolinfo *tip) } -static void draw_overlay(cairo_t *cr, struct object *o) +static void draw_overlay(struct toolinfo *tip, cairo_t *cr, struct object *o) { - draw_editing_box(cr, o->x, o->y, - o->bb_width, o->bb_height); - draw_caret(cr, o); + struct text_toolinfo *ti = (struct text_toolinfo *)tip; + + if ( o != NULL ) { + draw_editing_box(cr, o->x, o->y, o->bb_width, o->bb_height); + draw_caret(cr, o); + } + + if ( ti->create_dragging ) { + cairo_new_path(cr); + cairo_rectangle(cr, ti->start_corner_x, ti->start_corner_y, + ti->drag_corner_x - ti->start_corner_x, + ti->drag_corner_y - ti->start_corner_y); + cairo_set_source_rgb(cr, 0.5, 0.5, 0.5); + cairo_set_line_width(cr, 0.5); + cairo_stroke(cr); + } } @@ -534,6 +589,9 @@ struct toolinfo *initialise_text_tool(GtkWidget *w) ti->base.select = select_object; ti->base.deselect = deselect_object; ti->base.drag_object = drag_object; + ti->base.start_drag_create = start_drag_create; + ti->base.drag_create = drag_create; + ti->base.finish_drag_create = finish_drag_create; ti->base.draw_editing_overlay = draw_overlay; ti->base.key_pressed = key_pressed; ti->base.im_commit = im_commit; |