diff options
author | Owen Taylor <otaylor@src.gnome.org> | 1999-08-09 02:11:54 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 1999-08-09 02:11:54 +0000 |
commit | ecef1e1f2f71d417e03f78dd7c489132820ceb50 (patch) | |
tree | 431f494b9c8a63f2d2b3c12ce62137d9ab4dd5d6 | |
parent | 0775c02e0878ecb360dd87e7c7642d3f9b2bc6fd (diff) | |
download | gdk-pixbuf-ecef1e1f2f71d417e03f78dd7c489132820ceb50.tar.gz |
Added a file describing some upcoming and more
distant major changes to GDK.
-rw-r--r-- | gdk/TODO | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/gdk/TODO b/gdk/TODO new file mode 100644 index 000000000..534c0aad9 --- /dev/null +++ b/gdk/TODO @@ -0,0 +1,219 @@ +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); |