aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/render.c5
-rw-r--r--src/render.h2
-rw-r--r--src/sc_editor.c42
-rw-r--r--src/sc_editor.h1
-rw-r--r--src/slide_window.c4
-rw-r--r--src/slideshow.c2
-rw-r--r--tests/render_test.c2
-rw-r--r--tests/render_test_sc1.c2
8 files changed, 38 insertions, 22 deletions
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);
diff --git a/tests/render_test.c b/tests/render_test.c
index eab6108..7d43123 100644
--- a/tests/render_test.c
+++ b/tests/render_test.c
@@ -60,7 +60,7 @@ static gboolean draw_sig(GtkWidget *da, cairo_t *cr, gpointer data)
cairo_set_source_rgb(cr, 0.9, 0.9, 0.9);
cairo_fill(cr);
- surface = render_slide(s, w, w, h, NULL, ISZ_EDITOR, 1);
+ surface = render_slide(s, w, h, w, h, NULL, ISZ_EDITOR, 1);
cairo_rectangle(cr, 0.0, 0.0, w, h);
cairo_set_source_surface(cr, surface, 0.0, 0.0);
cairo_fill(cr);
diff --git a/tests/render_test_sc1.c b/tests/render_test_sc1.c
index 590f21e..7db7970 100644
--- a/tests/render_test_sc1.c
+++ b/tests/render_test_sc1.c
@@ -58,7 +58,7 @@ static gboolean draw_sig(GtkWidget *da, cairo_t *cr, gpointer data)
cairo_set_source_rgb(cr, 0.9, 0.9, 0.9);
cairo_fill(cr);
- surface = render_slide(s, w, w, h, NULL, ISZ_EDITOR, 1);
+ surface = render_slide(s, w, h, w, h, NULL, ISZ_EDITOR, 1);
cairo_rectangle(cr, 0.0, 0.0, w, h);
cairo_set_source_surface(cr, surface, 0.0, 0.0);
cairo_fill(cr);