summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@src.gnome.org>1999-08-09 02:11:54 +0000
committerOwen Taylor <otaylor@src.gnome.org>1999-08-09 02:11:54 +0000
commitecef1e1f2f71d417e03f78dd7c489132820ceb50 (patch)
tree431f494b9c8a63f2d2b3c12ce62137d9ab4dd5d6
parent0775c02e0878ecb360dd87e7c7642d3f9b2bc6fd (diff)
downloadgdk-pixbuf-ecef1e1f2f71d417e03f78dd7c489132820ceb50.tar.gz
Added a file describing some upcoming and more
distant major changes to GDK.
-rw-r--r--gdk/TODO219
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);