aboutsummaryrefslogtreecommitdiff
path: root/src-old/frame.h
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.me.uk>2019-02-19 18:17:56 +0100
committerThomas White <taw@bitwiz.me.uk>2019-02-19 18:17:56 +0100
commit24c20239779d0ec616adde651c594c7bf08d58c7 (patch)
treec1900bda6b2c5f58a66d4b8d89f4a946a24465dc /src-old/frame.h
parent9fbe4d66565e6ab11c5022bcfe5ed0ddfb91dc7e (diff)
WIP
Diffstat (limited to 'src-old/frame.h')
-rw-r--r--src-old/frame.h194
1 files changed, 194 insertions, 0 deletions
diff --git a/src-old/frame.h b/src-old/frame.h
new file mode 100644
index 0000000..d0525f8
--- /dev/null
+++ b/src-old/frame.h
@@ -0,0 +1,194 @@
+/*
+ * frame.h
+ *
+ * Copyright © 2013-2018 Thomas White <taw@bitwiz.org.uk>
+ *
+ * This file is part of Colloquium.
+ *
+ * Colloquium is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef FRAME_H
+#define FRAME_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <pango/pango.h>
+#include <cairo.h>
+
+
+typedef enum
+{
+ GRAD_NONE,
+ GRAD_HORIZ,
+ GRAD_VERT
+} GradientType;
+
+enum para_type
+{
+ PARA_TYPE_TEXT,
+ PARA_TYPE_IMAGE,
+ PARA_TYPE_CALLBACK
+};
+
+typedef struct _paragraph Paragraph;
+
+#include "sc_parse.h"
+#include "sc_interp.h"
+#include "imagestore.h"
+
+
+struct edit_pos
+{
+ int para; /* Paragraph number */
+ size_t pos; /* Byte position within paragraph
+ * Yes, really. See pango_layout_xy_to_index */
+ int trail;
+};
+
+
+struct frame
+{
+ struct frame **children;
+ int num_children;
+ int max_children;
+
+ SCBlock *scblocks;
+
+ Paragraph **paras;
+ int n_paras;
+ int max_paras;
+
+ /* The font which will be used by default for this frame */
+ PangoFontDescription *fontdesc;
+ double col[4];
+
+ /* The rectangle allocated to this frame, determined by the renderer */
+ double x;
+ double y;
+ double w;
+ double h;
+
+ double pad_t;
+ double pad_b;
+ double pad_l;
+ double pad_r;
+
+ /* Background properties for this frame */
+ double bgcol[4];
+ double bgcol2[4];
+ GradientType grad;
+
+ /* True if this frame should be deleted on the next mouse click */
+ int empty;
+
+ /* True if the aspect ratio of this frame should be maintained */
+ int is_image;
+
+ /* True if this frame can be resized and moved */
+ int resizable;
+};
+
+
+extern struct frame *frame_new(void);
+extern void frame_free(struct frame *fr);
+extern struct frame *add_subframe(struct frame *fr);
+extern struct frame *find_frame_with_scblocks(struct frame *top,
+ SCBlock *scblocks);
+
+extern double total_height(struct frame *fr);
+
+extern Paragraph *last_para(struct frame *fr);
+extern void show_para(Paragraph *p);
+extern void set_para_spacing(Paragraph *para, float space[4]);
+extern void set_para_alignment(Paragraph *para, PangoAlignment align);
+
+extern double paragraph_height(Paragraph *para);
+extern void render_paragraph(cairo_t *cr, Paragraph *para, ImageStore *is);
+
+extern void set_newline_at_end(Paragraph *para, SCBlock *bl);
+extern void show_edit_pos(struct edit_pos a);
+
+extern void add_run(Paragraph *para, SCBlock *scblock,
+ PangoFontDescription *fdesc, double col[4],
+ const char *real_text);
+
+extern Paragraph *insert_paragraph(struct frame *fr, int pos);
+
+extern Paragraph *add_callback_para(struct frame *fr, SCBlock *scblock,
+ double w, double h,
+ SCCallbackDrawFunc draw_func,
+ SCCallbackClickFunc click_func, void *bvp,
+ void *vp);
+
+extern void add_image_para(struct frame *fr, SCBlock *scblock,
+ const char *filename,
+ ImageStore *is, double w, double h, int editable);
+
+extern void wrap_paragraph(Paragraph *para, PangoContext *pc, double w,
+ size_t sel_start, size_t sel_end);
+
+extern int find_cursor(struct frame *fr, double x, double y,
+ struct edit_pos *pos);
+
+extern void sort_positions(struct edit_pos *a, struct edit_pos *b);
+
+extern void ensure_run(struct frame *fr, struct edit_pos cpos);
+
+extern int positions_equal(struct edit_pos a, struct edit_pos b);
+
+extern int get_para_highlight(struct frame *fr, int cursor_para,
+ double *cx, double *cy, double *cw, double *ch);
+
+extern int position_editable(struct frame *fr, struct edit_pos cp);
+
+extern int get_cursor_pos(struct frame *fr, int cursor_para, int cursor_pos,
+ double *cx, double *cy, double *ch);
+
+extern void cursor_moveh(struct frame *fr, struct edit_pos *cp, signed int dir);
+
+extern void check_callback_click(struct frame *fr, int para);
+
+extern size_t pos_trail_to_offset(Paragraph *para, size_t offs, int trail);
+
+extern void insert_text_in_paragraph(Paragraph *para, size_t offs,
+ const char *t);
+
+extern void delete_text_from_frame(struct frame *fr, struct edit_pos p1, struct edit_pos p2,
+ double wrap_w);
+
+extern SCBlock *split_paragraph(struct frame *fr, int pn, size_t pos,
+ PangoContext *pc);
+extern SCBlock *block_at_cursor(struct frame *fr, int para, size_t pos);
+
+extern void show_frame_hierarchy(struct frame *fr, const char *t);
+
+extern int get_sc_pos(struct frame *fr, int pn, size_t pos,
+ SCBlock **bl, size_t *ppos);
+
+extern void *get_para_bvp(Paragraph *para);
+
+extern Paragraph *create_paragraph(struct frame *fr, SCBlock *bl);
+
+extern enum para_type para_type(Paragraph *para);
+extern SCBlock *para_scblock(Paragraph *para);
+
+extern SCBlock *para_debug_get_newline_at_end(Paragraph *para);
+extern int para_debug_num_runs(Paragraph *para);
+extern int para_debug_run_info(Paragraph *para, int i, SCBlock **scblock);
+
+#endif /* FRAME_H */