Do all rendering one level higher
authorThomas White <taw@bitwiz.me.uk>
Fri, 30 Mar 2018 21:57:15 +0000 (23:57 +0200)
committerThomas White <taw@bitwiz.me.uk>
Fri, 30 Mar 2018 21:57:15 +0000 (23:57 +0200)
All rendering functions now render the contents of the given block, not
the block itself.  This makes everything consistent again with respect
to where the frame SCBlock pointers point, even for the top frame.

src/narrative_window.c
src/print.c
src/render.c
src/sc_editor.c
src/slideshow.c

index 312763d..913d8da 100644 (file)
@@ -159,8 +159,7 @@ static void delete_slide_sig(GSimpleAction *action, GVariant *parameter,
        sc_block_delete(&nw->dummy_top, ns);
 
        /* Full rerender */
-       sc_editor_set_scblock(nw->sceditor,
-                             sc_editor_get_scblock(nw->sceditor));
+       sc_editor_set_scblock(nw->sceditor, nw->dummy_top);
        nw->p->saved = 0;
        update_titlebar(nw);
 }
@@ -339,8 +338,7 @@ static void add_slide_sig(GSimpleAction *action, GVariant *parameter,
                fprintf(stderr, "Failed to split paragraph\n");
        }
 
-       sc_editor_set_scblock(nw->sceditor,
-                             sc_editor_get_scblock(nw->sceditor));
+       sc_editor_set_scblock(nw->sceditor, nw->dummy_top);
        nw->p->saved = 0;
        update_titlebar(nw);
 }
@@ -681,7 +679,6 @@ static cairo_surface_t *render_thumbnail(int w, int h, void *bvp, void *vp)
        struct frame *top;
        int sn = slide_number(p, scblocks);
 
-       scblocks = sc_block_child(scblocks);
        stylesheets[0] = p->stylesheet;
        stylesheets[1] = NULL;
 
index 8275f23..b54d8e7 100644 (file)
@@ -135,7 +135,7 @@ static void print_slide_only(GtkPrintOperation *op, GtkPrintContext *ctx,
 
        printf("%f x %f ---> %f x %f\n", w, h, slide_width, slide_height);
 
-       top = interp_and_shape(sc_block_child(ps->slide), stylesheets, NULL,
+       top = interp_and_shape(ps->slide, stylesheets, NULL,
                               ps->p->is, page+1, pc, sw, sh, ps->p->lang);
 
        recursive_wrap(top, pc);
@@ -175,7 +175,6 @@ static cairo_surface_t *print_render_thumbnail(int w, int h, void *bvp, void *vp
        SCBlock *stylesheets[2];
        struct frame *top;
 
-       scblocks = sc_block_child(scblocks);
        stylesheets[0] = p->stylesheet;
        stylesheets[1] = NULL;
        surf = render_sc(scblocks, w, h, p->slide_width, p->slide_height, stylesheets, NULL,
@@ -194,6 +193,7 @@ static void begin_narrative_print(GtkPrintOperation *op, GtkPrintContext *ctx,
        PangoContext *pc;
        int i, n_pages;
        double h, page_height;
+       SCBlock *dummy_top;
 
        cbl = sc_callback_list_new();
        ps->slide_number = 1;
@@ -211,7 +211,8 @@ static void begin_narrative_print(GtkPrintOperation *op, GtkPrintContext *ctx,
 
        pc = gtk_print_context_create_pango_context(ctx);
 
-       ps->top = interp_and_shape(ps->p->scblocks, stylesheets, cbl,
+       dummy_top = sc_block_new_parent(ps->p->scblocks, "presentation");
+       ps->top = interp_and_shape(dummy_top, stylesheets, cbl,
                                   ps->is, 0, pc,
                                   gtk_print_context_get_width(ctx),
                                   gtk_print_context_get_height(ctx),
index f1ff019..103194e 100644 (file)
@@ -215,7 +215,7 @@ struct frame *interp_and_shape(SCBlock *scblocks, SCBlock **stylesheets,
        top->col[2] = sc_interp_get_fgcol(scin)[2];
        top->col[3] = sc_interp_get_fgcol(scin)[3];
 
-       sc_interp_add_blocks(scin, scblocks);
+       sc_interp_add_blocks(scin, sc_block_child(scblocks));
 
        sc_interp_destroy(scin);
 
@@ -320,9 +320,9 @@ int export_pdf(struct presentation *p, const char *filename)
                cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
                cairo_fill(cr);
 
-               render_sc_with_context(sc_block_child(bl), cr, p->slide_width,
-                                    p->slide_height, stylesheets, NULL,
-                                    p->is, i, p->lang, pc);
+               render_sc_with_context(bl, cr, p->slide_width,
+                                      p->slide_height, stylesheets, NULL,
+                                      p->is, i, p->lang, pc);
 
                cairo_restore(cr);
 
index 5fdcc07..e0fc64c 100644 (file)
@@ -195,7 +195,7 @@ static gboolean resize_sig(GtkWidget *widget, GdkEventConfigure *event,
                        w = e->log_w;
                        h = e->log_h;
                }
-               e->top = interp_and_shape(sc_block_child(e->scblocks),
+               e->top = interp_and_shape(e->scblocks,
                                          e->stylesheets, e->cbl,
                                          e->is, e->slidenum, pc,
                                          w, h, e->lang);
@@ -396,7 +396,7 @@ static void full_rerender(SCEditor *e)
 
        pc = gdk_pango_context_get();
 
-       e->top = interp_and_shape(sc_block_child(e->scblocks),
+       e->top = interp_and_shape(e->scblocks,
                                  e->stylesheets, e->cbl,
                                  e->is, e->slidenum,
                                  pc, e->log_w, 0.0, e->lang);
index 3e33c3d..194befd 100644 (file)
@@ -66,7 +66,7 @@ static void slideshow_rerender(SCSlideshow *ss)
        stylesheets[1] = NULL;
 
        n = slide_number(ss->p, ss->cur_slide);
-       ss->surface = render_sc(sc_block_child(ss->cur_slide),
+       ss->surface = render_sc(ss->cur_slide,
                                ss->slide_width, ss->slide_height,
                                ss->p->slide_width, ss->p->slide_height,
                                stylesheets, NULL, ss->p->is, n,