From c84cdfa1e3d3060e64c6d1d7b332a13024c6da9e Mon Sep 17 00:00:00 2001 From: Thomas White Date: Fri, 24 Jan 2020 14:58:45 +0100 Subject: Insert bullet points --- libstorycode/gtk/gtknarrativeview.c | 56 ++++++++++++++++++++++++++++++------- libstorycode/gtk/gtknarrativeview.h | 1 + 2 files changed, 47 insertions(+), 10 deletions(-) (limited to 'libstorycode') diff --git a/libstorycode/gtk/gtknarrativeview.c b/libstorycode/gtk/gtknarrativeview.c index 24e4949..11d17c0 100644 --- a/libstorycode/gtk/gtknarrativeview.c +++ b/libstorycode/gtk/gtknarrativeview.c @@ -1304,27 +1304,35 @@ void gtk_narrative_view_set_cursor_para(GtkNarrativeView *e, signed int pos) } -void gtk_narrative_view_add_slide_at_cursor(GtkNarrativeView *e) +int maybe_split_para(GtkNarrativeView *e) { - Slide *s; - - s = slide_new(); - if ( s == NULL ) return; - if ( narrative_item_is_text(e->n, e->cpos.para) ) { size_t off = narrative_pos_trail_to_offset(e->n, e->cpos.para, e->cpos.pos, e->cpos.trail); if ( (off > 0) && (off < gtknv_end_offset_of_para(e->n, e->cpos.para)) ) { narrative_split_item(e->n, e->cpos.para, off); - narrative_insert_slide(e->n, s, e->cpos.para+1); + return e->cpos.para+1; } else if ( off == 0 ) { - narrative_insert_slide(e->n, s, e->cpos.para); + return e->cpos.para; } else { - narrative_insert_slide(e->n, s, e->cpos.para+1); + return e->cpos.para+1; } } else { - narrative_insert_slide(e->n, s, e->cpos.para+1); + return e->cpos.para+1; } +} + + +void gtk_narrative_view_add_slide_at_cursor(GtkNarrativeView *e) +{ + Slide *s; + int insert_pos; + + s = slide_new(); + if ( s == NULL ) return; + + insert_pos = maybe_split_para(e); + narrative_insert_slide(e->n, insert_pos, s); rewrap_range(e, e->cpos.para, e->cpos.para+2); e->cpos.para++; @@ -1337,6 +1345,34 @@ void gtk_narrative_view_add_slide_at_cursor(GtkNarrativeView *e) } +void gtk_narrative_view_add_bp_at_cursor(GtkNarrativeView *e) +{ + int insert_pos; + struct text_run *runs; + + runs = malloc(sizeof(struct text_run)); + if ( runs == NULL ) return; + + runs[0].text = strdup(""); + runs[0].type = TEXT_RUN_NORMAL; + if ( runs[0].text == NULL ) { + free(runs); + return; + } + + insert_pos = maybe_split_para(e); + narrative_insert_bp(e->n, insert_pos, runs, 1); + + rewrap_range(e, e->cpos.para, e->cpos.para+2); + e->cpos.para++; + e->cpos.pos = 0; + e->cpos.trail = 0; + update_size(e); + check_cursor_visible(e); + gtknv_emit_change_sig(e); + gtknv_redraw(e); +} + void gtk_narrative_view_redraw(GtkNarrativeView *e) { e->rewrap_needed = 1; diff --git a/libstorycode/gtk/gtknarrativeview.h b/libstorycode/gtk/gtknarrativeview.h index 2a2b0e9..73cc19e 100644 --- a/libstorycode/gtk/gtknarrativeview.h +++ b/libstorycode/gtk/gtknarrativeview.h @@ -113,6 +113,7 @@ extern void gtk_narrative_view_set_para_highlight(GtkNarrativeView *e, int para_ extern int gtk_narrative_view_get_cursor_para(GtkNarrativeView *e); extern void gtk_narrative_view_set_cursor_para(GtkNarrativeView *e, signed int pos); extern void gtk_narrative_view_add_slide_at_cursor(GtkNarrativeView *e); +extern void gtk_narrative_view_add_bp_at_cursor(GtkNarrativeView *e); extern void gtk_narrative_view_redraw(GtkNarrativeView *e); -- cgit v1.2.3