aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.org.uk>2015-08-16 17:50:07 +0200
committerThomas White <taw@bitwiz.org.uk>2015-08-16 17:50:07 +0200
commit4534e5af52a226327590b3c19a010a460212427a (patch)
treec4749cd036cdf0e1fb7d2139836b6934b5d2c239
parenta54c8fae031aa34b6286e8f08fc4861681d24200 (diff)
Remove sc_block_frame() crap
-rw-r--r--src/render.c8
-rw-r--r--src/sc_editor.c9
-rw-r--r--src/sc_editor.h1
-rw-r--r--src/sc_interp.c73
-rw-r--r--src/sc_interp.h2
-rw-r--r--src/sc_parse.c30
-rw-r--r--src/sc_parse.h6
7 files changed, 25 insertions, 104 deletions
diff --git a/src/render.c b/src/render.c
index 4615e25..d24d437 100644
--- a/src/render.c
+++ b/src/render.c
@@ -431,12 +431,8 @@ static void render_sc_to_surface(SCBlock *scblocks, cairo_surface_t *surf,
pc = pango_font_map_create_context(fontmap);
pango_cairo_update_context(cr, pc);
- top = sc_block_frame(scblocks);
- if ( top == NULL ) {
- top = frame_new();
- top->resizable = 0;
- sc_block_set_frame(scblocks, top);
- }
+ top = frame_new();
+ top->resizable = 0;
top->x = 0.0;
top->y = 0.0;
top->w = log_w;
diff --git a/src/sc_editor.c b/src/sc_editor.c
index 2845a18..95351e2 100644
--- a/src/sc_editor.c
+++ b/src/sc_editor.c
@@ -819,8 +819,7 @@ static gboolean button_press_sig(GtkWidget *da, GdkEventButton *event,
if ( within_frame(e->selection, x, y) ) {
clicked = e->selection;
} else {
- clicked = find_frame_at_position(sc_block_frame(e->scblocks),
- x, y);
+ clicked = find_frame_at_position(e->top, x, y);
}
/* If the user clicked the currently selected frame, position cursor
@@ -867,8 +866,7 @@ static gboolean button_press_sig(GtkWidget *da, GdkEventButton *event,
}
} else if ( (clicked == NULL)
- || ( !e->top_editable
- && (clicked == sc_block_frame(e->scblocks)) ) )
+ || ( !e->top_editable && (clicked == e->top) ) )
{
/* Clicked no object. Deselect old object and set up for
* (maybe) creating a new one. */
@@ -955,7 +953,7 @@ static struct frame *create_frame(SCEditor *e, double x, double y,
struct frame *parent;
struct frame *fr;
- parent = sc_block_frame(e->scblocks);
+ parent = e->top;
if ( w < 0.0 ) {
x += w;
@@ -972,7 +970,6 @@ static struct frame *create_frame(SCEditor *e, double x, double y,
/* Add to SC */
fr->scblocks = sc_block_append_end(e->scblocks,
"f", NULL, NULL);
- sc_block_set_frame(fr->scblocks, fr);
sc_block_append_inside(fr->scblocks, NULL, NULL, strdup(""));
fr->x = x;
diff --git a/src/sc_editor.h b/src/sc_editor.h
index 203910a..b9f1c19 100644
--- a/src/sc_editor.h
+++ b/src/sc_editor.h
@@ -96,6 +96,7 @@ struct _sceditor
SCBlock **stylesheets;
ImageStore *is;
SCCallbackList *cbl;
+ struct frame *top;
/* Pointers to the frame currently being edited */
struct frame *selection;
diff --git a/src/sc_interp.c b/src/sc_interp.c
index dc0bad4..a261410 100644
--- a/src/sc_interp.c
+++ b/src/sc_interp.c
@@ -809,23 +809,19 @@ static int check_outputs(SCBlock *bl, SCInterpreter *scin)
} else if ( strcmp(name, "f")==0 ) {
- struct frame *fr = sc_block_frame(bl);
+ struct frame *fr;
- if ( fr == NULL ) {
- fr = add_subframe(sc_interp_get_frame(scin));
- sc_block_set_frame(bl, fr);
- fr->scblocks = bl;
- if ( in_macro(scin) ) {
- fr->resizable = 0;
- } else {
- fr->resizable = 1;
- }
+ fr = add_subframe(sc_interp_get_frame(scin));
+ fr->scblocks = bl;
+ if ( in_macro(scin) ) {
+ fr->resizable = 0;
+ } else {
+ fr->resizable = 1;
}
if ( fr == NULL ) {
fprintf(stderr, "Failed to add frame.\n");
return 1;
}
- fr->visited = 1;
parse_frame_options(fr, sc_interp_get_frame(scin),
options);
@@ -859,31 +855,20 @@ static int check_macro(const char *name, SCInterpreter *scin)
static void exec_macro(SCBlock *bl, SCInterpreter *scin, SCBlock *child)
{
- SCBlock *mchild;
struct sc_state *st = &scin->state[scin->j];
+ int i;
+ const char *name;
- st->macro_contents = child;
- st->macro_real_block = bl;
-
- mchild = sc_block_macro_child(bl);
-
- if ( (mchild == NULL) || (strcmp(sc_block_name(bl), "slidenumber")==0) ) {
-
- int i;
- const char *name;
-
- /* Copy macro blocks into structure */
- name = sc_block_name(bl);
- for ( i=0; i<st->n_macros; i++ ) {
- if ( strcmp(st->macros[i].name, name) == 0 ) {
- mchild = sc_block_copy(st->macros[i].bl);
- sc_block_set_macro_child(bl, mchild);
- }
+ name = sc_block_name(bl);
+ for ( i=0; i<st->n_macros; i++ ) {
+ if ( strcmp(st->macros[i].name, name) == 0 ) {
+ sc_interp_save(scin);
+ scin->state[scin->j].macro_real_block = bl;
+ scin->state[scin->j].macro_contents = child;
+ sc_interp_add_blocks(scin, st->macros[i].bl);
+ sc_interp_restore(scin);
}
-
}
-
- sc_interp_add_blocks(scin, mchild);
}
@@ -897,28 +882,6 @@ static void run_macro_contents(SCInterpreter *scin)
}
-static void delete_unused_subframes(struct frame *fr)
-{
- int i;
- int done = 1;
- int start = 0;
-
- do {
- done = 1;
- for ( i=start; i<fr->num_children; i++ ) {
- if ( !fr->children[i]->visited ) {
- // delete_subframe(fr, fr->children[i]);
- // done = 0;
- // start = i;
- // break;
- } else {
- delete_unused_subframes(fr->children[i]);
- }
- }
- } while ( !done );
-}
-
-
int sc_interp_add_blocks(SCInterpreter *scin, SCBlock *bl)
{
//printf("Running this --------->\n");
@@ -997,8 +960,6 @@ int sc_interp_add_blocks(SCInterpreter *scin, SCBlock *bl)
}
- delete_unused_subframes(sc_interp_get_frame(scin));
-
return 0;
}
diff --git a/src/sc_interp.h b/src/sc_interp.h
index 7354e16..4591bae 100644
--- a/src/sc_interp.h
+++ b/src/sc_interp.h
@@ -29,6 +29,8 @@
#include <pango/pangocairo.h>
+#include "frame.h"
+
struct presentation;
typedef struct _scinterp SCInterpreter;
typedef struct _sccallbacklist SCCallbackList;
diff --git a/src/sc_parse.c b/src/sc_parse.c
index 4aab2af..89253f6 100644
--- a/src/sc_parse.c
+++ b/src/sc_parse.c
@@ -43,9 +43,6 @@ struct _scblock
SCBlock *next;
SCBlock *prev;
SCBlock *child;
- SCBlock *macro_child;
-
- struct frame *fr;
};
@@ -56,8 +53,6 @@ SCBlock *sc_block_new()
bl = calloc(1, sizeof(SCBlock));
if ( bl == NULL ) return NULL;
- bl->macro_child = NULL;
-
return bl;
}
@@ -74,18 +69,6 @@ SCBlock *sc_block_child(const SCBlock *bl)
}
-SCBlock *sc_block_macro_child(const SCBlock *bl)
-{
- return bl->macro_child;
-}
-
-
-void sc_block_set_macro_child(SCBlock *bl, SCBlock *mchild)
-{
- bl->macro_child = mchild;
-}
-
-
const char *sc_block_name(const SCBlock *bl)
{
return bl->name;
@@ -104,18 +87,6 @@ const char *sc_block_contents(const SCBlock *bl)
}
-struct frame *sc_block_frame(const SCBlock *bl)
-{
- return bl->fr;
-}
-
-
-void sc_block_set_frame(SCBlock *bl, struct frame *fr)
-{
- bl->fr = fr;
-}
-
-
/* Insert a new block after "bl". "name", "options" and "contents"
* will not be copied. Returns the block just created, or NULL on error.
* If *blfp points to NULL, it will updated to point at the new block. */
@@ -335,7 +306,6 @@ void show_sc_block(const SCBlock *bl, const char *prefix)
if ( bl->name != NULL ) printf("\\%s ", bl->name);
if ( bl->options != NULL ) printf("[%s] ", bl->options);
if ( bl->contents != NULL ) printf("{%s} ", bl->contents);
- if ( bl->fr != NULL ) printf("-> frame %p", bl->fr);
printf("\n");
if ( bl->child != NULL ) {
diff --git a/src/sc_parse.h b/src/sc_parse.h
index bf1960d..b1b59dd 100644
--- a/src/sc_parse.h
+++ b/src/sc_parse.h
@@ -39,13 +39,10 @@ extern SCBlock *sc_block_copy(const SCBlock *bl);
extern SCBlock *sc_block_next(const SCBlock *bl);
extern SCBlock *sc_block_child(const SCBlock *bl);
-extern SCBlock *sc_block_macro_child(const SCBlock *bl);
extern const char *sc_block_name(const SCBlock *bl);
extern const char *sc_block_options(const SCBlock *bl);
extern const char *sc_block_contents(const SCBlock *bl);
-extern void sc_block_set_macro_child(SCBlock *bl, SCBlock *mchild);
-
extern SCBlock *sc_block_append(SCBlock *bl,
char *name, char *opt, char *contents,
SCBlock **blfp);
@@ -61,9 +58,6 @@ extern SCBlock *sc_block_insert_after(SCBlock *afterme,
extern void sc_block_delete(SCBlock *top, SCBlock *deleteme);
-extern struct frame *sc_block_frame(const SCBlock *bl);
-extern void sc_block_set_frame(SCBlock *bl, struct frame *fr);
-
extern SCBlock *find_last_child(SCBlock *bl);