Am 29. Februar 2012 00:17 schrieb Roger Davis <r...@soest.hawaii.edu>: > > Hello all, > > I am new to this list, please forgive me if this material has been discussed > before. I have a substantial body of Xlib/Motif code that I need to port > to a more modern GUI and have some questions in that regard with respect > to GTK+ and cousins. This code uses Motif for dialog panels, etc., but uses > low-level Xlib drawing routines (XDraw*(), XFillRectangle(), etc.) for lots > of drawing operations onto X11 Pixmap surfaces in memory which are then copied > to on-screen X11 Window objects as necessary. These Xlib-created drawings > largely contain imagery being rendered for purposes of scientific data > processing and analysis together with simple line and text annotations. > > Although I have yet to fully examine the GTK+ widget set in any detail, it > seems likely that it will provide functionality that is roughly equivalent > to the Motif widget set for purposes of dialog panels, etc. My questions > here are mostly about the suitability of GDK (and relatives) for support (or > replacement) of all of my extensive Xlib drawing ops as described above. > > My first glance through GDK version 2 docs found numerous parallels with > Xlib drawing ops, e.g., gdk_draw_line(), etc. On further research, however, > it appears that all of these Xlib-derived primitives are being deprecated > and are completely gone from GDK 3, where they have been replaced by > fundamentally different graphics modules, i.e., Cairo and Pango. My > current CentOS 6 platforms still have GTK+ v2, but I have no interest > in undertaking such a major port to a GTK+ v2 API that's already been > essentially EOL'ed. I also don't see a straightforward way to transform > thousands of lines of detailed Xlib drawing ops into the radically > different graphics model of Cairo/Pango. > > My one possible ray of hope in this quandary is that I see GDK 3 has a > small set of X Window System Interaction functions, specifically, > gdk_x11_display_get_xdisplay() and gdk_x11_window_get_xid(). It seems to me > that it should be possible for me to create some sort of GTK+ drawing area > widget with backing store, retrieve that backing store's XDisplay/XID with > these utility functions, do all of my usual Xlib drawing ops to that XID, > then use whatever GTK+ functionality exists to copy that backing store to > an on-screen window. Is there any fundamental problem with this approach? > > Along these lines I have a number of related questions: > > (1) Is it expected that this family of gdk_x11_*() functions will remain > part of GDK for the foreseeable future, or is it likely that they too will > be deprecated in the next few years? I have read elsewhere about Wayland > supplanting X11 at some point, and although most of what I see indicates > that X11 is expected to remain available on Linux systems for many years > to come, I could well imagine a future GDK going directly to Wayland > and dropping all support for an X11 backend. What is the expected > direction and timeline here? Nobody can give a proper answer to that question, it all depends on vendors and distributions pushing wayland (or not).
> (2) On a closely related point, my software also needs to run on MacOS, > which it currently does through all of the MacPorts X11 and OpenMotif > packages. I can well imagine that a GTK+/GDK port for MacOS would run > directly on Quartz and not use X11 at all. Is this the case right now, > or will it become so in the near future? Is there, or will there be, > a way to force GTK+ on MacOS to operate through an X11 backend rather > than using Quartz? AFAIK there are/were 2 gtk versions availiable for Mac. One which uses X11 as wrapper, and one directly using quartz. Though the direct quartz usage seems to be the recommended (http://www.gtk.org/download/macos.php) > (4) My apps have their own X11 event handler routines, called indirectly > by the Xt dispatching mechanism, so that any XEvent related to a drawing > area or its top-level parent window gets handled by my own code, which > typically needs little more than the mouse coordinates, button state > information, and keyboard key code info. Is this readily available through > whatever event-handling routines are provided by GTK+? Availiable, as simple as: g_signal_connect (G_OBJECT (canvas), "motion-notify-event", G_CALLBACK (your_callback_event_mouse_move), void_ptr_to_priv_data); > (5) I can see that moving all of my drawing operations to Cairo/Pango > would provide the best long-term support on multiple platforms, I'm > leery of moving this way solely due to the amount of effort required to > rewrite such a large amount of code. Is there any kind of documentation > or tutorial available, however, which is specifically targeted at > adapting relatively simple Xlib drawing ops to Cairo/Pango which might > be of help to me should I decide to tackle this? Does Cairo have a way > of mimicking an X11 XOR-op GC for doing low-overhead ephemeral drawing ops > of rubberband-lines, etc.? If you really need that high throughput, you can also give goocanvas or "bare" cogl. But that is up to your application and what kind of systems you target. > (6) Am I going in completely the wrong direction, should I be porting > this code to some other 2D graphics GUI? Or alternatively, should I just > forget the whole thing and hope that OpenMotif and Xlib stay around for > a considerably longer period, at least until I retire (another 15 years > or so) and this becomes somebody else's nightmare? ;-> Gtk+ is one of the widely used toolkits, an alternative would be Qt (a bit slower, proper windows support, C++, increased abstraction, stupid preprocessor, sometimes nasty debugging). If you are used to Motif then I'd go for gtk+ > (7) If I decide to go this route, I need to have a stable GTK+/GDK v3 > environment. This appears to not yet be available within CentOS 6, > and I'm guessing it might not appear before CentOS 7. Any thoughts here? > Is it possible for v3 and v2 to safely co-exist on my CentOS 6 system > along with any other essential stuff (glib?)? Is there any documentation > available on doing such a dual-version installation? On Arch Linux gtk2 and gtk3 libraries do co-exist. No problem. Worst case you can still ship the libraries itself with your application and add a starter script to set the proper library paths. If your application license is either GPL or LPGL you are also allowed to link statically (afaik), so you can deploy a gtk2 and a gtk3 version. Regards Bernhard Schuster _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list