AUI Framework  develop
Cross-platform base for C++ UI apps
Loading...
Searching...
No Matches
gtk_types.h
    1/*
    2 * AUI Framework - Declarative UI toolkit for modern C++20
    3 * Copyright (C) 2020-2025 Alex2772 and Contributors
    4 *
    5 * SPDX-License-Identifier: MPL-2.0
    6 *
    7 * This Source Code Form is subject to the terms of the Mozilla Public
    8 * License, v. 2.0. If a copy of the MPL was not distributed with this
    9 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
   10 */
   11
   12#pragma once
   13
   14#include <glib-object.h>
   15#include <gio/gio.h>
   16
   20namespace aui::gtk4_fake {
   21extern "C" {
   22enum GtkWidgetHelpType : int;
   23enum GtkWindowType : int;
   24enum GtkStateFlags : int;
   25enum GdkModifierType : int;
   26enum GtkIconLookupFlags : int;
   27enum GtkPageOrientation : int;
   28enum GtkTextDirection : int;
   29enum GtkSizeRequestMode : int;
   30enum GtkDirectionType : int;
   31
   32typedef enum { GSK_SCALING_FILTER_LINEAR, GSK_SCALING_FILTER_NEAREST, GSK_SCALING_FILTER_TRILINEAR } GskScalingFilter;
   33typedef enum { GTK_ORIENTATION_HORIZONTAL, GTK_ORIENTATION_VERTICAL } GtkOrientation;
   34
   35typedef enum
   36{
   37    GDK_SCROLL_UNIT_WHEEL,
   38    GDK_SCROLL_UNIT_SURFACE
   39} GdkScrollUnit;
   40
   41typedef enum {
   42    GSK_NOT_A_RENDER_NODE = 0,
   43    GSK_CONTAINER_NODE,
   44    GSK_CAIRO_NODE,
   45    GSK_COLOR_NODE,
   46    GSK_LINEAR_GRADIENT_NODE,
   47    GSK_REPEATING_LINEAR_GRADIENT_NODE,
   48    GSK_RADIAL_GRADIENT_NODE,
   49    GSK_REPEATING_RADIAL_GRADIENT_NODE,
   50    GSK_CONIC_GRADIENT_NODE,
   51    GSK_BORDER_NODE,
   52    GSK_TEXTURE_NODE,
   53    GSK_INSET_SHADOW_NODE,
   54    GSK_OUTSET_SHADOW_NODE,
   55    GSK_TRANSFORM_NODE,
   56    GSK_OPACITY_NODE,
   57    GSK_COLOR_MATRIX_NODE,
   58    GSK_REPEAT_NODE,
   59    GSK_CLIP_NODE,
   60    GSK_ROUNDED_CLIP_NODE,
   61    GSK_SHADOW_NODE,
   62    GSK_BLEND_NODE,
   63    GSK_CROSS_FADE_NODE,
   64    GSK_TEXT_NODE,
   65    GSK_BLUR_NODE,
   66    GSK_DEBUG_NODE,
   67    GSK_GL_SHADER_NODE,
   68    GSK_TEXTURE_SCALE_NODE,
   69    GSK_MASK_NODE,
   70    GSK_FILL_NODE,
   71    GSK_STROKE_NODE,
   72    GSK_SUBSURFACE_NODE,
   73} GskRenderNodeType;
   74
   75typedef enum {
   76    GDK_MEMORY_B8G8R8A8_PREMULTIPLIED,
   77    GDK_MEMORY_A8R8G8B8_PREMULTIPLIED,
   78    GDK_MEMORY_R8G8B8A8_PREMULTIPLIED,
   79    GDK_MEMORY_B8G8R8A8,
   80    GDK_MEMORY_A8R8G8B8,
   81    GDK_MEMORY_R8G8B8A8,
   82    GDK_MEMORY_A8B8G8R8,
   83    GDK_MEMORY_R8G8B8,
   84    GDK_MEMORY_B8G8R8,
   85    GDK_MEMORY_R16G16B16,
   86    GDK_MEMORY_R16G16B16A16_PREMULTIPLIED,
   87    GDK_MEMORY_R16G16B16A16,
   88    GDK_MEMORY_R16G16B16_FLOAT,
   89    GDK_MEMORY_R16G16B16A16_FLOAT_PREMULTIPLIED,
   90    GDK_MEMORY_R16G16B16A16_FLOAT,
   91    GDK_MEMORY_R32G32B32_FLOAT,
   92    GDK_MEMORY_R32G32B32A32_FLOAT_PREMULTIPLIED,
   93    GDK_MEMORY_R32G32B32A32_FLOAT,
   94    GDK_MEMORY_G8A8_PREMULTIPLIED,
   95    GDK_MEMORY_G8A8,
   96    GDK_MEMORY_G8,
   97    GDK_MEMORY_G16A16_PREMULTIPLIED,
   98    GDK_MEMORY_G16A16,
   99    GDK_MEMORY_G16,
  100    GDK_MEMORY_A8,
  101    GDK_MEMORY_A16,
  102    GDK_MEMORY_A16_FLOAT,
  103    GDK_MEMORY_A32_FLOAT,
  104    GDK_MEMORY_A8B8G8R8_PREMULTIPLIED,
  105    GDK_MEMORY_B8G8R8X8,
  106    GDK_MEMORY_X8R8G8B8,
  107    GDK_MEMORY_R8G8B8X8,
  108    GDK_MEMORY_X8B8G8R8,
  109
  110    GDK_MEMORY_N_FORMATS
  111} GdkMemoryFormat;
  112
  113typedef enum { GTK_UNIT_NONE, GTK_UNIT_POINTS, GTK_UNIT_INCH, GTK_UNIT_MM } GtkUnit;
  114
  115typedef enum {
  116    GTK_PRINT_PAGES_ALL,
  117    GTK_PRINT_PAGES_CURRENT,
  118    GTK_PRINT_PAGES_RANGES,
  119    GTK_PRINT_PAGES_SELECTION
  120} GtkPrintPages;
  121
  122typedef enum { GDK_GL_API_GL = 1 << 0, GDK_GL_API_GLES = 1 << 1 } GdkGLAPI;
  123
  124typedef enum {
  125    GTK_PRINT_CAPABILITY_PAGE_SET = 1 << 0,
  126    GTK_PRINT_CAPABILITY_COPIES = 1 << 1,
  127    GTK_PRINT_CAPABILITY_COLLATE = 1 << 2,
  128    GTK_PRINT_CAPABILITY_REVERSE = 1 << 3,
  129    GTK_PRINT_CAPABILITY_SCALE = 1 << 4,
  130    GTK_PRINT_CAPABILITY_GENERATE_PDF = 1 << 5,
  131    GTK_PRINT_CAPABILITY_GENERATE_PS = 1 << 6,
  132    GTK_PRINT_CAPABILITY_PREVIEW = 1 << 7,
  133    GTK_PRINT_CAPABILITY_NUMBER_UP = 1 << 8,
  134    GTK_PRINT_CAPABILITY_NUMBER_UP_LAYOUT = 1 << 9
  135} GtkPrintCapabilities;
  136
  137typedef enum {
  138    GTK_SYSTEM_SETTING_DPI,
  139    GTK_SYSTEM_SETTING_FONT_NAME,
  140    GTK_SYSTEM_SETTING_FONT_CONFIG,
  141    GTK_SYSTEM_SETTING_DISPLAY,
  142    GTK_SYSTEM_SETTING_ICON_THEME
  143} GtkSystemSetting;
  144
  145typedef enum
  146{
  147    GDK_DELETE,
  148    GDK_MOTION_NOTIFY,
  149    GDK_BUTTON_PRESS,
  150    GDK_BUTTON_RELEASE,
  151    GDK_KEY_PRESS,
  152    GDK_KEY_RELEASE,
  153    GDK_ENTER_NOTIFY,
  154    GDK_LEAVE_NOTIFY,
  155    GDK_FOCUS_CHANGE,
  156    GDK_PROXIMITY_IN,
  157    GDK_PROXIMITY_OUT,
  158    GDK_DRAG_ENTER,
  159    GDK_DRAG_LEAVE,
  160    GDK_DRAG_MOTION,
  161    GDK_DROP_START,
  162    GDK_SCROLL,
  163    GDK_GRAB_BROKEN,
  164    GDK_TOUCH_BEGIN,
  165    GDK_TOUCH_UPDATE,
  166    GDK_TOUCH_END,
  167    GDK_TOUCH_CANCEL,
  168    GDK_TOUCHPAD_SWIPE,
  169    GDK_TOUCHPAD_PINCH,
  170    GDK_PAD_BUTTON_PRESS,
  171    GDK_PAD_BUTTON_RELEASE,
  172    GDK_PAD_RING,
  173    GDK_PAD_STRIP,
  174    GDK_PAD_GROUP_MODE,
  175    GDK_TOUCHPAD_HOLD,
  176    GDK_EVENT_LAST        /* helper variable for decls */
  177} GdkEventType;
  178
  179using GtkWidgetPath = struct _GtkWidgetPath;
  180using GtkContainer = struct _GtkContainer;
  181using GdkEventKey = struct _GdkEventKey;
  182using GdkWindow = struct _GdkWindow;
  183using GdkKeymap = struct _GdkKeymap;
  184using GdkGLTexture = struct _GdkGLTexture;
  185using GtkWidget = struct _GtkWidget {
  186    GInitiallyUnowned parent_instance;
  187
  188    /*< private >*/
  189
  190    void *priv;
  191};
  192using GtkApplication = struct _GtkApplication {
  193    GApplication parent_instance;
  194};
  195using GtkWindow = struct _GtkWindow {
  196    GtkWidget parent_instance;
  197};
  198using GtkApplicationWindow = struct _GtkApplicationWindow {
  199    GtkWindow parent_instance;
  200};
  201using GtkEventController = struct _GtkEventController;
  202using GtkEventControllerKey = struct _GtkEventControllerKey;
  203using GtkEventControllerLegacy = struct _GtkEventControllerLehacy;
  204using GtkBox = struct _GtkBox;
  205using GtkSnapshot = struct _GtkSnapshot;
  206using GtkIconInfo = struct _GtkIconInfo;
  207using GdkScreen = struct _GdkScreen;
  208using GdkColor = struct _GdkColor;
  209using GdkEvent = struct _GdkEvent;
  210using GdkKeymapKey = struct _GdkKeymapKey;
  211using GdkTexture = struct _GdkTexture;
  212using GdkGLTextureBuilder = struct _GdkGLTextureBuilder;
  213using GtkSettings = struct _GtkSettings;
  214using GtkStyleContext = struct _GtkStyleContext;
  215using GskRenderNode = struct _GskRenderNode;
  216using GtkIMContext = struct _GtkIMContext;
  217using GtkNative = struct _GtkNative;
  218using GdkDevice = struct _GdkDevice;
  219using GdkSurface = struct _GdkSurface;
  220using GtkFileChooser = struct _GtkFileChooser;
  221using GtkIconTheme = struct _GtkIconTheme;
  222using GdkDisplay = struct _GdkDisplay;
  223using GdkPixbuf = struct _GdkPixbuf;
  224using GtkTreeModel = struct _GtkTreeModel;
  225using GtkCssProvider = struct _GtkCssProvider;
  226using GtkStyleProvider = struct _GtkStyleProvider;
  227using GtkImage = struct _GtkImage;
  228using GtkFileFilter = struct _GtkFileFilter;
  229using GtkPrinter = struct _GtkPrinter;
  230using GtkPrintBackend = struct _GtkPrintBackend;
  231using GdkRectangle = struct _GdkRectangle;
  232using GtkIMMulticontext = struct _GtkIMMulticontext;
  233using GtkPageSetup = struct _GtkPageSetup;
  234using GtkPaperSize = struct _GtkPaperSize;
  235using GtkPrintJob = struct _GtkPrintJob;
  236using GtkPrintSettings = struct _GtkPrintSettings;
  237using GtkPageRange = struct _GtkPageRange;
  238using GtkPrintUnixDialog = struct _GtkPrintUnixDialog;
  239using PangoContext = struct _PangoContext;
  240using GtkRequisition = struct _GtkRequisition;
  241using GdkPaintable = struct _GdkPaintable;
  242using GdkSnapshot = struct _GdkSnapshot;
  243using GdkSeat = struct _GdkSeat;
  244using GdkToplevel = struct _GdkToplevel;
  245using GdkMonitor = struct _GdkMonitor;
  246using GtkTooltip = struct _GtkTooltip;
  247using GtkAlertDialog = struct _GtkAlertDialog;
  248using GtkCssStyleChange = struct _GtkCssStyleChange;
  249using GtkWidgetClassPrivate = struct _GtkWidgetClassPrivate;
  250
  251using graphene_point_t = struct _graphene_point_t {
  252    float x;
  253    float y;
  254};
  255
  256using graphene_size_t = struct _graphene_size_t {
  257    float width;
  258    float height;
  259};
  260
  261using graphene_rect_t = struct _graphene_rect_t {
  262    graphene_point_t origin;
  263    graphene_size_t size;
  264};
  265
  266using GdkGLContext = struct _GdkGLContext;
  267using GtkPrinterFunc = void *;
  268using PangoAttrList = void *;
  269using GtkPrintJobCompleteFunc = void *;
  270using GdkEventFunc = void (*)(GdkEvent *event, gpointer data);
  271
  272using cairo_t = struct _cairo;
  273using cairo_surface_t = struct _cairo_surface;
  274
  276    GdkEventType type;
  277    GdkWindow *window;
  278    gint8 send_event;
  279    guint32 time;
  280    guint state;
  281    guint keyval;
  282    gint length;
  283    gchar *string;
  284    guint16 hardware_keycode;
  285    guint8 group;
  286    guint is_modifier : 1;
  287};
  288
  290    guint32 pixel;
  291    guint16 red;
  292    guint16 green;
  293    guint16 blue;
  294};
  295
  296// Not defined in GTK.
  297constexpr int GSK_RENDER_NODE_MAX_VALUE = GSK_SUBSURFACE_NODE;
  298
  299constexpr int GTK_ICON_LOOKUP_USE_BUILTIN = 1 << 2;
  300constexpr int GTK_ICON_LOOKUP_GENERIC_FALLBACK = 1 << 3;
  301constexpr int GTK_ICON_LOOKUP_FORCE_SIZE = 1 << 4;
  302
  303constexpr auto GTK_WINDOW_TOPLEVEL = static_cast<GtkWindowType>(0);
  304
  305using GtkWidgetClass = struct _GtkWidgetClass {
  306    GInitiallyUnownedClass parent_class;
  307
  308    /*< public >*/
  309
  310    /* basics */
  311    void (*show)(GtkWidget *widget);
  312    void (*hide)(GtkWidget *widget);
  313    void (*map)(GtkWidget *widget);
  314    void (*unmap)(GtkWidget *widget);
  315    void (*realize)(GtkWidget *widget);
  316    void (*unrealize)(GtkWidget *widget);
  317    void (*root)(GtkWidget *widget);
  318    void (*unroot)(GtkWidget *widget);
  319    void (*size_allocate)(GtkWidget *widget, int width, int height, int baseline);
  320    void (*state_flags_changed)(GtkWidget *widget, GtkStateFlags previous_state_flags);
  321    void (*direction_changed)(GtkWidget *widget, GtkTextDirection previous_direction);
  322
  323    /* size requests */
  324    GtkSizeRequestMode (*get_request_mode)(GtkWidget *widget);
  325    void (*measure)(
  326        GtkWidget *widget, GtkOrientation orientation, int for_size, int *minimum, int *natural, int *minimum_baseline,
  327        int *natural_baseline);
  328
  329    /* Mnemonics */
  330    gboolean (*mnemonic_activate)(GtkWidget *widget, gboolean group_cycling);
  331
  332    /* explicit focus */
  333    gboolean (*grab_focus)(GtkWidget *widget);
  334    gboolean (*focus)(GtkWidget *widget, GtkDirectionType direction);
  335    void (*set_focus_child)(GtkWidget *widget, GtkWidget *child);
  336
  337    /* keyboard navigation */
  338    void (*move_focus)(GtkWidget *widget, GtkDirectionType direction);
  339    gboolean (*keynav_failed)(GtkWidget *widget, GtkDirectionType direction);
  340
  341    gboolean (*query_tooltip)(GtkWidget *widget, int x, int y, gboolean keyboard_tooltip, GtkTooltip *tooltip);
  342
  343    void (*compute_expand)(GtkWidget *widget, gboolean *hexpand_p, gboolean *vexpand_p);
  344
  345    void (*css_changed)(GtkWidget *widget, GtkCssStyleChange *change);
  346
  347    void (*system_setting_changed)(GtkWidget *widget, GtkSystemSetting settings);
  348
  349    void (*snapshot)(GtkWidget *widget, GtkSnapshot *snapshot);
  350
  351    gboolean (*contains)(GtkWidget *widget, double x, double y);
  352
  353    /*< private >*/
  354
  355    GtkWidgetClassPrivate *priv;
  356
  357    gpointer padding[8];
  358};
  359
  360#ifndef GTK_TYPE_WIDGET
  361#define GTK_TYPE_WIDGET            (gtk_widget_get_type())
  362#define GTK_WIDGET(widget)         (G_TYPE_CHECK_INSTANCE_CAST((widget), GTK_TYPE_WIDGET, GtkWidget))
  363#define GTK_WIDGET_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_WIDGET, GtkWidgetClass))
  364#define GTK_IS_WIDGET(widget)      (G_TYPE_CHECK_INSTANCE_TYPE((widget), GTK_TYPE_WIDGET))
  365#define GTK_IS_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_WIDGET))
  366#define GTK_WIDGET_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_WIDGET, GtkWidgetClass))
  367
  368#define GDK_TYPE_GL_TEXTURE    (gdk_gl_texture_get_type())
  369#define GDK_GL_TEXTURE(obj)    (G_TYPE_CHECK_INSTANCE_CAST((obj), GDK_TYPE_GL_TEXTURE, GdkGLTexture))
  370#define GDK_IS_GL_TEXTURE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GDK_TYPE_GL_TEXTURE))
  371
  372#define GTK_TYPE_APPLICATION            (gtk_application_get_type())
  373#define GTK_APPLICATION(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_APPLICATION, GtkApplication))
  374#define GTK_APPLICATION_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_APPLICATION, GtkApplicationClass))
  375#define GTK_IS_APPLICATION(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_APPLICATION))
  376#define GTK_IS_APPLICATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_APPLICATION))
  377#define GTK_APPLICATION_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_APPLICATION, GtkApplicationClass))
  378
  379#define GTK_TYPE_WINDOW            (gtk_window_get_type())
  380#define GTK_WINDOW(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_WINDOW, GtkWindow))
  381#define GTK_WINDOW_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_WINDOW, GtkWindowClass))
  382#define GTK_IS_WINDOW(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_WINDOW))
  383#define GTK_IS_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_WINDOW))
  384#define GTK_WINDOW_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_WINDOW, GtkWindowClass))
  385
  386#define GTK_TYPE_BOX            (gtk_box_get_type())
  387#define GTK_BOX(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_BOX, GtkBox))
  388#define GTK_BOX_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass), GTK_TYPE_BOX, GtkBoxClass))
  389#define GTK_IS_BOX(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_BOX))
  390#define GTK_IS_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GTK_TYPE_BOX))
  391#define GTK_BOX_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_BOX, GtkBoxClass))
  392
  393#define GTK_TYPE_EVENT_CONTROLLER_KEY (gtk_event_controller_key_get_type())
  394#define GTK_EVENT_CONTROLLER_KEY(o) \
  395    (G_TYPE_CHECK_INSTANCE_CAST((o), GTK_TYPE_EVENT_CONTROLLER_KEY, GtkEventControllerKey))
  396#define GTK_EVENT_CONTROLLER_KEY_CLASS(k) \
  397    (G_TYPE_CHECK_CLASS_CAST((k), GTK_TYPE_EVENT_CONTROLLER_KEY, GtkEventControllerKeyClass))
  398#define GTK_IS_EVENT_CONTROLLER_KEY(o)       (G_TYPE_CHECK_INSTANCE_TYPE((o), GTK_TYPE_EVENT_CONTROLLER_KEY))
  399#define GTK_IS_EVENT_CONTROLLER_KEY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), GTK_TYPE_EVENT_CONTROLLER_KEY))
  400#define GTK_EVENT_CONTROLLER_KEY_GET_CLASS(o) \
  401    (G_TYPE_INSTANCE_GET_CLASS((o), GTK_TYPE_EVENT_CONTROLLER_KEY, GtkEventControllerKeyClass))
  402
  403#endif
  404}
  405}   // namespace aui::gtk4_fake
Provides a fake implementation of GTK4 types and constants, so we wont depend on the gtk4 dev package...
Definition gtk_functions.h:16
Definition gtk_types.h:289
Definition gtk_types.h:275