aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.me.uk>2019-03-21 23:21:41 +0100
committerThomas White <taw@bitwiz.me.uk>2019-03-21 23:21:41 +0100
commit891e3c9bff47bde012672aa699280400124d2447 (patch)
treef4b0cc1b5c996a181a4732646cefead6c1c765d0
parent2d34695fd69d5c31f58cab56d135d487a6389267 (diff)
Expose SlideItem as an opaque type
-rw-r--r--libstorycode/gtk/gtkslideview.c22
-rw-r--r--libstorycode/gtk/gtkslideview.h2
-rw-r--r--libstorycode/slide.c96
-rw-r--r--libstorycode/slide.h9
-rw-r--r--libstorycode/slide_priv.c80
-rw-r--r--libstorycode/slide_priv.h12
-rw-r--r--libstorycode/slide_render_cairo.c4
-rw-r--r--meson.build1
8 files changed, 114 insertions, 112 deletions
diff --git a/libstorycode/gtk/gtkslideview.c b/libstorycode/gtk/gtkslideview.c
index 4a0102f..f3d7d59 100644
--- a/libstorycode/gtk/gtkslideview.c
+++ b/libstorycode/gtk/gtkslideview.c
@@ -118,7 +118,7 @@ static gint destroy_sig(GtkWidget *window, GtkSlideView *e)
}
-static void draw_editing_box(cairo_t *cr, struct slide_item *item,
+static void draw_editing_box(cairo_t *cr, SlideItem *item,
Stylesheet *stylesheet, double slide_w, double slide_h,
double xmin, double ymin, double width, double height)
{
@@ -157,7 +157,7 @@ static void draw_resize_handle(cairo_t *cr, double x, double y)
}
-static size_t pos_trail_to_offset(struct slide_item *item, int para,
+static size_t pos_trail_to_offset(SlideItem *item, int para,
size_t offs, int trail)
{
glong char_offs;
@@ -171,7 +171,7 @@ static size_t pos_trail_to_offset(struct slide_item *item, int para,
}
-static double para_top(struct slide_item *item, int pnum)
+static double para_top(SlideItem *item, int pnum)
{
int i;
double py = 0.0;
@@ -184,7 +184,7 @@ static double para_top(struct slide_item *item, int pnum)
}
-static int get_cursor_pos(struct slide_item *item, Stylesheet *stylesheet,
+static int get_cursor_pos(SlideItem *item, Stylesheet *stylesheet,
struct slide_pos cpos, double slide_w, double slide_h,
double *x, double *y, double *h)
{
@@ -210,7 +210,7 @@ static int get_cursor_pos(struct slide_item *item, Stylesheet *stylesheet,
static void draw_caret(cairo_t *cr, Stylesheet *stylesheet,
- struct slide_item *item, struct slide_pos cpos,
+ SlideItem *item, struct slide_pos cpos,
double frx, double fry, double slide_w, double slide_h)
{
double cx, clow, chigh, h;
@@ -335,7 +335,7 @@ static gboolean draw_sig(GtkWidget *da, cairo_t *cr, GtkSlideView *e)
}
-static int within_frame(struct slide_item *item, Stylesheet *ss,
+static int within_frame(SlideItem *item, Stylesheet *ss,
double slide_w, double slide_h,
double xp, double yp)
{
@@ -351,7 +351,7 @@ static int within_frame(struct slide_item *item, Stylesheet *ss,
}
-static struct slide_item *find_frame_at_position(Slide *s, Stylesheet *ss,
+static SlideItem *find_frame_at_position(Slide *s, Stylesheet *ss,
double slide_w, double slide_h,
double x, double y)
{
@@ -524,7 +524,7 @@ static int is_text(enum slide_item_type type)
}
-static int find_cursor(struct slide_item *item, Stylesheet *stylesheet,
+static int find_cursor(SlideItem *item, Stylesheet *stylesheet,
double x, double y, struct slide_pos *pos,
double slide_w, double slide_h)
{
@@ -632,7 +632,7 @@ static gboolean button_press_sig(GtkWidget *da, GdkEventButton *event,
enum drag_corner c;
gdouble x, y;
Stylesheet *stylesheet;
- struct slide_item *clicked;
+ SlideItem *clicked;
int shift;
double slide_w, slide_h;
double frx, fry, frw, frh;
@@ -879,7 +879,7 @@ static gboolean button_release_sig(GtkWidget *da, GdkEventButton *event,
}
-static size_t end_offset_of_para(struct slide_item *item, int pnum)
+static size_t end_offset_of_para(SlideItem *item, int pnum)
{
assert(pnum >= 0);
if ( is_text(item->type) ) return 0;
@@ -945,7 +945,7 @@ static int slide_positions_equal(struct slide_pos a, struct slide_pos b)
}
-static void insert_text_in_paragraph(struct slide_item *item, int para,
+static void insert_text_in_paragraph(SlideItem *item, int para,
size_t offs, char *t)
{
char *n = malloc(strlen(t) + strlen(item->paragraphs[para]) + 1);
diff --git a/libstorycode/gtk/gtkslideview.h b/libstorycode/gtk/gtkslideview.h
index 610463d..0221fca 100644
--- a/libstorycode/gtk/gtkslideview.h
+++ b/libstorycode/gtk/gtkslideview.h
@@ -105,7 +105,7 @@ struct _gtkslideview
double visible_height;
/* Location of the cursor */
- struct slide_item *cursor_frame;
+ SlideItem *cursor_frame;
struct slide_pos cpos;
/* Border surrounding actual slide within drawingarea */
diff --git a/libstorycode/slide.c b/libstorycode/slide.c
index f24e713..959693d 100644
--- a/libstorycode/slide.c
+++ b/libstorycode/slide.c
@@ -52,12 +52,12 @@ void slide_free(Slide *s)
}
-static struct slide_item *add_item(Slide *s)
+static SlideItem *add_item(Slide *s)
{
- struct slide_item *new_items;
- struct slide_item *item;
+ SlideItem *new_items;
+ SlideItem *item;
- new_items = realloc(s->items, (s->n_items+1)*sizeof(struct slide_item));
+ new_items = realloc(s->items, (s->n_items+1)*sizeof(SlideItem));
if ( new_items == NULL ) return NULL;
s->items = new_items;
item = &s->items[s->n_items++];
@@ -70,7 +70,7 @@ static struct slide_item *add_item(Slide *s)
int slide_add_image(Slide *s, char *filename, struct frame_geom geom)
{
- struct slide_item *item;
+ SlideItem *item;
item = add_item(s);
if ( item == NULL ) return 1;
@@ -88,7 +88,7 @@ int add_text_item(Slide *s, char **text, int n_text, struct frame_geom geom,
enum alignment alignment, enum slide_item_type slide_item)
{
int i;
- struct slide_item *item;
+ SlideItem *item;
item = add_item(s);
if ( item == NULL ) return 1;
@@ -122,7 +122,7 @@ int add_text_item(Slide *s, char **text, int n_text, struct frame_geom geom,
int slide_add_footer(Slide *s)
{
- struct slide_item *item;
+ SlideItem *item;
item = add_item(s);
if ( item == NULL ) return 1;
@@ -225,3 +225,85 @@ int slide_get_logical_size(Slide *s, Stylesheet *ss, double *w, double *h)
*h = s->logical_h;
return 0;
}
+
+
+static enum style_element styel_for_slideitem(enum slide_item_type t)
+{
+ switch ( t ) {
+
+ case SLIDE_ITEM_TEXT :
+ return STYEL_SLIDE_TEXT;
+
+ case SLIDE_ITEM_IMAGE :
+ return STYEL_SLIDE_IMAGE;
+
+ case SLIDE_ITEM_PRESTITLE :
+ return STYEL_SLIDE_PRESTITLE;
+
+ case SLIDE_ITEM_SLIDETITLE :
+ return STYEL_SLIDE_SLIDETITLE;
+
+ case SLIDE_ITEM_FOOTER :
+ return STYEL_SLIDE_FOOTER;
+
+ }
+
+ fprintf(stderr, "Invalid slide item %i\n", t);
+ return STYEL_SLIDE_TEXT;
+}
+
+
+static double lcalc(struct length l, double pd)
+{
+ if ( l.unit == LENGTH_UNIT ) {
+ return l.len;
+ } else {
+ return l.len * pd;
+ }
+}
+
+
+void slide_item_get_geom(SlideItem *item, Stylesheet *ss,
+ double *x, double *y, double *w, double *h,
+ double slide_w, double slide_h)
+{
+ struct frame_geom geom;
+
+ if ( (item->type == SLIDE_ITEM_TEXT)
+ || (item->type == SLIDE_ITEM_IMAGE) )
+ {
+ geom = item->geom;
+ } else {
+ if ( stylesheet_get_geometry(ss, styel_for_slideitem(item->type), &geom) ) {
+ *x = 0.0; *y = 0.0;
+ *w = 0.0; *h = 0.0;
+ return;
+ }
+ }
+
+ *x = lcalc(geom.x, slide_w);
+ *y = lcalc(geom.y, slide_h);
+ *w = lcalc(geom.w, slide_w);
+ *h = lcalc(geom.h, slide_h);
+}
+
+
+void slide_item_get_padding(SlideItem *item, Stylesheet *ss,
+ double *l, double *r, double *t, double *b,
+ double slide_w, double slide_h)
+{
+ struct length padding[4];
+ double frx, fry, frw, frh;
+
+ if ( stylesheet_get_padding(ss, styel_for_slideitem(item->type), padding) ) {
+ *l = 0.0; *r = 0.0; *t = 0.0; *b = 0.0;
+ return;
+ }
+
+ slide_item_get_geom(item, ss, &frx, &fry, &frw, &frh, slide_w, slide_h);
+
+ *l = lcalc(padding[0], frw);
+ *r = lcalc(padding[1], frh);
+ *t = lcalc(padding[2], frw);
+ *b = lcalc(padding[3], frh);
+}
diff --git a/libstorycode/slide.h b/libstorycode/slide.h
index e9e5875..6242d08 100644
--- a/libstorycode/slide.h
+++ b/libstorycode/slide.h
@@ -45,6 +45,15 @@ extern int slide_set_logical_size(Slide *s, double w, double h);
extern int slide_get_logical_size(Slide *s, Stylesheet *ss, double *w, double *h);
+/* Slide items */
+extern void slide_item_get_geom(SlideItem *item, Stylesheet *ss,
+ double *x, double *y, double *w, double *h,
+ double slide_w, double slide_h);
+
+extern void slide_item_get_padding(SlideItem *item, Stylesheet *ss,
+ double *l, double *r, double *t, double *b,
+ double slide_w, double slide_h);
+
/* For debugging, not really part of API */
extern void describe_slide(Slide *s);
diff --git a/libstorycode/slide_priv.c b/libstorycode/slide_priv.c
index f3cf14c..efe502b 100644
--- a/libstorycode/slide_priv.c
+++ b/libstorycode/slide_priv.c
@@ -24,83 +24,3 @@
#include "slide_priv.h"
-static double lcalc(struct length l, double pd)
-{
- if ( l.unit == LENGTH_UNIT ) {
- return l.len;
- } else {
- return l.len * pd;
- }
-}
-
-
-static enum style_element styel_for_slideitem(enum slide_item_type t)
-{
- switch ( t ) {
-
- case SLIDE_ITEM_TEXT :
- return STYEL_SLIDE_TEXT;
-
- case SLIDE_ITEM_IMAGE :
- return STYEL_SLIDE_IMAGE;
-
- case SLIDE_ITEM_PRESTITLE :
- return STYEL_SLIDE_PRESTITLE;
-
- case SLIDE_ITEM_SLIDETITLE :
- return STYEL_SLIDE_SLIDETITLE;
-
- case SLIDE_ITEM_FOOTER :
- return STYEL_SLIDE_FOOTER;
-
- }
-
- fprintf(stderr, "Invalid slide item %i\n", t);
- return STYEL_SLIDE_TEXT;
-}
-
-
-void slide_item_get_geom(struct slide_item *item, Stylesheet *ss,
- double *x, double *y, double *w, double *h,
- double slide_w, double slide_h)
-{
- struct frame_geom geom;
-
- if ( (item->type == SLIDE_ITEM_TEXT)
- || (item->type == SLIDE_ITEM_IMAGE) )
- {
- geom = item->geom;
- } else {
- if ( stylesheet_get_geometry(ss, styel_for_slideitem(item->type), &geom) ) {
- *x = 0.0; *y = 0.0;
- *w = 0.0; *h = 0.0;
- return;
- }
- }
-
- *x = lcalc(geom.x, slide_w);
- *y = lcalc(geom.y, slide_h);
- *w = lcalc(geom.w, slide_w);
- *h = lcalc(geom.h, slide_h);
-}
-
-
-void slide_item_get_padding(struct slide_item *item, Stylesheet *ss,
- double *l, double *r, double *t, double *b,
- double slide_w, double slide_h)
-{
- struct length padding[4];
- double frx, fry, frw, frh;
-
- if ( stylesheet_get_padding(ss, styel_for_slideitem(item->type), padding) ) {
- *l = 0.0; *r = 0.0; *t = 0.0; *b = 0.0;
- return;
- }
-
- slide_item_get_geom(item, ss, &frx, &fry, &frw, &frh, slide_w, slide_h);
-
- *l = lcalc(padding[0], frw);
- *r = lcalc(padding[1], frh);
- *t = lcalc(padding[2], frw);
- *b = lcalc(padding[3], frh);
-}
diff --git a/libstorycode/slide_priv.h b/libstorycode/slide_priv.h
index 878982a..0d80663 100644
--- a/libstorycode/slide_priv.h
+++ b/libstorycode/slide_priv.h
@@ -39,7 +39,7 @@ enum slide_item_type
};
-struct slide_item
+struct _slideitem
{
enum slide_item_type type;
@@ -65,15 +65,7 @@ struct _slide
double logical_w;
double logical_h;
int n_items;
- struct slide_item *items;
+ SlideItem *items;
};
-extern void slide_item_get_geom(struct slide_item *item, Stylesheet *ss,
- double *x, double *y, double *w, double *h,
- double slide_w, double slide_h);
-
-extern void slide_item_get_padding(struct slide_item *item, Stylesheet *ss,
- double *l, double *r, double *t, double *b,
- double slide_w, double slide_h);
-
#endif /* SLIDE_PRIV_H */
diff --git a/libstorycode/slide_render_cairo.c b/libstorycode/slide_render_cairo.c
index e74a13f..5b6bfc7 100644
--- a/libstorycode/slide_render_cairo.c
+++ b/libstorycode/slide_render_cairo.c
@@ -63,7 +63,7 @@ static PangoAlignment to_pangoalignment(enum alignment align)
}
-static void render_text(struct slide_item *item, cairo_t *cr, PangoContext *pc,
+static void render_text(SlideItem *item, cairo_t *cr, PangoContext *pc,
Stylesheet *ss, enum style_element el,
double parent_w, double parent_h)
{
@@ -146,7 +146,7 @@ static void render_text(struct slide_item *item, cairo_t *cr, PangoContext *pc,
}
-static void render_image(struct slide_item *item, cairo_t *cr,
+static void render_image(SlideItem *item, cairo_t *cr,
Stylesheet *ss, ImageStore *is,
double parent_w, double parent_h)
{
diff --git a/meson.build b/meson.build
index c33cdc0..5d9d5d4 100644
--- a/meson.build
+++ b/meson.build
@@ -71,7 +71,6 @@ libstorycode = library('storycode',
'libstorycode/slide_render_cairo.c',
'libstorycode/narrative_render_cairo.c',
'libstorycode/imagestore.c',
- 'libstorycode/slide_priv.c',
storycode_lex_ch,
storycode_parse_ch,
],