summaryrefslogtreecommitdiff
path: root/platform/gl/gl-app.h
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2018-02-14 15:10:29 +0100
committerRobin Watts <robin.watts@artifex.com>2018-06-22 16:48:46 +0100
commitbde703f83b83232f830426b45957b10e4e44043d (patch)
tree27da098843ec9e42879bc0a4fdce7d3ace81815f /platform/gl/gl-app.h
parenta313e64f9a1912e1c4a1102eaf345749ca8e26cb (diff)
downloadmupdf-bde703f83b83232f830426b45957b10e4e44043d.tar.xz
gl: Add layout packer and various widgets.
* Move window setup and swap buffer calls into ui_begin/end. * Rearrange source files. * Simplify grab logic: Make it more robust in the face of user errors, such as setting ui.active to NULL explicitly. * Copy text to primary selection as well.
Diffstat (limited to 'platform/gl/gl-app.h')
-rw-r--r--platform/gl/gl-app.h105
1 files changed, 93 insertions, 12 deletions
diff --git a/platform/gl/gl-app.h b/platform/gl/gl-app.h
index 2aea2aed..6efb1ff7 100644
--- a/platform/gl/gl-app.h
+++ b/platform/gl/gl-app.h
@@ -6,6 +6,7 @@ int win_open_file(char *buf, int len);
#include "mupdf/fitz.h"
#include "mupdf/ucdn.h"
+#include "mupdf/pdf.h" /* for pdf specifics and forms */
#ifndef __APPLE__
#include <GL/freeglut.h>
@@ -13,7 +14,7 @@ int win_open_file(char *buf, int len);
#include <GLUT/glut.h>
#endif
-extern fz_context *ctx;
+/* UI */
enum
{
@@ -55,33 +56,62 @@ enum
KEY_F12,
};
+enum side { ALL, T, R, B, L };
+enum fill { NONE = 0, X = 1, Y = 2, BOTH = 3 };
+enum anchor { CENTER, N, NE, E, SE, S, SW, W, NW };
+
+struct layout
+{
+ enum side side;
+ enum fill fill;
+ enum anchor anchor;
+ int padx, pady;
+};
+
struct ui
{
+ int window_w, window_h;
+
int x, y;
- int down, middle, right;
+ int down, down_x, down_y;
+ int middle, middle_x, middle_y;
+ int right, right_x, right_y;
+
int scroll_x, scroll_y;
int key, mod, plain;
- void *hot, *active, *focus;
+ int grab_down, grab_middle, grab_right;
+ const void *hot, *active, *focus;
int fontsize;
int baseline;
int lineheight;
+
+ struct layout *layout;
+ fz_irect *cavity;
+ struct layout layout_stack[32];
+ fz_irect cavity_stack[32];
};
extern struct ui ui;
+void ui_init(int w, int h, const char *title);
+void ui_quit(void);
+void ui_invalidate(void);
+void ui_finish(void);
+
void ui_set_clipboard(const char *buf);
const char *ui_get_clipboard(void);
-void ui_init_fonts(fz_context *ctx, float pixelsize);
-void ui_finish_fonts(fz_context *ctx);
-float ui_measure_character(fz_context *ctx, int ucs);
-void ui_begin_text(fz_context *ctx);
-float ui_draw_character(fz_context *ctx, int ucs, float x, float y);
-void ui_end_text(fz_context *ctx);
-float ui_draw_string(fz_context *ctx, float x, float y, const char *str);
-float ui_measure_string(fz_context *ctx, char *str);
+void ui_init_fonts(float pixelsize);
+void ui_finish_fonts(void);
+float ui_measure_character(int ucs);
+void ui_begin_text(void);
+float ui_draw_character(int ucs, float x, float y);
+void ui_end_text(void);
+
+float ui_draw_string(float x, float y, const char *str);
+float ui_measure_string(const char *str);
struct texture
{
@@ -90,12 +120,63 @@ struct texture
float s, t;
};
+void ui_texture_from_pixmap(struct texture *tex, fz_pixmap *pix);
void ui_draw_image(struct texture *tex, float x, float y);
+enum
+{
+ UI_INPUT_CANCEL = -1,
+ UI_INPUT_ACCEPT = 1,
+ UI_INPUT_CONTINUE = 0,
+};
+
struct input
{
char text[256];
char *end, *p, *q;
};
-int ui_input(int x0, int y0, int x1, int y1, struct input *input);
+struct list
+{
+ fz_irect area;
+ int scroll_y;
+ int item_y;
+};
+
+void ui_begin(void);
+void ui_end(void);
+
+int ui_mouse_inside(fz_irect *area);
+
+void ui_layout(enum side side, enum fill fill, enum anchor anchor, int padx, int pady);
+fz_irect ui_pack_layout(int slave_w, int slave_h, enum side side, enum fill fill, enum anchor anchor, int padx, int pady);
+fz_irect ui_pack(int slave_w, int slave_h);
+void ui_pack_push(fz_irect cavity);
+void ui_pack_pop(void);
+
+void ui_panel_begin(int w, int h, int opaque);
+void ui_panel_end(void);
+
+void ui_spacer(void);
+void ui_label(const char *fmt, ...);
+int ui_button(const char *label);
+void ui_checkbox(const char *label, int *value);
+void ui_slider(float *value, float min, float max, int width);
+
+void ui_input_init(struct input *input, const char *text);
+int ui_input(struct input *input, int width);
+void ui_scrollbar(int x0, int y0, int x1, int y1, int *value, int page_size, int max);
+
+void ui_list_begin(struct list *list, int count, int req_w, int req_h);
+int ui_list_item(struct list *list, void *id, int indent, const char *label, int selected);
+void ui_list_end(struct list *list);
+
+/* App */
+
+extern fz_context *ctx;
+extern pdf_document *pdf;
+extern pdf_page *page;
+extern fz_matrix page_ctm, page_inv_ctm;
+extern int page_x_ofs, page_y_ofs;
+
+void run_main_loop(void);