diff options
author | Thomas White <taw@bitwiz.org.uk> | 2011-11-05 22:02:54 +0100 |
---|---|---|
committer | Thomas White <taw@bitwiz.org.uk> | 2011-11-05 22:02:54 +0100 |
commit | 6f29edb7b7ea789bc4bde1ee3237cca96c271202 (patch) | |
tree | 6ed2b9e0c20d1392c3c3ce0224818def5568f198 /src/presentation.c | |
parent | dbff61bb3053e4fe30397b48a32ec415119bcf66 (diff) |
Loading mostly works
Diffstat (limited to 'src/presentation.c')
-rw-r--r-- | src/presentation.c | 76 |
1 files changed, 57 insertions, 19 deletions
diff --git a/src/presentation.c b/src/presentation.c index 2dacde2..75b76d0 100644 --- a/src/presentation.c +++ b/src/presentation.c @@ -33,38 +33,28 @@ #include "slide_render.h" #include "objects.h" #include "stylesheet.h" +#include "tool_select.h" +#include "tool_text.h" +#include "tool_image.h" -struct slide *add_slide(struct presentation *p, int pos) +int insert_slide(struct presentation *p, struct slide *new, int pos) { struct slide **try; - struct slide *new; - int i; - - new = calloc(1, sizeof(struct slide)); - if ( new == NULL ) return NULL; - - /* No objects to start with */ - new->num_objects = 0; - new->objects = NULL; - - p->completely_empty = 0; - new->parent = p; - - new->rendered_edit = NULL; - new->rendered_proj = NULL; - new->rendered_thumb = NULL; try = realloc(p->slides, (1+p->num_slides)*sizeof(struct slide *)); if ( try == NULL ) { free(new); - return NULL; + return 1; } p->slides = try; + p->completely_empty = 0; /* Insert into list. Yuk yuk yuk etc. */ if ( (p->num_slides>1) && (pos<p->num_slides-1) ) { + int i; + for ( i=p->num_slides; i>pos+1; i-- ) { p->slides[i] = p->slides[i-1]; } @@ -79,12 +69,55 @@ struct slide *add_slide(struct presentation *p, int pos) p->slides[pos] = new; } + new->parent = p; p->num_slides++; + return 0; +} + + +struct slide *new_slide() +{ + struct slide *new; + + new = calloc(1, sizeof(struct slide)); + if ( new == NULL ) return NULL; + + /* No objects to start with */ + new->num_objects = 0; + new->objects = NULL; + + new->rendered_edit = NULL; + new->rendered_proj = NULL; + new->rendered_thumb = NULL; + return new; } +void free_slide(struct slide *s) +{ + int i; + + for ( i=0; i<s->num_objects; i++ ) { + delete_object(s->objects[i]); + } + + free(s); +} + + +struct slide *add_slide(struct presentation *p, int pos) +{ + struct slide *s = new_slide(); + if ( insert_slide(p, s, pos) ) { + free_slide(s); + return NULL; + } + return s; +} + + int add_object_to_slide(struct slide *s, struct object *o) { struct object **try; @@ -229,7 +262,7 @@ struct presentation *new_presentation() /* Add one blank slide and view it */ new->num_slides = 0; new->slides = NULL; - new->cur_edit_slide = add_slide(new, 0); + new->cur_edit_slide = NULL; new->cur_proj_slide = NULL; new->editing_object = NULL; @@ -240,5 +273,10 @@ struct presentation *new_presentation() default_stylesheet(new->ss); new->image_store = image_store_new(); + new->select_tool = initialise_select_tool(); + new->text_tool = initialise_text_tool(); + new->image_tool = initialise_image_tool(); + new->cur_tool = new->select_tool; + return new; } |