summaryrefslogtreecommitdiff
path: root/src/viewer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/viewer.h')
-rw-r--r--src/viewer.h42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/viewer.h b/src/viewer.h
new file mode 100644
index 0000000..81bac79
--- /dev/null
+++ b/src/viewer.h
@@ -0,0 +1,42 @@
+#ifndef GGAZE_VIEWER_H
+#define GGAZE_VIEWER_H
+
+/*:*
+ * ggaze — large single-image viewer
+ *
+ * GgazeViewer : GtkWidget is the custom large-view canvas (decision #31, not
+ * GtkPicture). It owns a GdkTexture plus zoom/pan/fit state and draws via GTK4
+ * render nodes. Zoom is cursor-centered (mouse/pinch) or window-centered
+ * (keys); panning clamps so the image can't drift off-screen. See
+ * docs/ui-and-interactions.md "Zoom behavior" and docs/architecture.md
+ * "Responsibilities / viewer".
+ *
+ * Copyright (c) 2026 ggaze contributors
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *:*/
+
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define GGAZE_TYPE_VIEWER (ggaze_viewer_get_type())
+G_DECLARE_FINAL_TYPE(GgazeViewer, ggaze_viewer, GGAZE, VIEWER, GtkWidget)
+
+GtkWidget *ggaze_viewer_new(void);
+
+/* Take p_texture (refs it; the caller still owns its own ref and should unref
+ * when done). Resets to fit-to-window, clears pan. NULL clears the display. */
+void ggaze_viewer_set_texture(GgazeViewer *p_viewer, GdkTexture *p_texture);
+GdkTexture *ggaze_viewer_get_texture(GgazeViewer *p_viewer); /* (transfer none) */
+
+/* Zoom + pan actions (also reachable via the on-widget controllers). */
+void ggaze_viewer_zoom_in(GgazeViewer *p_viewer);
+void ggaze_viewer_zoom_out(GgazeViewer *p_viewer);
+void ggaze_viewer_toggle_fit_100(GgazeViewer *p_viewer);
+void ggaze_viewer_fit(GgazeViewer *p_viewer);
+void ggaze_viewer_pan(GgazeViewer *p_viewer, gdouble d_dx, gdouble d_dy);
+
+G_END_DECLS
+
+#endif /* GGAZE_VIEWER_H */ \ No newline at end of file