aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.me.uk>2019-02-25 07:44:22 +0100
committerThomas White <taw@bitwiz.me.uk>2019-02-25 07:44:22 +0100
commitde1550fd0ab6a4a3d3975cc6a1b808d33442824b (patch)
treee4a4944fab49e9ff534be5cc3580bec24d2c8f80
parent7f09291dcbde21fb182a32482c3985470eda41d7 (diff)
Stylesheet hooks
-rw-r--r--libstorycode/slide_render_cairo.c2
-rw-r--r--libstorycode/storycode.y31
-rw-r--r--libstorycode/stylesheet.c147
-rw-r--r--libstorycode/stylesheet.h45
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);