diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mainwindow.c | 2 | ||||
-rw-r--r-- | src/mainwindow.h | 3 | ||||
-rw-r--r-- | src/objects.h | 1 | ||||
-rw-r--r-- | src/tool_select.c | 10 | ||||
-rw-r--r-- | src/tool_text.c | 12 |
5 files changed, 27 insertions, 1 deletions
diff --git a/src/mainwindow.c b/src/mainwindow.c index b98ed00..6ea3fa7 100644 --- a/src/mainwindow.c +++ b/src/mainwindow.c @@ -545,7 +545,7 @@ static void redraw_object(struct object *o) } -static void redraw_overlay(struct presentation *p) +void redraw_overlay(struct presentation *p) { gdk_window_invalidate_rect(p->drawingarea->window, NULL, FALSE); } diff --git a/src/mainwindow.h b/src/mainwindow.h index 36cd289..ee27997 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -32,4 +32,7 @@ extern int open_mainwindow(struct presentation *p); extern void notify_slide_changed(struct presentation *p); extern void notify_slide_update(struct presentation *p); +extern void redraw_overlay(struct presentation *p); + + #endif /* MAINWINDOW_H */ diff --git a/src/objects.h b/src/objects.h index 96212ff..3789261 100644 --- a/src/objects.h +++ b/src/objects.h @@ -52,6 +52,7 @@ struct object int empty; void (*render_object)(cairo_t *cr, struct object *o); + void (*update_object)(struct object *o); void (*delete_object)(struct object *o); }; diff --git a/src/tool_select.c b/src/tool_select.c index 2e9aa37..6a67ee9 100644 --- a/src/tool_select.c +++ b/src/tool_select.c @@ -65,10 +65,20 @@ static void drag_object(struct toolinfo *tip, struct presentation *p, struct object *o, double x, double y) { struct select_toolinfo *ti = (struct select_toolinfo *)tip; + double eright, ebottom; o->x = x + ti->drag_offs_x; o->y = y + ti->drag_offs_y; + /* Enforce margins */ + eright = o->parent->parent->slide_width - o->style->margin_right; + ebottom = o->parent->parent->slide_height - o->style->margin_bottom; + if ( o->x < o->style->margin_left ) o->x = o->style->margin_left; + if ( o->y < o->style->margin_top ) o->y = o->style->margin_top; + if ( o->x+o->bb_width > eright ) o->x = eright - o->bb_width; + if ( o->y+o->bb_height > ebottom ) o->y = ebottom - o->bb_height; + + o->update_object(o); p->view_slide->object_seq++; gdk_window_invalidate_rect(p->drawingarea->window, NULL, FALSE); diff --git a/src/tool_text.c b/src/tool_text.c index c5555b6..6a5c8a1 100644 --- a/src/tool_text.c +++ b/src/tool_text.c @@ -269,12 +269,14 @@ void move_cursor(struct object *op, int dir) void move_cursor_left(struct object *op) { move_cursor(op, -1); + redraw_overlay(op->parent->parent); } void move_cursor_right(struct object *op) { move_cursor(op, +1); + redraw_overlay(op->parent->parent); } @@ -298,6 +300,8 @@ void handle_text_backspace(struct object *op) update_text(o); o->base.parent->object_seq++; + + redraw_overlay(op->parent->parent); } @@ -353,6 +357,13 @@ static void draw_caret(cairo_t *cr, struct object *op) } +static void update_text_object(struct object *op) +{ + struct text_object *o = (struct text_object *)op; + update_text(o); +} + + static void delete_text_object(struct object *op) { struct text_object *o = (struct text_object *)op; @@ -392,6 +403,7 @@ static struct object *add_text_object(struct slide *s, double x, double y, /* Methods for this object */ new->base.render_object = render_text_object; new->base.delete_object = delete_text_object; + new->base.update_object = update_text_object; if ( add_object_to_slide(s, (struct object *)new) ) { delete_object((struct object *)new); |