mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-14 12:41:07 +00:00
220 lines
6.0 KiB
Plaintext
220 lines
6.0 KiB
Plaintext
|
Dir structure for ports
|
||
|
=======================
|
||
|
|
||
|
The directory structure here is:
|
||
|
|
||
|
gdk/
|
||
|
gdk/x11
|
||
|
gdk/win32
|
||
|
...
|
||
|
|
||
|
The gdk/ directory directly contains all public
|
||
|
header files (that are not specific to one
|
||
|
windowing system).
|
||
|
|
||
|
There, in general should be no system dependency
|
||
|
|
||
|
For each set of functionality, there are the following
|
||
|
files:
|
||
|
|
||
|
gdkwindow.h: public header file
|
||
|
gdkwindow.c: common implementation
|
||
|
x11/gdkwindow.i: functionality specific to X11
|
||
|
win32/gdkwindow.i: functionality specific to win32
|
||
|
|
||
|
The gdkwindow.c file looks like:
|
||
|
|
||
|
====
|
||
|
#include "gdkwindow.h"
|
||
|
|
||
|
#ifdef GDK_WINDOWING_X11
|
||
|
#include "x11/gdkwindow.i"
|
||
|
#elif defined(GDK_WINDOW_WIN32)
|
||
|
#include "win32/gdkwindow.i"
|
||
|
fo#endif
|
||
|
|
||
|
[ generic implementation bits ]
|
||
|
====
|
||
|
|
||
|
x11/gdkwindow.i should only assume that gdkwindow.h has been
|
||
|
included and included all other dependencies explicitely.
|
||
|
|
||
|
The x11/ directory will contain:
|
||
|
|
||
|
.i files
|
||
|
.c files specific to X
|
||
|
.h files specific to X
|
||
|
|
||
|
And a Makefile.am that takes care of distributing the
|
||
|
files in the directory, and also for building any
|
||
|
X-specific utilities. (Such as the gxid daemon).
|
||
|
|
||
|
|
||
|
Virtualization
|
||
|
==============
|
||
|
|
||
|
The concept of virtualization is that calls to draw
|
||
|
on a drawable are dispatched through a function table.
|
||
|
This potentially allows for:
|
||
|
|
||
|
Postscript drawables
|
||
|
metafiles
|
||
|
|
||
|
It also provides a nice clean framework for multi-windowing
|
||
|
support - instead of reimplementing a whole bunch of function
|
||
|
calls, one provides an implementaiton for the vtables.
|
||
|
|
||
|
X works in this way internally - per-screen functions are
|
||
|
virtualized inside a screen structure, and drawing functions
|
||
|
are virtualized inside the GC structure.
|
||
|
|
||
|
For the virtualization of drawing, clearly GdkDrawable needs
|
||
|
to be virtualized. Beyond that, one has to decide on
|
||
|
a case-by-case basis whether a particular structure is
|
||
|
drawing-mode independent (like GdkRectangle) or not.
|
||
|
|
||
|
The most important GDK structures that are involved drawing are:
|
||
|
|
||
|
GdkColor
|
||
|
GdkGC
|
||
|
GdkFont
|
||
|
GdkRegion
|
||
|
|
||
|
The whole font aspect of Gdk is going to get heavily
|
||
|
reworked with the introduction of "Pango".
|
||
|
GdkRegion almost certainly needs to be virtualized,
|
||
|
if you, way, want to do postscript drawables.
|
||
|
|
||
|
While doing so, the API of GdkRegion should be
|
||
|
changed so that the region operations take 3 parameters
|
||
|
instead of returning a newly created region.
|
||
|
|
||
|
|
||
|
Drawable operations:
|
||
|
destroy
|
||
|
create_gc
|
||
|
get_values
|
||
|
set_values
|
||
|
set_dashes
|
||
|
copy
|
||
|
|
||
|
GC Operations:
|
||
|
draw_point
|
||
|
draw_line
|
||
|
draw_rectangle
|
||
|
draw_arc
|
||
|
draw_polygon
|
||
|
draw_string
|
||
|
draw_text
|
||
|
draw_text_wc
|
||
|
draw_pixmap
|
||
|
draw_bitmap
|
||
|
draw_image
|
||
|
draw_points
|
||
|
draw_segments
|
||
|
draw_lines
|
||
|
|
||
|
|
||
|
Adding multi-screen, display support.
|
||
|
=====================================
|
||
|
|
||
|
The following functions need to have per-display variants:
|
||
|
|
||
|
void gdk_pointer_ungrab (guint32 time);
|
||
|
void gdk_keyboard_ungrab (guint32 time);
|
||
|
gint gdk_pointer_is_grabbed (void);
|
||
|
|
||
|
gint gdk_screen_width (void);
|
||
|
gint gdk_screen_height (void);
|
||
|
|
||
|
gint gdk_screen_width_mm (void);
|
||
|
gint gdk_screen_height_mm (void);
|
||
|
|
||
|
void gdk_beep (void);
|
||
|
|
||
|
void gdk_key_repeat_disable (void);
|
||
|
void gdk_key_repeat_restore (void);
|
||
|
|
||
|
gint gdk_visual_get_best_depth (void);
|
||
|
GdkVisualType gdk_visual_get_best_type (void);
|
||
|
GdkVisual* gdk_visual_get_system (void);
|
||
|
GdkVisual* gdk_visual_get_best (void);
|
||
|
GdkVisual* gdk_visual_get_best_with_depth (gint depth);
|
||
|
GdkVisual* gdk_visual_get_best_with_type (GdkVisualType visual_type);
|
||
|
GdkVisual* gdk_visual_get_best_with_both (gint depth,
|
||
|
GdkVisualType visual_type);
|
||
|
|
||
|
void gdk_query_depths (gint **depths,
|
||
|
gint *count);
|
||
|
void gdk_query_visual_types (GdkVisualType **visual_types,
|
||
|
gint *count);
|
||
|
|
||
|
GList* gdk_list_visuals (void);
|
||
|
|
||
|
void gdk_add_client_message_filter (GdkAtom message_type,
|
||
|
GdkFilterFunc func,
|
||
|
gpointer data);
|
||
|
|
||
|
guint32 gdk_drag_get_protocol (guint32 xid,
|
||
|
GdkDragProtocol *protocol);
|
||
|
|
||
|
GdkCursor* gdk_cursor_new (GdkCursorType cursor_type);
|
||
|
GdkCursor* gdk_cursor_new_from_pixmap (GdkPixmap *source,
|
||
|
GdkPixmap *mask,
|
||
|
GdkColor *fg,
|
||
|
GdkColor *bg,
|
||
|
gint x,
|
||
|
gint y);
|
||
|
GdkColormap* gdk_colormap_get_system (void);
|
||
|
gint gdk_colormap_get_system_size (void);
|
||
|
|
||
|
GdkFont* gdk_font_load (const gchar *font_name);
|
||
|
GdkFont* gdk_fontset_load (gchar *fontset_name);
|
||
|
|
||
|
gint gdk_selection_owner_set (GdkWindow *owner,
|
||
|
GdkAtom selection,
|
||
|
guint32 time,
|
||
|
gint send_event);
|
||
|
GdkWindow* gdk_selection_owner_get (GdkAtom selection);
|
||
|
|
||
|
void gdk_selection_send_notify (guint32 requestor,
|
||
|
GdkAtom selection,
|
||
|
GdkAtom target,
|
||
|
GdkAtom property,
|
||
|
guint32 time);
|
||
|
gint gdk_text_property_to_text_list (GdkAtom encoding, gint format,
|
||
|
guchar *text, gint length,
|
||
|
gchar ***list);
|
||
|
void gdk_free_text_list (gchar **list);
|
||
|
gint gdk_string_to_compound_text (gchar *str,
|
||
|
GdkAtom *encoding, gint *format,
|
||
|
guchar **ctext, gint *length);
|
||
|
void gdk_free_compound_text (guchar *ctext);
|
||
|
GdkAtom gdk_atom_intern (const gchar *atom_name,
|
||
|
gint only_if_exists);
|
||
|
gchar* gdk_atom_name (GdkAtom atom);
|
||
|
GList *gdk_input_list_devices (void);
|
||
|
void gdk_input_set_source (guint32 deviceid,
|
||
|
GdkInputSource source);
|
||
|
gint gdk_input_set_mode (guint32 deviceid,
|
||
|
GdkInputMode mode);
|
||
|
void gdk_input_set_axes (guint32 deviceid,
|
||
|
GdkAxisUse *axes);
|
||
|
void gdk_input_set_key (guint32 deviceid,
|
||
|
guint index,
|
||
|
guint keyval,
|
||
|
GdkModifierType modifiers);
|
||
|
gint gdk_im_ready (void);
|
||
|
void gdk_im_end (void);
|
||
|
GdkIC* gdk_ic_new (GdkICAttr *attr,
|
||
|
GdkICAttributesType mask);
|
||
|
GdkRegion* gdk_region_new (void);
|
||
|
void gdk_event_send_clientmessage_toall (GdkEvent *event);
|
||
|
gboolean gdk_event_send_client_message (GdkEvent *event,
|
||
|
guint32 xid);
|
||
|
|
||
|
And maybe:
|
||
|
|
||
|
void gdk_error_trap_push (void);
|
||
|
gint gdk_error_trap_pop (void);
|