From c5be0c1cdc4a3c2241a6e53dab0d1a427872739c Mon Sep 17 00:00:00 2001 From: Thomas White Date: Fri, 9 Dec 2011 00:02:51 +0100 Subject: WIP on splitting --- src/mainwindow.c | 40 +++++++++++++++++++++++++++++++++++----- src/presentation.h | 1 + src/slide_render.c | 8 ++++++++ src/slideshow.c | 1 + 4 files changed, 45 insertions(+), 5 deletions(-) diff --git a/src/mainwindow.c b/src/mainwindow.c index 7e558de..2562c69 100644 --- a/src/mainwindow.c +++ b/src/mainwindow.c @@ -362,6 +362,11 @@ static gint first_slide_sig(GtkWidget *widget, struct presentation *p) p->cur_edit_slide = p->slides[0]; notify_slide_changed(p); + if ( p->slideshow_linked ) { + p->cur_proj_slide = p->cur_edit_slide; + notify_slideshow_slide_changed(p); + } + return FALSE; } @@ -376,6 +381,11 @@ static gint prev_slide_sig(GtkWidget *widget, struct presentation *p) p->cur_edit_slide = p->slides[cur_slide_number-1]; notify_slide_changed(p); + if ( p->slideshow_linked ) { + p->cur_proj_slide = p->cur_edit_slide; + notify_slideshow_slide_changed(p); + } + return FALSE; } @@ -390,6 +400,11 @@ static gint next_slide_sig(GtkWidget *widget, struct presentation *p) p->cur_edit_slide = p->slides[cur_slide_number+1]; notify_slide_changed(p); + if ( p->slideshow_linked ) { + p->cur_proj_slide = p->cur_edit_slide; + notify_slideshow_slide_changed(p); + } + return FALSE; } @@ -399,6 +414,11 @@ static gint last_slide_sig(GtkWidget *widget, struct presentation *p) p->cur_edit_slide = p->slides[p->num_slides-1]; notify_slide_changed(p); + if ( p->slideshow_linked ) { + p->cur_proj_slide = p->cur_edit_slide; + notify_slideshow_slide_changed(p); + } + return FALSE; } @@ -657,20 +677,27 @@ static gboolean key_press_sig(GtkWidget *da, GdkEventKey *event, switch ( event->keyval ) { - case GDK_KEY_Page_Up : + case GDK_KEY_Page_Up : prev_slide_sig(NULL, p); break; - case GDK_KEY_Page_Down : + case GDK_KEY_Page_Down : next_slide_sig(NULL, p); break; - case GDK_KEY_Escape : + case GDK_KEY_Escape : if ( p->slideshow != NULL ) end_slideshow(p); redraw_object(p->editing_object); p->editing_object = NULL; break; + case GDK_KEY_B : + p->slideshow_linked = 1 - p->slideshow_linked; + if ( p->slideshow_linked ) { + } + redraw_overlay(p); + break; + } return FALSE; @@ -851,8 +878,8 @@ static void draw_overlay(cairo_t *cr, struct presentation *p) if ( (p->drag_status == DRAG_STATUS_DRAGGING) && ((p->drag_reason == DRAG_REASON_CREATE) - || (p->drag_reason == DRAG_REASON_IMPORT)) ) { - + || (p->drag_reason == DRAG_REASON_IMPORT)) ) + { cairo_new_path(cr); cairo_rectangle(cr, p->start_corner_x, p->start_corner_y, p->drag_corner_x - p->start_corner_x, @@ -860,6 +887,9 @@ static void draw_overlay(cairo_t *cr, struct presentation *p) cairo_set_source_rgb(cr, 0.5, 0.5, 0.5); cairo_set_line_width(cr, 0.5); cairo_stroke(cr); + } + + if ( p->slideshow_linked ) { } } diff --git a/src/presentation.h b/src/presentation.h index 8b4bc6f..addcf7c 100644 --- a/src/presentation.h +++ b/src/presentation.h @@ -125,6 +125,7 @@ struct presentation /* Pointers to the current "editing" and "projection" slides */ struct slide *cur_edit_slide; struct slide *cur_proj_slide; + int slideshow_linked; /* This is the "native" size of the slide. It only exists to give * font size some meaning in the context of a somewhat arbitrary DPI */ diff --git a/src/slide_render.c b/src/slide_render.c index b5637e3..32c4a28 100644 --- a/src/slide_render.c +++ b/src/slide_render.c @@ -105,12 +105,19 @@ static cairo_surface_t *render_slide(struct slide *s, int w, int h) cairo_surface_t *surf; cairo_t *cr; int i; + cairo_font_options_t *fopts; surf = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, w, h); cr = cairo_create(surf); cairo_scale(cr, w/s->parent->slide_width, h/s->parent->slide_height); + fopts = cairo_font_options_create(); + cairo_font_options_set_hint_style(fopts, CAIRO_HINT_STYLE_NONE); + cairo_font_options_set_hint_metrics(fopts, CAIRO_HINT_METRICS_OFF); + cairo_font_options_set_antialias(fopts, CAIRO_ANTIALIAS_SUBPIXEL); + cairo_set_font_options(cr, fopts); + for ( i=0; iparent->ss->n_bgblocks; i++ ) { render_bgblock(cr, &s->parent->ss->bgblocks[i]); } @@ -124,6 +131,7 @@ static cairo_surface_t *render_slide(struct slide *s, int w, int h) } cairo_destroy(cr); + cairo_font_options_destroy(fopts); return surf; } diff --git a/src/slideshow.c b/src/slideshow.c index 8d04fdd..8e3b8ca 100644 --- a/src/slideshow.c +++ b/src/slideshow.c @@ -227,6 +227,7 @@ void try_start_slideshow(struct presentation *p) } /* FIXME: Sensible (configurable) choice of monitor */ p->slideshow = n; + p->slideshow_linked = 1; gtk_window_fullscreen(GTK_WINDOW(n)); gtk_widget_show_all(GTK_WIDGET(n)); -- cgit v1.2.3