From de1550fd0ab6a4a3d3975cc6a1b808d33442824b Mon Sep 17 00:00:00 2001 From: Thomas White Date: Mon, 25 Feb 2019 07:44:22 +0100 Subject: Stylesheet hooks --- libstorycode/slide_render_cairo.c | 2 + libstorycode/storycode.y | 31 +++----- libstorycode/stylesheet.c | 147 ++++---------------------------------- libstorycode/stylesheet.h | 45 +++++------- 4 files changed, 44 insertions(+), 181 deletions(-) diff --git a/libstorycode/slide_render_cairo.c b/libstorycode/slide_render_cairo.c index 87ee49a..05039d9 100644 --- a/libstorycode/slide_render_cairo.c +++ b/libstorycode/slide_render_cairo.c @@ -104,6 +104,8 @@ static void render_text(struct slide_item *item, cairo_t *cr, PangoContext *pc, //pango_layout_set_attributes(item->layouts[i], attrs); //pango_attr_list_unref(attrs); + /* FIXME: Clip to w,h */ + cairo_save(cr); cairo_set_source_rgba(cr, 0.0, 0.0, 0.0, 1.0); cairo_translate(cr, x, y); diff --git a/libstorycode/storycode.y b/libstorycode/storycode.y index 8fce63c..4199a4c 100644 --- a/libstorycode/storycode.y +++ b/libstorycode/storycode.y @@ -152,24 +152,15 @@ void add_str(struct scpctx *ctx, char *str) ctx->str[ctx->n_str++] = str; } -void set_slide_text_style(struct scpctx *ctx) +void set_style(struct scpctx *ctx, enum style_element element) { - if ( ctx->mask & STYMASK_FONT ) stylesheet_set_slide_text_font(ctx->ss, ctx->font); - if ( ctx->mask & STYMASK_ALIGNMENT ) stylesheet_set_slide_text_align(ctx->ss, ctx->alignment); - ctx->mask = 0; -} - -void set_slide_slidetitle_style(struct scpctx *ctx) -{ - if ( ctx->mask & STYMASK_FONT ) stylesheet_set_slide_slidetitle_font(ctx->ss, ctx->font); - if ( ctx->mask & STYMASK_ALIGNMENT ) stylesheet_set_slide_slidetitle_align(ctx->ss, ctx->alignment); - ctx->mask = 0; -} - -void set_slide_prestitle_style(struct scpctx *ctx) -{ - if ( ctx->mask & STYMASK_FONT ) stylesheet_set_slide_prestitle_font(ctx->ss, ctx->font); - if ( ctx->mask & STYMASK_ALIGNMENT ) stylesheet_set_slide_prestitle_align(ctx->ss, ctx->alignment); + if ( ctx->mask & STYMASK_GEOM ) stylesheet_set_geometry(ctx->ss, element, ctx->geom); + if ( ctx->mask & STYMASK_FONT ) stylesheet_set_font(ctx->ss, element, ctx->font); + if ( ctx->mask & STYMASK_ALIGNMENT ) stylesheet_set_alignment(ctx->ss, element, ctx->alignment); + if ( ctx->mask & STYMASK_PADDING ) stylesheet_set_padding(ctx->ss, element, ctx->padding); + if ( ctx->mask & STYMASK_PARASPACE ) stylesheet_set_paraspace(ctx->ss, element, ctx->paraspace); + if ( ctx->mask & STYMASK_FGCOL ) stylesheet_set_fgcol(ctx->ss, element, ctx->fgcol); + if ( ctx->mask & STYMASK_BGCOL ) stylesheet_set_bgcol(ctx->ss, element, ctx->bgcol); ctx->mask = 0; } @@ -346,15 +337,15 @@ style_slidesize: ; style_slide_prestitle: - PRESTITLE '{' styledefs '}' { set_slide_prestitle_style(ctx); } + PRESTITLE '{' styledefs '}' { set_style(ctx, STYEL_SLIDE_PRESTITLE); } ; style_slide_title: - SLIDETITLE '{' styledefs '}' { set_slide_slidetitle_style(ctx); } + SLIDETITLE '{' styledefs '}' { set_style(ctx, STYEL_SLIDE_SLIDETITLE); } ; style_slide_text: - TEXTFRAME '{' styledefs '}' { set_slide_text_style(ctx); } + TEXTFRAME '{' styledefs '}' { set_style(ctx, STYEL_SLIDE_TEXT); } ; styledefs: diff --git a/libstorycode/stylesheet.c b/libstorycode/stylesheet.c index 2c77b5d..61c7f9f 100644 --- a/libstorycode/stylesheet.c +++ b/libstorycode/stylesheet.c @@ -124,172 +124,55 @@ int stylesheet_set_slide_default_size(Stylesheet *s, double w, double h) } -int stylesheet_set_slide_text_font(Stylesheet *s, char *font) -{ - if ( s == NULL ) return 1; - if ( s->slide_text.font != NULL ) { - free(s->slide_text.font); - } - s->slide_text.font = font; - return 0; -} - - -const char *stylesheet_get_slide_text_font(Stylesheet *s) -{ - if ( s == NULL ) return NULL; - return s->slide_text.font; -} - - -int stylesheet_set_slide_text_pad(Stylesheet *s, double padding[4]) -{ - return 0; -} - - -int stylesheet_set_slide_text_paraspace(Stylesheet *s, double paraspace[4]) -{ - return 0; -} - - -int stylesheet_set_slide_text_fgcol(Stylesheet *s, double rgba[4]) -{ - return 0; -} - - -int stylesheet_set_slide_text_bgcol(Stylesheet *s, double rgba[4]) -{ - return 0; -} - - -int stylesheet_set_slide_text_align(Stylesheet *s, enum alignment align) -{ - return 0; -} - - - -int stylesheet_set_slide_prestitle_geom(Stylesheet *s, struct frame_geom geom) -{ - return 0; -} - - -int stylesheet_set_slide_prestitle_font(Stylesheet *s, char *font) -{ - return 0; -} - - -int stylesheet_set_slide_prestitle_pad(Stylesheet *s, double padding[4]) -{ - return 0; -} - - -int stylesheet_set_slide_prestitle_paraspace(Stylesheet *s, double paraspace[4]) -{ - return 0; -} - - -int stylesheet_set_slide_prestitle_fgcol(Stylesheet *s, double rgba[4]) +int stylesheet_set_geometry(Stylesheet *s, enum style_element el, struct frame_geom geom) { return 0; } -int stylesheet_set_slide_prestitle_bgcol(Stylesheet *s, double rgba[4]) -{ - return 0; -} - - -int stylesheet_set_slide_prestitle_align(Stylesheet *s, enum alignment align) -{ - return 0; -} - - - -int stylesheet_set_slide_slidetitle_geom(Stylesheet *s, struct frame_geom geom) -{ - return 0; -} - - -int stylesheet_set_slide_slidetitle_font(Stylesheet *s, char *font) -{ - return 0; -} - - -int stylesheet_set_slide_slidetitle_pad(Stylesheet *s, double padding[4]) -{ - return 0; -} - - -int stylesheet_set_slide_slidetitle_paraspace(Stylesheet *s, double paraspace[4]) -{ - return 0; -} - - -int stylesheet_set_slide_slidetitle_fgcol(Stylesheet *s, double rgba[4]) -{ - return 0; -} - - -int stylesheet_set_slide_slidetitle_bgcol(Stylesheet *s, double rgba[4]) -{ - return 0; -} - - -int stylesheet_set_slide_slidetitle_align(Stylesheet *s, enum alignment align) +int stylesheet_set_font(Stylesheet *s, enum style_element el, char *font) { + if ( s == NULL ) return 1; + if ( s->slide_text.font != NULL ) { + free(s->slide_text.font); + } + s->slide_text.font = font; return 0; } - -int stylesheet_set_narrative_font(Stylesheet *s, char *font) +int stylesheet_set_padding(Stylesheet *s, enum style_element el, struct length padding[4]) { return 0; } -int stylesheet_set_narrative_pad(Stylesheet *s, double padding[4]) +int stylesheet_set_paraspace(Stylesheet *s, enum style_element el, struct length paraspace[4]) { return 0; } -int stylesheet_set_narrative_paraspace(Stylesheet *s, double paraspace[4]) +int stylesheet_set_fgcol(Stylesheet *s, enum style_element el, double rgba[4]) { return 0; } -int stylesheet_set_narrative_fgcol(Stylesheet *s, double rgba[4]) +int stylesheet_set_bgcol(Stylesheet *s, enum style_element el, double rgba[4]) { return 0; } -int stylesheet_set_narrative_bgcol(Stylesheet *s, double rgba[4]) +int stylesheet_set_alignment(Stylesheet *s, enum style_element el, enum alignment align) { return 0; } -int stylesheet_set_narrative_align(Stylesheet *s, enum alignment align) +const char *stylesheet_get_slide_text_font(Stylesheet *s) { - return 0; + if ( s == NULL ) return NULL; + return s->slide_text.font; } diff --git a/libstorycode/stylesheet.h b/libstorycode/stylesheet.h index 6aece57..dd2b470 100644 --- a/libstorycode/stylesheet.h +++ b/libstorycode/stylesheet.h @@ -60,40 +60,27 @@ struct frame_geom }; +enum style_element +{ + STYEL_NARRATIVE, + STYEL_SLIDE_TEXT, + STYEL_SLIDE_PRESTITLE, + STYEL_SLIDE_SLIDETITLE, +}; + + extern Stylesheet *stylesheet_new(void); extern void stylesheet_free(Stylesheet *s); extern int stylesheet_set_slide_default_size(Stylesheet *s, double w, double h); -extern int stylesheet_set_slide_text_font(Stylesheet *s, char *font); -extern int stylesheet_set_slide_text_pad(Stylesheet *s, double padding[4]); -extern int stylesheet_set_slide_text_paraspace(Stylesheet *s, double paraspace[4]); -extern int stylesheet_set_slide_text_fgcol(Stylesheet *s, double rgba[4]); -extern int stylesheet_set_slide_text_bgcol(Stylesheet *s, double rgba[4]); -extern int stylesheet_set_slide_text_align(Stylesheet *s, enum alignment align); - -extern int stylesheet_set_slide_prestitle_geom(Stylesheet *s, struct frame_geom geom); -extern int stylesheet_set_slide_prestitle_font(Stylesheet *s, char *font); -extern int stylesheet_set_slide_prestitle_pad(Stylesheet *s, double padding[4]); -extern int stylesheet_set_slide_prestitle_paraspace(Stylesheet *s, double paraspace[4]); -extern int stylesheet_set_slide_prestitle_fgcol(Stylesheet *s, double rgba[4]); -extern int stylesheet_set_slide_prestitle_bgcol(Stylesheet *s, double rgba[4]); -extern int stylesheet_set_slide_prestitle_align(Stylesheet *s, enum alignment align); - -extern int stylesheet_set_slide_slidetitle_geom(Stylesheet *s, struct frame_geom geom); -extern int stylesheet_set_slide_slidetitle_font(Stylesheet *s, char *font); -extern int stylesheet_set_slide_slidetitle_pad(Stylesheet *s, double padding[4]); -extern int stylesheet_set_slide_slidetitle_paraspace(Stylesheet *s, double paraspace[4]); -extern int stylesheet_set_slide_slidetitle_fgcol(Stylesheet *s, double rgba[4]); -extern int stylesheet_set_slide_slidetitle_bgcol(Stylesheet *s, double rgba[4]); -extern int stylesheet_set_slide_slidetitle_align(Stylesheet *s, enum alignment align); - -extern int stylesheet_set_narrative_font(Stylesheet *s, char *font); -extern int stylesheet_set_narrative_pad(Stylesheet *s, double padding[4]); -extern int stylesheet_set_narrative_paraspace(Stylesheet *s, double paraspace[4]); -extern int stylesheet_set_narrative_fgcol(Stylesheet *s, double rgba[4]); -extern int stylesheet_set_narrative_bgcol(Stylesheet *s, double rgba[4]); -extern int stylesheet_set_narrative_align(Stylesheet *s, enum alignment align); +extern int stylesheet_set_geometry(Stylesheet *s, enum style_element el, struct frame_geom geom); +extern int stylesheet_set_font(Stylesheet *s, enum style_element el, char *font); +extern int stylesheet_set_alignment(Stylesheet *s, enum style_element el, enum alignment align); +extern int stylesheet_set_padding(Stylesheet *s, enum style_element el, struct length padding[4]); +extern int stylesheet_set_paraspace(Stylesheet *s, enum style_element el, struct length paraspace[4]); +extern int stylesheet_set_fgcol(Stylesheet *s, enum style_element el, double rgba[4]); +extern int stylesheet_set_bgcol(Stylesheet *s, enum style_element el, double rgba[4]); extern const char *stylesheet_get_slide_text_font(Stylesheet *s); -- cgit v1.2.3