From e621e284f7fe1208ad1e9556eb3c8e2598aabf55 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 30 Sep 2014 23:18:31 +0200 Subject: WIP --- src/render.c | 5 ++--- src/render.h | 2 +- src/sc_editor.c | 42 ++++++++++++++++++++++++++---------------- src/sc_editor.h | 1 + src/slide_window.c | 4 ++++ src/slideshow.c | 2 ++ 6 files changed, 36 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/render.c b/src/render.c index dbc40d9..8028ad7 100644 --- a/src/render.c +++ b/src/render.c @@ -402,16 +402,15 @@ static void render_slide_to_surface(struct slide *s, cairo_surface_t *surf, * * Render the entire slide. */ -cairo_surface_t *render_slide(struct slide *s, int w, double ww, double hh, +cairo_surface_t *render_slide(struct slide *s, int w, int h, + double ww, double hh, ImageStore *is, enum is_size isz, int slide_number) { cairo_surface_t *surf; cairo_t *cr; - int h; double scale; - h = (hh/ww)*w; scale = w/ww; s->top->x = 0.0; diff --git a/src/render.h b/src/render.h index aa77043..4e1d86a 100644 --- a/src/render.h +++ b/src/render.h @@ -30,7 +30,7 @@ #include "presentation.h" #include "imagestore.h" -extern cairo_surface_t *render_slide(struct slide *s, int w, +extern cairo_surface_t *render_slide(struct slide *s, int w, int h, double ww, double hh, ImageStore *is, enum is_size isz, int slide_number); extern int export_pdf(struct presentation *p, const char *filename); diff --git a/src/sc_editor.c b/src/sc_editor.c index 780c58d..aeebf8a 100644 --- a/src/sc_editor.c +++ b/src/sc_editor.c @@ -76,7 +76,10 @@ struct _sceditor { GtkWidget *drawingarea; GtkIMContext *im_context; - int slide_width; + int w; /* Surface size in pixels */ + int h; + double ww; /* Size of surface in "SC units" */ + double hh; struct presentation *p; cairo_surface_t *surface; @@ -132,7 +135,7 @@ static void rerender_slide(SCEditor *e) cairo_surface_destroy(e->surface); } - e->surface = render_slide(s, e->slide_width, + e->surface = render_slide(s, e->w, e->h, e->p->slide_width, e->p->slide_height, e->p->is, ISZ_EDITOR, n); } @@ -452,8 +455,6 @@ static gboolean draw_sig(GtkWidget *da, cairo_t *cr, { double xoff, yoff; int width, height; - int edit_slide_height; - double ratio; width = gtk_widget_get_allocated_width(GTK_WIDGET(da)); height = gtk_widget_get_allocated_height(GTK_WIDGET(da)); @@ -468,11 +469,10 @@ static gboolean draw_sig(GtkWidget *da, cairo_t *cr, cairo_fill(cr); /* Get the overall size */ - ratio = e->p->slide_height/e->p->slide_width; - edit_slide_height = ratio*e->slide_width; - xoff = (width - e->slide_width)/2.0; - yoff = (height - edit_slide_height)/2.0; - e->border_offs_x = xoff; e->border_offs_y = yoff; + xoff = (width - e->w)/2.0; + yoff = (height - e->h)/2.0; + e->border_offs_x = xoff; + e->border_offs_y = yoff; /* Draw the slide from the cache */ if ( e->surface != NULL ) { @@ -1202,21 +1202,21 @@ static void chomp(char *s) /* Scale the image down if it's a silly size */ static void check_import_size(SCEditor *e) { - if ( e->import_width > e->slide_width ) { + if ( e->import_width > e->w ) { int new_import_width; - new_import_width = e->slide_width/2; + new_import_width = e->w/2; e->import_height = (new_import_width *e->import_height) - / e->import_width; + / e->w; e->import_width = new_import_width; } - if ( e->import_height > e->p->slide_height ) { + if ( e->import_height > e->h ) { int new_import_height; - new_import_height = e->p->slide_height/2; + new_import_height = e->w/2; e->import_width = (new_import_height*e->import_width) / e->import_height; e->import_height = new_import_height; @@ -1394,6 +1394,13 @@ void sc_editor_set_slide(SCEditor *e, struct slide *s) } +void sc_editor_set_size(SCEditor *e, int w, int h) +{ + e->w = w; + e->h = h; +} + + /* FIXME: GObjectify this */ SCEditor *sc_editor_new(struct presentation *p) { @@ -1407,10 +1414,13 @@ SCEditor *sc_editor_new(struct presentation *p) sceditor->drawingarea = gtk_drawing_area_new(); sceditor->cur_slide = p->slides[0]; /* FIXME */ sceditor->surface = NULL; + sceditor->w = 100; + sceditor->h = 100; + + rerender_slide(sceditor); gtk_widget_set_size_request(GTK_WIDGET(sceditor->drawingarea), - p->slide_width + 20, - p->slide_height + 20); + sceditor->w, sceditor->h); g_signal_connect(G_OBJECT(sceditor->drawingarea), "destroy", G_CALLBACK(destroy_sig), sceditor); diff --git a/src/sc_editor.h b/src/sc_editor.h index d1c1338..664d6e8 100644 --- a/src/sc_editor.h +++ b/src/sc_editor.h @@ -36,5 +36,6 @@ typedef struct _sceditor SCEditor; extern void sc_editor_set_slide(SCEditor *e, struct slide *s); extern GtkWidget *sc_editor_get_widget(SCEditor *e); extern SCEditor *sc_editor_new(struct presentation *p); +extern void sc_editor_set_size(SCEditor *e, int w, int h); #endif /* SC_EDITOR_H */ diff --git a/src/slide_window.c b/src/slide_window.c index 9163c69..0ca5f8f 100644 --- a/src/slide_window.c +++ b/src/slide_window.c @@ -609,6 +609,10 @@ SlideWindow *slide_window_open(struct presentation *p, GApplication *app) gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll), sc_editor_get_widget(sw->sceditor)); + /* Size of SCEditor surface in pixels */ + /* FIXME: Somewhat arbitrary. Should come from slide itself */ + sc_editor_set_size(sw->sceditor, 1024, 768); + add_menu_bar(sw, vbox); gtk_box_pack_start(GTK_BOX(vbox), scroll, TRUE, TRUE, 0); diff --git a/src/slideshow.c b/src/slideshow.c index 800d9b5..bd26d03 100644 --- a/src/slideshow.c +++ b/src/slideshow.c @@ -48,6 +48,7 @@ struct _slideshow int blank; char geom[256]; int slide_width; + int slide_height; struct inhibit_sys *inhibit; int linked; cairo_surface_t *surface; @@ -73,6 +74,7 @@ void slideshow_rerender(SlideShow *ss) n = slide_number(ss->p, ss->cur_slide); ss->surface = render_slide(ss->cur_slide, ss->slide_width, + ss->slide_height, ss->p->slide_width, ss->p->slide_height, ss->p->is, ISZ_SLIDESHOW, n); -- cgit v1.2.3