diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/narrative_window.c | 21 | ||||
-rw-r--r-- | src/print.c | 16 | ||||
-rw-r--r-- | src/sc_interp.c | 31 |
3 files changed, 24 insertions, 44 deletions
diff --git a/src/narrative_window.c b/src/narrative_window.c index e5faffa..8da1c62 100644 --- a/src/narrative_window.c +++ b/src/narrative_window.c @@ -225,14 +225,6 @@ static SCBlock *get_slide_template(SCBlock *ss) } -static SCBlock *narrative_stylesheet() -{ - return sc_parse("\\stylesheet{" - "\\ss[slide]{\\callback[sthumb]}" - "}"); -} - - static SCBlock **get_ss_list(struct presentation *p) { SCBlock **stylesheets; @@ -242,11 +234,9 @@ static SCBlock **get_ss_list(struct presentation *p) if ( p->stylesheet != NULL ) { stylesheets[0] = p->stylesheet; - stylesheets[1] = narrative_stylesheet(); - stylesheets[2] = NULL; - } else { - stylesheets[0] = narrative_stylesheet(); stylesheets[1] = NULL; + } else { + stylesheets[0] = NULL; } return stylesheets; @@ -672,13 +662,10 @@ static int create_thumbnail(SCInterpreter *scin, SCBlock *bl, double *w, double *h, void **bvp, void *vp) { struct presentation *p = vp; - SCBlock *b; *w = 270.0*(p->slide_width / p->slide_height); *h = 270.0; - b = sc_interp_get_macro_real_block(scin); - - *bvp = b; + *bvp = bl; return 1; } @@ -817,7 +804,7 @@ NarrativeWindow *narrative_window_new(struct presentation *p, GApplication *papp colloquium_get_imagestore(app)); free(stylesheets); cbl = sc_callback_list_new(); - sc_callback_list_add_callback(cbl, "sthumb", create_thumbnail, + sc_callback_list_add_callback(cbl, "slide", create_thumbnail, render_thumbnail, click_thumbnail, p); sc_editor_set_callbacks(nw->sceditor, cbl); sc_editor_set_imagestore(nw->sceditor, p->is); diff --git a/src/print.c b/src/print.c index 18402fc..8275f23 100644 --- a/src/print.c +++ b/src/print.c @@ -186,14 +186,6 @@ static cairo_surface_t *print_render_thumbnail(int w, int h, void *bvp, void *vp } -static SCBlock *print_narrative_stylesheet() -{ - return sc_parse("\\stylesheet{" - "\\ss[slide]{\\callback[sthumb]}" - "}"); -} - - static void begin_narrative_print(GtkPrintOperation *op, GtkPrintContext *ctx, struct print_stuff *ps) { @@ -205,18 +197,16 @@ static void begin_narrative_print(GtkPrintOperation *op, GtkPrintContext *ctx, cbl = sc_callback_list_new(); ps->slide_number = 1; - sc_callback_list_add_callback(cbl, "sthumb", print_create_thumbnail, + sc_callback_list_add_callback(cbl, "slide", print_create_thumbnail, print_render_thumbnail, NULL, ps); ps->is = imagestore_new(ps->storename); if ( ps->p->stylesheet != NULL ) { stylesheets[0] = ps->p->stylesheet; - stylesheets[1] = print_narrative_stylesheet(); - stylesheets[2] = NULL; - } else { - stylesheets[0] = print_narrative_stylesheet(); stylesheets[1] = NULL; + } else { + stylesheets[0] = NULL; } pc = gtk_print_context_create_pango_context(ctx); diff --git a/src/sc_interp.c b/src/sc_interp.c index 0301aad..6914b13 100644 --- a/src/sc_interp.c +++ b/src/sc_interp.c @@ -216,15 +216,17 @@ void sc_interp_set_callbacks(SCInterpreter *scin, SCCallbackList *cbl) } -static void do_callback(SCInterpreter *scin, SCBlock *bl, const char *name) +static int check_callback(SCInterpreter *scin, SCBlock *bl) { int i; + const char *name = sc_block_name(bl); SCCallbackList *cbl = scin->cbl; - if ( cbl == NULL ) { - fprintf(stderr, "No callback list.\n"); - return; - } + /* No callback list -> easy */ + if ( cbl == NULL ) return 0; + + /* No name -> definitely not a callback */ + if ( name == NULL ) return 0; for ( i=0; i<cbl->n_callbacks; i++ ) { @@ -240,15 +242,16 @@ static void do_callback(SCInterpreter *scin, SCBlock *bl, const char *name) if ( strcmp(cbl->names[i], name) != 0 ) continue; r = cbl->box_funcs[i](scin, bl, &w, &h, &bvp, cbl->vps[i]); - if ( !r ) return; - add_callback_para(sc_interp_get_frame(scin), bl, rbl, w, h, - cbl->draw_funcs[i], cbl->click_funcs[i], - bvp, cbl->vps[i]); + if ( r ) { + add_callback_para(sc_interp_get_frame(scin), bl, w, h, + cbl->draw_funcs[i], cbl->click_funcs[i], + bvp, cbl->vps[i]); + } + return 1; - return; } - fprintf(stderr, "Unknown callback '%s'\n", name); + return 0; } @@ -1143,6 +1146,9 @@ int sc_interp_add_blocks(SCInterpreter *scin, SCBlock *bl) exec_macro(bl, scin, child); sc_interp_restore(scin); + } else if ( check_callback(scin, bl) ) { + /* Handled in check_callback, don't do anything else */ + } else if ((sc_interp_get_frame(scin) != NULL) && check_outputs(bl, scin) ) { /* Block handled as output thing */ @@ -1209,9 +1215,6 @@ int sc_interp_add_blocks(SCInterpreter *scin, SCBlock *bl) set_paraspace(scin, options); maybe_recurse_after(scin, child); - } else if ( strcmp(name, "callback") == 0 ) { - do_callback(scin, bl, options); - } else { //fprintf(stderr, "Don't know what to do with this:\n"); |