Citat:
alex:
XWindow sistem ima svoj zaseban skup low-level API poziva za programiranje GUI sistema - pogledajte, recimo, Enlightenment - kompletno je napisan koriscenjem Xlib biblioteke.
Svi ostali toolkit-ovi su bazirani na Xlib biblioteci i olaksavaju pisanje GUI aplikacija - naravno, svaki sa svojim look-om, prednostima, manama. Sama Xlib biblioteka je veoma teska za rad, cak teza od low-level WinAPI GUI poziva.
Pozdrav,
alex.
Tako je. Ja sam jedno vreme razmišljao da se bakćem direktnim Xlib programiranjem, ali su mi ljudi koji dobro znaju Unix rekli "You don't want to do that" i ja sam im poverovao. Znači, koristi neku OS-nezavisnu biblioteku.
Uostalom, (makar rizikovao da me Leka baci lavovima) moram da napomenem da mi nije jasno zašto bi se neko bavio GUI programiranjem pod Unix-ima, osim iz ličnog zadovoljstva (mada meni nije zadovoljstvo da radim GUI ni pod jednim OS-om, ali to je već stvar ličnih afiniteta). Tržišni udeo Unix-a na desktop-u je zanemarljiv, i mislim da Unix-e treba koristiti za ono u čemu su najbolji, a to je server-side.
Ko mi ne veruje, evo jedan krajnje jednostavan primer za XLib programiranje:
Code:
// Written by Ch. Tronche (http://tronche.lri.fr:8000/)
// Copyright by the author. This is unmaintained, no-warranty free software.
// Please use freely. It is appreciated (but by no means mandatory) to
// acknowledge the author's contribution. Thank you.
// Started on Thu Jun 26 23:29:03 1997
//
// Xlib tutorial: 2nd program
// Make a window appear on the screen and draw a line inside.
// If you don't understand this program, go to
// http://tronche.lri.fr:8000/gui...orial/2nd-program-anatomy.html
//
#include <X11/Xlib.h> // Every Xlib program must include this
#include <assert.h> // I include this to test return values the lazy way
#include <unistd.h> // So we got the profile for 10 seconds
#define NIL (0) // A name for the void pointer
main()
{
// Open the display
Display *dpy = XOpenDisplay(NIL);
assert(dpy);
// Get some colors
int blackColor = BlackPixel(dpy, DefaultScreen(dpy));
int whiteColor = WhitePixel(dpy, DefaultScreen(dpy));
// Create the window
Window w = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 0, 0,
200, 100, 0, blackColor, blackColor);
// We want to get MapNotify events
XSelectInput(dpy, w, StructureNotifyMask);
// "Map" the window (that is, make it appear on the screen)
XMapWindow(dpy, w);
// Create a "Graphics Context"
GC gc = XCreateGC(dpy, w, 0, NIL);
// Tell the GC we draw using the white color
XSetForeground(dpy, gc, whiteColor);
// Wait for the MapNotify event
for(;;) {
XEvent e;
XNextEvent(dpy, &e);
if (e.type == MapNotify)
break;
}
// Draw the line
XDrawLine(dpy, w, gc, 10, 60, 180, 20);
// Send the "DrawLine" request to the server
XFlush(dpy);
// Wait for 10 seconds
sleep(10);
}