36#include "gdk/gdkkeysyms.h"
65#define XDND_PROTOCOL_VERSION 5
67#define IDC_HAND MAKEINTRESOURCE(32649)
120 GdkDrawable *drawing;
141GdkAtom gClipboardAtom = GDK_NONE;
142static XWindow_t *
gCws;
143static XWindow_t *
gTws;
178static const char *
gTextFont =
"arial.ttf";
206 GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK
207 | GDK_LEAVE_NOTIFY_MASK | GDK_POINTER_MOTION_MASK | GDK_KEY_PRESS_MASK
208 | GDK_KEY_RELEASE_MASK;
210 GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK |
211 GDK_LEAVE_NOTIFY_MASK;
217 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
218 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
219 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
223static bool gdk_initialized =
false;
227struct MWMHintsProperty_t {
246struct KeySymbolMap_t {
251static const char *keyCodeToString[] = {
305static KeySymbolMap_t
gKeyMap[] = {
308#ifndef GDK_ISO_Left_Tab
362 int n =
event->fUser[1];
364 for (i = 0; i <
n; i++) {
365 buf[i] =
event->fUser[2 + i];
371 if (event->
fCode <= 0x20) {
372 strncpy(buf, keyCodeToString[event->
fCode], buflen - 1);
404 conv.i[0] = (
Int_t) i1;
405 conv.i[1] = (
Int_t) i2;
412static BOOL
CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam)
414 ::ShowWindow(hwndChild, SW_SHOWNORMAL);
415 GdkWindow *child = gdk_window_lookup(hwndChild);
417 ((GdkWindowPrivate *) child)->mapped =
TRUE;
423static void _ChangeProperty(HWND w,
char *np,
char *dp,
int n,
Atom_t type)
428 hMem = ::GetProp(w, np);
432 hMem = ::GlobalAlloc(GHND,
n +
sizeof(
Atom_t));
433 p = (
char *) ::GlobalLock(hMem);
435 memcpy(p +
sizeof(
Atom_t), dp,
n);
436 ::GlobalUnlock(hMem);
437 ::SetProp(w, np, hMem);
445 int format,
int mode,
const unsigned char *data,
453 if (mode == GDK_PROP_MODE_REPLACE || mode == GDK_PROP_MODE_PREPEND) {
454 len = (int) ::GlobalGetAtomName(property, buffer,
sizeof(buffer));
455 if ((atomName = (
char *)
malloc(len + 1)) == NULL) {
458 strcpy(atomName, buffer);
460 sprintf(propName,
"#0x%0.4x", (
unsigned) atomName);
461 _ChangeProperty(w, propName, (
char *) data, nelements,
type);
469static int _GetWindowProperty(GdkWindow *
id,
Atom_t property,
Long_t long_offset,
471 Atom_t * actual_type_return,
477 char *data, *destPtr;
482 w = (HWND) GDK_DRAWABLE_XID(
id);
484 if (::IsClipboardFormatAvailable(CF_TEXT) && ::OpenClipboard(NULL)) {
485 handle = ::GetClipboardData(CF_TEXT);
486 if (handle != NULL) {
487 data = (
char *) ::GlobalLock(handle);
488 *nitems_return = strlen(data);
490 destPtr = (
char *) *prop_return;
491 while (*data !=
'\0') {
499 ::GlobalUnlock(handle);
501 *bytes_after_return = 0;
507 ::RemoveProp(w, propName);
519 GdkImage *image = (GdkImage *)
id;
522 if (image->depth == 1) {
523 pixel = (((
char *) image->mem)[
y * image->bpl + (
x >> 3)] & (1 << (7 - (
x & 0x7)))) != 0;
526 switch (image->bpp) {
532 pixel = pixelp[0] | (pixelp[1] << 8);
535 pixel = pixelp[0] | (pixelp[1] << 8) | (pixelp[2] << 16);
538 pixel = pixelp[0] | (pixelp[1] << 8) | (pixelp[2] << 16);
548static void CollectImageColors(
ULong_t pixel,
ULong_t * &orgcolors,
551 if (maxcolors == 0) {
557 for (
int i = 0; i < ncolors; i++) {
558 if (pixel == orgcolors[i])
return;
560 if (ncolors >= maxcolors) {
568 orgcolors[ncolors++] = pixel;
574static char *EventMask2String(
UInt_t evmask)
576 static char bfr[500];
581 if (evmask & k##x##Mask) \
582 p += sprintf (p, "%s" #x, (p > bfr ? " " : ""))
600class TGWin32MainThread {
605 static LPCRITICAL_SECTION fCritSec;
606 static LPCRITICAL_SECTION fMessageMutex;
609 ~TGWin32MainThread();
610 static void LockMSG();
611 static void UnlockMSG();
614TGWin32MainThread *gMainThread = 0;
615LPCRITICAL_SECTION TGWin32MainThread::fCritSec = 0;
616LPCRITICAL_SECTION TGWin32MainThread::fMessageMutex = 0;
622TGWin32MainThread::~TGWin32MainThread()
625 ::LeaveCriticalSection(fCritSec);
626 ::DeleteCriticalSection(fCritSec);
632 ::LeaveCriticalSection(fMessageMutex);
633 ::DeleteCriticalSection(fMessageMutex);
634 delete fMessageMutex;
639 ::PostThreadMessage(fId, WM_QUIT, 0, 0);
640 ::CloseHandle(fHandle);
648void TGWin32MainThread::LockMSG()
650 if (fMessageMutex) ::EnterCriticalSection(fMessageMutex);
656void TGWin32MainThread::UnlockMSG()
658 if (fMessageMutex) ::LeaveCriticalSection(fMessageMutex);
662class TGWin32RefreshTimer :
public TTimer {
672 while (::PeekMessage(&msg, NULL, NULL, NULL, PM_NOREMOVE)) {
673 ::PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE);
686static DWORD WINAPI MessageProcessingLoop(void *p)
690 Bool_t endLoop = kFALSE;
691 TGWin32RefreshTimer *refersh = 0;
693 // force to create message queue
694 ::PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);
696 // periodically we refresh windows
697 // Don't create refresh timer if the application has been created inside PVSS
699 TString arg = gSystem->BaseName(gApplication->Argv(0));
700 if (!arg.Contains("PVSS"))
701 refersh = new TGWin32RefreshTimer();
705 erret = ::GetMessage(&msg, NULL, NULL, NULL);
706 if (erret <= 0) endLoop = kTRUE;
707 endLoop = MessageProcessingFunc(&msg);
710 TGWin32::Instance()->CloseDisplay();
716 erret = ::GetLastError();
717 Error("MsgLoop", "Error in GetMessage");
726Bool_t GUIThreadMessageWrapper(MSG* msg)
738TGWin32MainThread::TGWin32MainThread()
740 fCritSec =
new CRITICAL_SECTION;
741 ::InitializeCriticalSection(fCritSec);
742 fMessageMutex =
new CRITICAL_SECTION;
743 ::InitializeCriticalSection(fMessageMutex);
803 if (!
gROOT->IsBatch() && !gMainThread) {
804 gMainThread =
new TGWin32MainThread();
822 while (it.
Next(key, value)) {
846 static Int_t m_timer = 0;
848 if ( (msg->message == WM_NCLBUTTONDOWN) ) {
850 m_timer = SetTimer(NULL, 1, 20, (TIMERPROC)
MyTimerProc);
852 else if (msg->message == WM_NCMOUSELEAVE ) {
854 KillTimer(NULL, m_timer);
873 TGWin32MainThread::LockMSG();
874 TranslateMessage(msg);
875 DispatchMessage(msg);
876 TGWin32MainThread::UnlockMSG();
886#ifdef OLD_THREAD_IMPLEMENTATION
908 TGWin32MainThread *delThread = gMainThread;
938 if (gMainThread && gMainThread->fCritSec) ::EnterCriticalSection(gMainThread->fCritSec);
946 if (gMainThread && gMainThread->fCritSec) ::LeaveCriticalSection(gMainThread->fCritSec);
954 if (!gdk_initialized) {
955 if (!gdk_init_check(NULL, NULL))
return kFALSE;
956 gdk_initialized =
true;
959 if (!gClipboardAtom) {
960 gClipboardAtom = gdk_atom_intern(
"CLIPBOARD",
kFALSE);
971 GdkPixmap *pixmp1, *pixmp2;
977 if (!
Init((
void*)dpyName)) {
987 fore.red = fore.green = fore.blue = 0;
988 back.red = back.green = back.blue = 0;
989 color.red = color.green = color.blue = 0;
992 fVisual = gdk_visual_get_best();
994 fDepth = gdk_visual_get_best_depth();
1003 for (i = 0; i <
kMAXGC; i++) {
1004 gGClist[i] = gdk_gc_new(GDK_ROOT_PARENT());
1017 gdk_gc_get_values(
gGCtext, &gcvals);
1018 gdk_gc_set_foreground(
gGCinvt, &gcvals.background);
1019 gdk_gc_set_background(
gGCinvt, &gcvals.foreground);
1023 gdk_color_black(
fColormap, &echov.foreground);
1024 gdk_color_white(
fColormap, &echov.background);
1025 echov.function = GDK_INVERT;
1026 echov.subwindow_mode = GDK_CLIP_BY_CHILDREN;
1028 gdk_gc_new_with_values((GdkWindow *) GDK_ROOT_PARENT(), &echov,
1029 (GdkGCValuesMask) (GDK_GC_FOREGROUND |
1034 pixmp1 = gdk_bitmap_create_from_data(GDK_ROOT_PARENT(),
1037 pixmp2 = gdk_bitmap_create_from_data(GDK_ROOT_PARENT(),
1040 gNullCursor = gdk_cursor_new_from_pixmap((GdkDrawable *)pixmp1, (GdkDrawable *)pixmp2,
1041 &fore, &back, 0, 0);
1090 if ( gdk_visual_get_best_type() == GDK_VISUAL_TRUE_COLOR) {
1096 if ((
fVisual->blue_mask >> i) == 1) {
1105 if ((
fVisual->green_mask >> i) == 1) {
1114 if ((
fVisual->red_mask >> i) == 1) {
1122 SetTitle(
"ROOT interface to Win32 with TrueType fonts");
1156 if ( gdk_color_alloc((GdkColormap *)cmap, (GdkColor *)color) )
return kTRUE;
1175 GdkColorContext *cc = gdk_color_context_new(gdk_visual_get_system(), cmap);
1176 gdk_color_context_query_colors(cc, color, ncolors);
1177 gdk_color_context_free(cc);
1179 for (
Int_t i = 0; i < ncolors; i++) {
1234 static GdkColor col[5];
1235 GdkColor *bcol = 0, *bc;
1243 const Int_t maxdots = 50000;
1245 dots =
Int_t(source->width * source->rows);
1246 dots = dots > maxdots ? maxdots : dots;
1247 bcol =
new GdkColor[dots];
1252 for (
y = 0;
y < (int) source->rows;
y++) {
1253 for (
x = 0;
x < (int) source->width;
x++, bc++) {
1254 bc->pixel = GetPixelImage((
Drawable_t)xim, bx +
x, by +
y);
1255 if (++dotcnt >= maxdots)
break;
1262 for (
y = 0;
y < (int) source->rows;
y++) {
1263 for (
x = 0;
x < (int) source->width;
x++, bc++) {
1267 if (++dotcnt >= maxdots)
break;
1276 if (bc->red ==
r && bc->green ==
g && bc->blue ==
b) {
1290 if (fore != col[4].pixel || back != col[0].pixel) {
1291 col[4].pixel = fore;
1293 col[3].pixel = back;
1301 for (
x = 3;
x > 0;
x--) {
1302 col[
x].red = (col[4].red *
x + col[0].red *(4-
x)) /4;
1303 col[
x].green = (col[4].green*
x + col[0].green*(4-
x)) /4;
1304 col[
x].blue = (col[4].blue *
x + col[0].blue *(4-
x)) /4;
1306 Warning(
"DrawImage",
"cannot allocate smoothing color");
1307 col[
x].pixel = col[
x+1].pixel;
1314 for (
y = 0;
y < (int) source->rows;
y++) {
1315 for (
x = 0;
x < (int) source->width;
x++) {
1317 d = ((
d + 10) * 5) / 256;
1319 if (
d &&
x < (
int) source->width) {
1328 for (
int y = 0;
y < (int) source->rows;
y++) {
1331 for (
int x = 0;
x < (int) source->width;
x++) {
1332 if (
n == 0)
d = *
s++;
1338 row += source->pitch;
1394 if (
y+
h > height)
h = height -
y;
1396 return gdk_image_get((GdkDrawable*)cws,
x,
y, w,
h);
1411 if ((
int)w == 0 || (
int)
h == 0)
return kFALSE;
1415 if (
y + (
int)h <= 0 || y >= (
int)height)
return kFALSE;
1443 GdkImage *xim = gdk_image_new(GDK_IMAGE_SHARED, gdk_visual_get_best(), w,
h);
1452 gdk_gc_get_values((GdkGC*)
GetGC(3), &gcvals);
1459 Error(
"DrawText",
"error getting background image");
1464 Int_t xo = 0, yo = 0;
1465 if (
x1 < 0) xo = -
x1;
1466 if (y1 < 0) yo = -y1;
1468 for (
int yp = 0; yp < (int) bim->height; yp++) {
1469 for (
int xp = 0; xp < (int) bim->width; xp++) {
1470 pixel = GetPixelImage((
Drawable_t)bim, xp, yp);
1475 gdk_image_unref((GdkImage *)bim);
1483 pixel = gcvals.background.pixel;
1485 pixel = GetPixelImage((
Drawable_t)bim, 0, 0);
1487 Int_t xo = 0, yo = 0;
1488 if (
x1 < 0) xo = -
x1;
1489 if (y1 < 0) yo = -y1;
1491 for (
int yp = 0; yp <
h; yp++) {
1492 for (
int xp = 0; xp < (int) w; xp++) {
1497 gdk_image_unref((GdkImage *)bim);
1507 if (FT_Glyph_To_Bitmap(&glyph->
fImage,
1509 : ft_render_mode_mono,
1511 FT_BitmapGlyph bitmap = (FT_BitmapGlyph)glyph->
fImage;
1512 FT_Bitmap* source = &bitmap->bitmap;
1515 bx = bitmap->left+Xoff;
1516 by =
h - bitmap->top-Yoff;
1517 DrawImage(source, gcvals.foreground.pixel, bg, xim, bx, by);
1522 gdk_draw_image((GdkDrawable *)cws,
GetGC(6), xim, 0, 0,
x1, y1, w,
h);
1524 gdk_image_unref(xim);
1567 if (!
gCws->ispixmap && !
gCws->double_buffer) {
1568 gdk_window_set_background(
gCws->drawing, (GdkColor *) &
GetColor(0).color);
1569 gdk_window_clear(
gCws->drawing);
1602 if (
gCws->ispixmap) {
1603 gdk_pixmap_unref(
gCws->window);
1605 gdk_window_destroy(
gCws->window,
kTRUE);
1609 gdk_pixmap_unref(
gCws->buffer);
1611 if (
gCws->new_colors) {
1612 gdk_colormap_free_colors((GdkColormap *)
fColormap,
1613 (GdkColor *)
gCws->new_colors,
gCws->ncolors);
1615 delete []
gCws->new_colors;
1616 gCws->new_colors = 0;
1642 gdk_window_copy_area(
gCws->drawing,
gGCpxmp, xpos, ypos,
gTws->drawing,
1694 int i, j, icol, ix, iy, w,
h, current_icol;
1706 for (i = 0; i < nx; i++) {
1708 for (j = 0; j < ny; j++) {
1709 icol = ic[i + (nx * j)];
1710 if (icol != current_icol) {
1712 current_icol = icol;
1730 static int lastn = 0;
1731 static GdkPoint *
xy = 0;
1739 delete [] (GdkPoint *)
xy;
1740 xy =
new GdkPoint[
n];
1743 for (i = 0; i <
n; i++) {
1744 xy[i].x = xyt[i].
fX;
1745 xy[i].y = xyt[i].
fY;
1776 dashes[i] = (gint8) 0;
1796 for (i = 0; i <
n; i++) {
1797 xy[i].fX = xyt[i].
fX;
1798 xy[i].fY = xyt[i].
fY;
1815 dashes[i] = (gint8) 0;
1822 for (i = 1; i <
n; i++) {
1823 int dx =
xy[i].fX -
xy[i - 1].fX;
1824 int dy =
xy[i].fY -
xy[i - 1].fY;
1826 if (dx < 0) dx = -dx;
1827 if (dy < 0) dy = -dy;
1847 static int lastn = 0;
1848 static GdkPoint *
xy = 0;
1856 delete [] (GdkPoint *)
xy;
1857 xy =
new GdkPoint[
n];
1861 for (i = 0; i <
n; i++) {
1862 xy[i].x = xyt[i].
fX;
1863 xy[i].y = xyt[i].
fY;
1872 for (
m = 0;
m <
n;
m++) {
1890 for (i = 0; i <
gMarker.n; i++) {
1899 for (i = 0; i <
gMarker.n; i++) {
1906 for (i = 0; i <
gMarker.n; i += 2) {
1956 if (which >=
kMAXGC || which < 0) {
1957 Error(
"GetGC",
"trying to get illegal GdkGC (which = %d)", which);
1976 return gTws->double_buffer;
1996 w = gdk_screen_width();
1997 h = gdk_screen_height();
2003 gdk_window_get_geometry((GdkDrawable *)
gTws->window, &
x, &
y,
2004 &
width, &height, &depth);
2006 gdk_window_get_deskrelative_origin((GdkDrawable *)
gTws->window, &
x, &
y);
2008 if (
width > 0 && height > 0) {
2010 gTws->height = height;
2030 nplanes = gdk_visual_get_best_depth();
2040 }
else if (index == 1) {
2084 if (!
gTws->open)
return;
2086 gdk_window_move((GdkDrawable *)
gTws->window,
x,
y);
2113 newsize *
sizeof(XWindow_t),
2122 depth =gdk_visual_get_best_depth();
2123 gCws->window = (GdkPixmap *) gdk_pixmap_new(GDK_ROOT_PARENT(),wval,hval,depth);
2124 gdk_drawable_get_size((GdkDrawable *)
gCws->window, &ww, &hh);
2126 for (i = 0; i <
kMAXGC; i++) {
2127 gdk_gc_set_clip_mask((GdkGC *)
gGClist[i], (GdkDrawable *)None);
2138 gCws->double_buffer = 0;
2142 gCws->height = hval;
2143 gCws->new_colors = 0;
2154 GdkWindowAttr attributes;
2155 unsigned long attr_mask = 0;
2158 int wval, hval, depth;
2160 GdkWindow *wind = (GdkWindow *) win;
2162 gdk_window_get_geometry(wind, &xval, &yval, &wval, &hval, &depth);
2180 newsize *
sizeof(XWindow_t),
2192 attributes.wclass = GDK_INPUT_OUTPUT;
2193 attributes.event_mask = 0
L;
2194 attributes.event_mask |= GDK_EXPOSURE_MASK | GDK_STRUCTURE_MASK |
2195 GDK_PROPERTY_CHANGE_MASK;
2198 attributes.x = xval;
2200 attributes.x = -1.0 * xval;
2204 attributes.y = yval;
2206 attributes.y = -1.0 * yval;
2208 attributes.width = wval;
2209 attributes.height = hval;
2210 attributes.colormap = gdk_colormap_get_system();
2211 attributes.visual = gdk_window_get_visual(wind);
2212 attributes.override_redirect =
TRUE;
2214 if ((attributes.y > 0) && (attributes.x > 0)) {
2215 attr_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_COLORMAP |
2216 GDK_WA_WMCLASS | GDK_WA_NOREDIR;
2218 attr_mask = GDK_WA_COLORMAP | GDK_WA_WMCLASS | GDK_WA_NOREDIR;
2221 if (attributes.visual != NULL) {
2222 attr_mask |= GDK_WA_VISUAL;
2224 attributes.window_type = GDK_WINDOW_CHILD;
2225 gCws->window = gdk_window_new(wind, &attributes, attr_mask);
2226 HWND window = (HWND)GDK_DRAWABLE_XID((GdkWindow *)
gCws->window);
2227 ::ShowWindow(window, SW_SHOWNORMAL);
2228 ::ShowWindow(window, SW_RESTORE);
2229 ::BringWindowToTop(window);
2232 ::SetClassLong(window, GCL_HCURSOR,
2240 gCws->double_buffer = 0;
2244 gCws->height = hval;
2245 gCws->new_colors = 0;
2272 gdk_pixmap_unref((GdkPixmap *)pix);
2303 static int xloc = 0;
2304 static int yloc = 0;
2305 static int xlocp = 0;
2306 static int ylocp = 0;
2307 static GdkCursor *cursor = NULL;
2315 if (cursor == NULL) {
2317 gdk_window_set_cursor((GdkWindow *)
gCws->window, (GdkCursor *)
gNullCursor);
2321 cursor = gdk_syscursor_new((
ULong_t)IDC_CROSS);
2323 cursor = gdk_cursor_new((GdkCursorType)GDK_CROSSHAIR);
2324 gdk_window_set_cursor((GdkWindow *)
gCws->window, (GdkCursor *)cursor);
2334 while (button_press == 0) {
2335 event = gdk_event_get();
2348 radius = (int)
TMath::Sqrt((
double)((xloc - xlocp) * (xloc - xlocp) +
2349 (yloc - ylocp) * (yloc - ylocp)));
2352 xlocp - radius, ylocp - radius,
2353 2 * radius, 2 * radius, 0, 23040);
2357 gdk_draw_line(
gCws->window,
gGCecho, xlocp, ylocp, xloc, yloc);
2370 xloc =
event->button.x;
2371 yloc =
event->button.y;
2373 switch (event->type) {
2375 case GDK_LEAVE_NOTIFY:
2378 event = gdk_event_get();
2380 if (event->type == GDK_ENTER_NOTIFY) {
2381 gdk_event_free(event);
2384 gdk_event_free(event);
2391 case GDK_BUTTON_PRESS:
2392 button_press =
event->button.button;
2393 xlocp =
event->button.x;
2394 ylocp =
event->button.y;
2395 gdk_cursor_unref(cursor);
2399 case GDK_BUTTON_RELEASE:
2401 button_press = 10 +
event->button.button;
2402 xlocp =
event->button.x;
2403 ylocp =
event->button.y;
2409 button_press =
event->key.keyval;
2410 xlocp =
event->button.x;
2411 ylocp =
event->button.y;
2415 case GDK_KEY_RELEASE:
2417 button_press = -1 * (int)(event->key.keyval);
2418 xlocp =
event->button.x;
2419 ylocp =
event->button.y;
2427 xtmp =
event->button.x;
2428 ytmp =
event->button.y;
2430 gdk_event_free(event);
2433 if (button_press == 0) {
2444 return button_press;
2458 static GdkCursor *cursor = NULL;
2459 static int percent = 0;
2460 static GdkWindow *CurWnd;
2465 int len_text = strlen(
text);
2469 CurWnd = (GdkWindow *)
gCws->window;
2471 if (cursor == NULL) {
2473 cursor = gdk_syscursor_new((
ULong_t)IDC_HELP);
2475 cursor = gdk_cursor_new((GdkCursorType)GDK_QUESTION_ARROW);
2478 gdk_window_set_cursor(CurWnd, cursor);
2480 for (nt = len_text; nt > 0 &&
text[nt - 1] ==
' '; nt--);
2483 focuswindow = ::SetFocus((HWND)GDK_DRAWABLE_XID(CurWnd));
2498 event = gdk_event_get();
2501 ::SleepEx(10,
kTRUE);
2512 char *stmp =
new char[
pt+1];
2520 if (
pt < len_text) {
2528 if (event != NULL) {
2529 switch (event->type) {
2530 case GDK_BUTTON_PRESS:
2531 case GDK_ENTER_NOTIFY:
2532 focuswindow = ::SetFocus((HWND)GDK_DRAWABLE_XID(CurWnd));
2535 case GDK_LEAVE_NOTIFY:
2536 ::SetFocus(focuswindow);
2539 nbytes =
event->key.length;
2540 for (i = 0; i < nbytes; i++) {
2541 keybuf[i] =
event->key.string[i];
2543 keysym =
event->key.keyval;
2579 if (isascii(keybuf[0]) && isprint(keybuf[0])) {
2581 if (nt < len_text) {
2584 for (i = nt - 1; i >
pt; i--) {
2587 if (
pt < len_text) {
2592 switch (keybuf[0]) {
2599 for (i =
pt; i < nt; i++) {
2620 for (i =
pt; i < nt; i++) {
2640 for (i =
pt; i < nt; i++)
2670 gdk_event_free(event);
2674 ::SetFocus(focuswindow);
2679 gdk_cursor_unref(cursor);
2703 if (
gTws->width == w &&
gTws->height ==
h)
2706 gdk_window_resize((GdkWindow *)
gTws->window, w,
h);
2710 if (
gTws->width < w ||
gTws->height <
h) {
2711 gdk_pixmap_unref(
gTws->buffer);
2712 gTws->buffer = gdk_pixmap_new(GDK_ROOT_PARENT(),
2713 w,
h, gdk_visual_get_best_depth());
2715 for (i = 0; i <
kMAXGC; i++) {
2716 gdk_gc_set_clip_mask(
gGClist[i], None);
2750 if (
gTws->width >= wval - 1 &&
gTws->width <= wval + 1 &&
2751 gTws->height >= hval - 1 &&
gTws->height <= hval + 1)
2755 if (
gTws->width < wval ||
gTws->height < hval) {
2756 gdk_pixmap_unref((GdkPixmap *)
gTws->window);
2757 depth = gdk_visual_get_best_depth();
2758 gTws->window = gdk_pixmap_new(GDK_ROOT_PARENT(), wval, hval, depth);
2761 gdk_drawable_get_size(
gTws->window, &ww, &hh);
2763 for (i = 0; i <
kMAXGC; i++) {
2764 gdk_gc_set_clip_mask((GdkGC *)
gGClist[i], (GdkDrawable *)None);
2774 gTws->height = hval;
2784 int xval = 0, yval = 0;
2785 GdkWindow *win, *root = NULL;
2786 int wval = 0, hval = 0, depth = 0;
2792 win = (GdkWindow *)
gTws->window;
2793 gdk_window_get_geometry(win, &xval, &yval,
2794 &wval, &hval, &depth);
2797 if (
gTws->width == wval &&
gTws->height == hval) {
2801 gdk_window_resize((GdkWindow *)
gTws->window, wval, hval);
2804 if (
gTws->width < wval ||
gTws->height < hval) {
2805 gdk_pixmap_unref((GdkPixmap *)
gTws->buffer);
2806 depth = gdk_visual_get_best_depth();
2807 gTws->buffer = (GdkPixmap *) gdk_pixmap_new(GDK_ROOT_PARENT(),
2811 for (i = 0; i <
kMAXGC; i++) {
2812 gdk_gc_set_clip_mask((GdkGC *)
gGClist[i], (GdkDrawable *)None);
2824 gTws->height = hval;
2841 if (
gCws->clip && !
gCws->ispixmap && !
gCws->double_buffer) {
2842 rect.x =
gCws->xclip;
2843 rect.y =
gCws->yclip;
2844 rect.width =
gCws->wclip;
2845 rect.height =
gCws->hclip;
2847 for (i = 0; i <
kMAXGC; i++) {
2848 gdk_gc_set_clip_rectangle((GdkGC *)
gGClist[i], &rect);
2851 for (i = 0; i <
kMAXGC; i++) {
2852 gdk_gc_set_clip_mask((GdkGC *)
gGClist[i], (GdkDrawable *)None);
2864 if (chupx == 0 && chupy == 0) {
2866 }
else if (chupx == 0 && chupy == 1) {
2868 }
else if (chupx == -1 && chupy == 0) {
2870 }
else if (chupx == 0 && chupy == -1) {
2872 }
else if (chupx == 1 && chupy == 0) {
2878 180.) / 3.14159) - 90;
2896 for (
int i = 0; i <
kMAXGC; i++) {
2897 gdk_gc_set_clip_mask((GdkGC *)
gGClist[i], (GdkDrawable *)None);
2920 if (
gTws->clip && !
gTws->ispixmap && !
gTws->double_buffer) {
2921 rect.x =
gTws->xclip;
2922 rect.y =
gTws->yclip;
2923 rect.width =
gTws->wclip;
2924 rect.height =
gTws->hclip;
2926 for (
int i = 0; i <
kMAXGC; i++) {
2927 gdk_gc_set_clip_rectangle((GdkGC *)
gGClist[i], &rect);
2941 return col.
color.pixel;
2961 }
else if (!
fColormap && (ci < 0 || ci > 1)) {
2966 gdk_gc_get_values(gc, &gcvals);
2968 color.pixel = col.
color.pixel ^ gcvals.background.pixel;
2969 color.red = GetRValue(color.pixel);
2970 color.green = GetGValue(color.pixel);
2971 color.blue = GetBValue(color.pixel);
2972 gdk_gc_set_foreground(gc, &color);
2975 gdk_gc_set_foreground(gc, &col.
color);
2978 gdk_gc_get_values(gc, &gcvals);
2980 if (gcvals.foreground.pixel != gcvals.background.pixel) {
2981 gdk_gc_set_background(gc, &
GetColor(!ci).color);
2994 gdk_window_set_cursor((GdkWindow *)
gTws->window, (GdkCursor *)
fCursors[cursor]);
3004 static GdkWindow *lid = 0;
3005 static GdkCursor *lcur = 0;
3007 if ((lid == (GdkWindow *)
id) && (lcur==(GdkCursor *)curid))
return;
3008 lid = (GdkWindow *)
id;
3009 lcur = (GdkCursor *)curid;
3011 gdk_window_set_cursor((GdkWindow *)
id, (GdkCursor *)curid);
3041 if (!
gTws->open)
return;
3059 if (!
gTws->double_buffer)
return;
3060 gTws->double_buffer = 0;
3071 if (!
gTws->buffer) {
3072 gTws->buffer = gdk_pixmap_new(GDK_ROOT_PARENT(),
3074 gdk_visual_get_best_depth());
3080 for (
int i = 0; i <
kMAXGC; i++) {
3081 gdk_gc_set_clip_mask(
gGClist[i], None);
3083 gTws->double_buffer = 1;
3102 for (i = 0; i <
kMAXGC; i++) {
3103 gdk_gc_set_function(
gGClist[i], GDK_COPY);
3108 for (i = 0; i <
kMAXGC; i++) {
3109 gdk_gc_set_function(
gGClist[i], GDK_XOR);
3114 for (i = 0; i <
kMAXGC; i++) {
3115 gdk_gc_set_function(
gGClist[i], GDK_INVERT);
3172 static int current_fasi = 0;
3181 gdk_gc_set_fill(
gGCfill, GDK_SOLID);
3190 gdk_gc_set_fill(
gGCfill, GDK_STIPPLED);
3192 if (fasi != current_fasi) {
3197 int stn = (fasi >= 1 && fasi <=25) ? fasi : 2;
3198 gFillPattern = gdk_bitmap_create_from_data(GDK_ROOT_PARENT(),
3201 current_fasi = fasi;
3217 EnableWindow((HWND) GDK_DRAWABLE_XID(
gCws->window), inp);
3225 if ((cindex < 0) || (cindex==
fLineColor))
return;
3294 static Int_t dashed[2] = { 3, 3 };
3295 static Int_t dotted[2] = { 1, 2 };
3296 static Int_t dasheddotted[4] = { 3, 4, 1, 4 };
3312 for (
Int_t j = 0; j<nt; j++) {
3314 sscanf(((
TObjString*)tokens->
At(j))->GetName(),
"%d", &it);
3315 linestyle[j] = (
Int_t)(it/4);
3318 delete [] linestyle;
3389 for (
int i = 0; i <
gMarker.n; i++) {
3400 if ((
fMarkerStyle == markerstyle) || (markerstyle >= 50))
return;
3410 static GdkPoint shape[30];
3652 shape[0].x = 0; shape[0].y = im;
3653 shape[1].x = im; shape[1].y = -im;
3654 shape[2].x = -im; shape[2].y = -im;
3655 shape[3].x = 0; shape[3].y = im;
3660 shape[0].x =-imx; shape[0].y = 0;
3661 shape[1].x = 0; shape[1].y = -im;
3662 shape[2].x = imx; shape[2].y = 0;
3663 shape[3].x = 0; shape[3].y = im;
3664 shape[4].x =-imx; shape[4].y = 0;
3669 shape[0].x = -im; shape[0].y =-imx;
3670 shape[1].x =-imx; shape[1].y =-imx;
3671 shape[2].x =-imx; shape[2].y = -im;
3672 shape[3].x = imx; shape[3].y = -im;
3673 shape[4].x = imx; shape[4].y =-imx;
3674 shape[5].x = im; shape[5].y =-imx;
3675 shape[6].x = im; shape[6].y = imx;
3676 shape[7].x = imx; shape[7].y = imx;
3677 shape[8].x = imx; shape[8].y = im;
3678 shape[9].x =-imx; shape[9].y = im;
3679 shape[10].x=-imx; shape[10].y= imx;
3680 shape[11].x= -im; shape[11].y= imx;
3681 shape[12].x= -im; shape[12].y=-imx;
3685 shape[0].x = -im; shape[0].y = -im;
3686 shape[1].x = im; shape[1].y = -im;
3687 shape[2].x = im; shape[2].y = im;
3688 shape[3].x = -im; shape[3].y = im;
3689 shape[4].x = -im; shape[4].y = -im;
3690 shape[5].x = im; shape[5].y = im;
3691 shape[6].x = -im; shape[6].y = im;
3692 shape[7].x = im; shape[7].y = -im;
3696 shape[0].x =-im; shape[0].y = 0;
3697 shape[1].x = 0; shape[1].y = -im;
3698 shape[2].x = im; shape[2].y = 0;
3699 shape[3].x = 0; shape[3].y = im;
3700 shape[4].x =-im; shape[4].y = 0;
3701 shape[5].x = im; shape[5].y = 0;
3702 shape[6].x = 0; shape[6].y = im;
3703 shape[7].x = 0; shape[7].y =-im;
3708 shape[0].x = 0; shape[0].y = 0;
3709 shape[1].x =-im2; shape[1].y = im;
3710 shape[2].x = -im; shape[2].y = 0;
3711 shape[3].x = 0; shape[3].y = 0;
3712 shape[4].x =-im2; shape[4].y = -im;
3713 shape[5].x = im2; shape[5].y = -im;
3714 shape[6].x = 0; shape[6].y = 0;
3715 shape[7].x = im; shape[7].y = 0;
3716 shape[8].x = im2; shape[8].y = im;
3717 shape[9].x = 0; shape[9].y = 0;
3722 shape[0].x = -im; shape[0].y = 0;
3723 shape[1].x = -im; shape[1].y =-im2;
3724 shape[2].x =-im2; shape[2].y =-im;
3725 shape[3].x = im2; shape[3].y = -im;
3726 shape[4].x = im; shape[4].y =-im2;
3727 shape[5].x = im; shape[5].y = im2;
3728 shape[6].x = im2; shape[6].y = im;
3729 shape[7].x =-im2; shape[7].y = im;
3730 shape[8].x = -im; shape[8].y = im2;
3731 shape[9].x = -im; shape[9].y = 0;
3732 shape[10].x = im; shape[10].y = 0;
3733 shape[11].x = 0; shape[11].y = 0;
3734 shape[12].x = 0; shape[12].y = -im;
3735 shape[13].x = 0; shape[13].y = im;
3736 shape[14].x = 0; shape[14].y = 0;
3741 shape[0].x = 0; shape[0].y = 0;
3742 shape[1].x =-im2; shape[1].y = im;
3743 shape[2].x = -im; shape[2].y = 0;
3744 shape[3].x = 0; shape[3].y = 0;
3745 shape[4].x =-im2; shape[4].y = -im;
3746 shape[5].x = im2; shape[5].y = -im;
3747 shape[6].x = 0; shape[6].y = 0;
3748 shape[7].x = im; shape[7].y = 0;
3749 shape[8].x = im2; shape[8].y = im;
3754 shape[0].x = 0; shape[0].y = 0;
3755 shape[1].x = im2; shape[1].y = im;
3756 shape[2].x = im; shape[2].y = im2;
3757 shape[3].x = 0; shape[3].y = 0;
3758 shape[4].x = im; shape[4].y = -im2;
3759 shape[5].x = im2; shape[5].y = -im;
3760 shape[6].x = 0; shape[6].y = 0;
3761 shape[7].x = -im2; shape[7].y = -im;
3762 shape[8].x = -im; shape[8].y = -im2;
3763 shape[9].x = 0; shape[9].y = 0;
3764 shape[10].x = -im; shape[10].y = im2;
3765 shape[11].x = -im2; shape[11].y = im;
3766 shape[12].x = 0; shape[12].y = 0;
3771 shape[0].x = 0; shape[0].y = 0;
3772 shape[1].x = im2; shape[1].y = im;
3773 shape[2].x = im; shape[2].y = im2;
3774 shape[3].x = 0; shape[3].y = 0;
3775 shape[4].x = im; shape[4].y = -im2;
3776 shape[5].x = im2; shape[5].y = -im;
3777 shape[6].x = 0; shape[6].y = 0;
3778 shape[7].x = -im2; shape[7].y = -im;
3779 shape[8].x = -im; shape[8].y = -im2;
3780 shape[9].x = 0; shape[9].y = 0;
3781 shape[10].x = -im; shape[10].y = im2;
3782 shape[11].x = -im2; shape[11].y = im;
3783 shape[12].x = 0; shape[12].y = 0;
3788 shape[0].x= 0; shape[0].y= im;
3789 shape[1].x= -imx; shape[1].y= imx;
3790 shape[2].x = -im; shape[2].y = 0;
3791 shape[3].x = -imx; shape[3].y = -imx;
3792 shape[4].x = 0; shape[4].y = -im;
3793 shape[5].x = imx; shape[5].y = -imx;
3794 shape[6].x = im; shape[6].y = 0;
3795 shape[7].x= imx; shape[7].y= imx;
3796 shape[8].x= 0; shape[8].y= im;
3801 shape[0].x = 0; shape[0].y = im;
3802 shape[1].x = -imx; shape[1].y = imx;
3803 shape[2].x = -im; shape[2].y = 0;
3804 shape[3].x = -imx; shape[3].y = -imx;
3805 shape[4].x = 0; shape[4].y = -im;
3806 shape[5].x = imx; shape[5].y = -imx;
3807 shape[6].x = im; shape[6].y = 0;
3808 shape[7].x = imx; shape[7].y = imx;
3809 shape[8].x = 0; shape[8].y = im;
3814 shape[0].x = 0; shape[0].y = 0;
3815 shape[1].x = im2; shape[1].y = im;
3816 shape[2].x = -im2; shape[2].y = im;
3817 shape[3].x = im2; shape[3].y = -im;
3818 shape[4].x = -im2; shape[4].y = -im;
3819 shape[5].x = 0; shape[5].y = 0;
3820 shape[6].x = im; shape[6].y = im2;
3821 shape[7].x = im; shape[7].y = -im2;
3822 shape[8].x = -im; shape[8].y = im2;
3823 shape[9].x = -im; shape[9].y = -im2;
3824 shape[10].x = 0; shape[10].y = 0;
3830 shape[0].x = im0; shape[0].y = im0;
3831 shape[1].x = im2; shape[1].y = im;
3832 shape[2].x = -im2; shape[2].y = im;
3833 shape[3].x = -im0; shape[3].y = im0;
3834 shape[4].x = -im; shape[4].y = im2;
3835 shape[5].x = -im; shape[5].y = -im2;
3836 shape[6].x = -im0; shape[6].y = -im0;
3837 shape[7].x = -im2; shape[7].y = -im;
3838 shape[8].x = im2; shape[8].y = -im;
3839 shape[9].x = im0; shape[9].y = -im0;
3840 shape[10].x = im; shape[10].y = -im2;
3841 shape[11].x = im; shape[11].y = im2;
3842 shape[12].x = im0; shape[12].y = im0;
3847 shape[0].x = 0; shape[0].y = im2;
3848 shape[1].x = -im2; shape[1].y = im;
3849 shape[2].x = -im; shape[2].y = im2;
3850 shape[3].x = -im2; shape[3].y = 0;
3851 shape[4].x = -im; shape[4].y = -im2;
3852 shape[5].x = -im2; shape[5].y = -im;
3853 shape[6].x = 0; shape[6].y = -im2;
3854 shape[7].x = im2; shape[7].y = -im;
3855 shape[8].x = im; shape[8].y = -im2;
3856 shape[9].x = im2; shape[9].y = 0;
3857 shape[10].x = im; shape[10].y = im2;
3858 shape[11].x = im2; shape[11].y = im;
3859 shape[12].x = 0; shape[12].y = im2;
3864 shape[0].x = 0; shape[0].y = im2;
3865 shape[1].x = -im2; shape[1].y = im;
3866 shape[2].x = -im; shape[2].y = im2;
3867 shape[3].x = -im2; shape[3].y = 0;
3868 shape[4].x = -im; shape[4].y = -im2;
3869 shape[5].x = -im2; shape[5].y = -im;
3870 shape[6].x = 0; shape[6].y = -im2;
3871 shape[7].x = im2; shape[7].y = -im;
3872 shape[8].x = im; shape[8].y = -im2;
3873 shape[9].x = im2; shape[9].y = 0;
3874 shape[10].x = im; shape[10].y = im2;
3875 shape[11].x = im2; shape[11].y = im;
3876 shape[12].x = 0; shape[12].y = im2;
3881 shape[0].x = 0; shape[0].y = im2*1.005;
3882 shape[1].x = -im2; shape[1].y = im;
3883 shape[2].x = -im; shape[2].y = im2;
3884 shape[3].x = -im2; shape[3].y = 0;
3885 shape[4].x = -im; shape[4].y = -im2;
3886 shape[5].x = -im2; shape[5].y = -im;
3887 shape[6].x = 0; shape[6].y = -im2;
3888 shape[7].x = im2; shape[7].y = -im;
3889 shape[8].x = im; shape[8].y = -im2;
3890 shape[9].x = im2; shape[9].y = 0;
3891 shape[10].x = im; shape[10].y = im2;
3892 shape[11].x = im2; shape[11].y = im;
3893 shape[12].x = 0; shape[12].y = im2*0.995;
3894 shape[13].x = im2*0.995; shape[13].y = 0;
3895 shape[14].x = 0; shape[14].y = -im2*0.995;
3896 shape[15].x = -im2*0.995; shape[15].y = 0;
3897 shape[16].x = 0; shape[16].y = im2*0.995;
3902 shape[0].x =-imx; shape[0].y =-imx*1.005;
3903 shape[1].x =-imx; shape[1].y = -im;
3904 shape[2].x = imx; shape[2].y = -im;
3905 shape[3].x = imx; shape[3].y =-imx;
3906 shape[4].x = im; shape[4].y =-imx;
3907 shape[5].x = im; shape[5].y = imx;
3908 shape[6].x = imx; shape[6].y = imx;
3909 shape[7].x = imx; shape[7].y = im;
3910 shape[8].x =-imx; shape[8].y = im;
3911 shape[9].x =-imx; shape[9].y = imx;
3912 shape[10].x = -im; shape[10].y = imx;
3913 shape[11].x = -im; shape[11].y =-imx;
3914 shape[12].x =-imx; shape[12].y =-imx*0.995;
3915 shape[13].x =-imx; shape[13].y = imx;
3916 shape[14].x = imx; shape[14].y = imx;
3917 shape[15].x = imx; shape[15].y =-imx;
3918 shape[16].x =-imx; shape[16].y =-imx*1.005;
3936 Int_t depth = gdk_visual_get_best_depth();
3938 if (depth <= 8)
return;
3939 if (percent == 0)
return;
3942 ULong_t *orgcolors = 0, *tmpc = 0;
3943 Int_t maxcolors = 0, ncolors, ntmpc = 0;
3946 if (
gCws->new_colors) {
3947 tmpc =
gCws->new_colors;
3948 ntmpc =
gCws->ncolors;
3951 GdkImage *image = gdk_image_get((GdkDrawable*)
gCws->drawing, 0, 0,
3956 for (
y = 0;
y < (int)
gCws->height;
y++) {
3957 for (
x = 0;
x < (int)
gCws->width;
x++) {
3959 CollectImageColors(pixel, orgcolors, ncolors, maxcolors);
3963 gdk_image_unref(image);
3964 ::operator
delete(orgcolors);
3971 for (
y = 0;
y < (int)
gCws->height;
y++) {
3972 for (
x = 0;
x < (int)
gCws->width;
x++) {
3980 gdk_draw_image(
gCws->drawing,
gGCpxmp, (GdkImage *)image,
3981 0, 0, 0, 0,
gCws->width,
gCws->height);
3986 gdk_colors_free((GdkColormap *)
fColormap, tmpc, ntmpc, 0);
3989 gdk_image_unref(image);
3990 ::operator
delete(orgcolors);
4000 if (ncolors <= 0)
return;
4001 GdkColor *xcol =
new GdkColor[ncolors];
4004 for (i = 0; i < ncolors; i++) {
4005 xcol[i].pixel = orgcolors[i];
4006 xcol[i].red = xcol[i].green = xcol[i].blue = 0;
4009 GdkColorContext *cc;
4010 cc = gdk_color_context_new(gdk_visual_get_system(), (GdkColormap *)
fColormap);
4011 gdk_color_context_query_colors(cc, xcol, ncolors);
4012 gdk_color_context_free(cc);
4017 for (i = 0; i < ncolors; i++) {
4018 val = xcol[i].red + add;
4023 val = xcol[i].green + add;
4028 val = xcol[i].blue + add;
4034 ret = gdk_color_alloc((GdkColormap *)
fColormap, &xcol[i]);
4038 "failed to allocate color %hd, %hd, %hd", xcol[i].red,
4039 xcol[i].green, xcol[i].blue);
4045 gCws->ncolors = ncolors;
4047 for (i = 0; i < ncolors; i++) {
4048 gCws->new_colors[i] = xcol[i].pixel;
4059 for (
int i = 0; i < ncolors; i++) {
4060 if (pixel == orgcolors[i])
return i;
4062 Error(
"FindColor",
"did not find color, should never happen!");
4080 xcol.pixel = RGB(xcol.red, xcol.green, xcol.blue);
4085 if (col.
color.red == xcol.red && col.
color.green == xcol.green &&
4086 col.
color.blue == xcol.blue)
4089 gdk_colormap_free_colors((GdkColormap *)
fColormap,
4090 (GdkColor *)&col, 1);
4096 col.
color.pixel = xcol.pixel;
4097 col.
color.red = xcol.red;
4098 col.
color.green = xcol.green;
4099 col.
color.blue = xcol.blue;
4112 if (talign==current)
return;
4115 Int_t txalh = talign / 10;
4116 Int_t txalv = talign % 10;
4171 static Int_t current = 0;
4173 if ((cindex < 0) || (
Int_t(cindex)==current))
return;
4178 gdk_gc_get_values(
gGCtext, &values);
4179 gdk_gc_set_foreground(
gGCinvt, &values.background);
4180 gdk_gc_set_background(
gGCinvt, &values.foreground);
4182 current =
Int_t(cindex);
4223 dw = (HWND) GDK_DRAWABLE_XID((GdkWindow *)
gCws->window);
4225 dw = (HWND) GDK_DRAWABLE_XID((GdkWindow *)
id);
4227 tmp.x = ix > 0 ? ix : cpt.x;
4228 tmp.y = iy > 0 ? iy : cpt.y;
4229 ClientToScreen(dw, &tmp);
4230 SetCursorPos(tmp.x, tmp.y);
4266 void (*get_scline) (
int,
int,
Byte_t *),
4270 int GIFinfo(
Byte_t * GIFarr,
int *Width,
int *Height,
int *Ncols);
4279 for (
int i = 0; i <
width; i++) {
4305 Int_t maxcolors = 0, ncolors;
4309 for (
x = 0;
x < (int)
gCws->width;
x++) {
4310 for (
y = 0;
y < (int)
gCws->height;
y++) {
4312 CollectImageColors(pixel, orgcolors, ncolors, maxcolors);
4317 GdkColor *xcol =
new GdkColor[ncolors];
4320 for (i = 0; i < ncolors; i++) {
4321 xcol[i].pixel = orgcolors[i];
4323 xcol[i].red = GetRValue(xcol[i].pixel);
4324 xcol[i].green = GetGValue(xcol[i].pixel);
4325 xcol[i].blue = GetBValue(xcol[i].pixel);
4328 GdkColorContext *cc;
4329 cc = gdk_color_context_new(gdk_visual_get_system(), (GdkColormap *)
fColormap);
4330 gdk_color_context_query_colors(cc, xcol, ncolors);
4331 gdk_color_context_free(cc);
4339 for (i = 0; i < ncolors; i++) {
4341 G[i] = xcol[i].green;
4342 B[i] = xcol[i].blue;
4347 for (
x = 0;
x < (int)
gCws->width;
x++) {
4348 for (
y = 0;
y < (int)
gCws->height;
y++) {
4357 ::operator
delete(orgcolors);
4365 Byte_t scline[2000],
r[256],
b[256],
g[256];
4367 Int_t ncol, maxcol, i;
4373 gGifImage = gdk_image_get((GdkDrawable*)
gCws->drawing, 0, 0,
4381 "can not create GIF of image containing more than 256 colors");
4389 for (i = 0; i < ncol; i++) {
4390 if (maxcol <
R[i]) maxcol =
R[i];
4391 if (maxcol <
G[i]) maxcol =
G[i];
4392 if (maxcol <
B[i]) maxcol =
B[i];
4398 for (i = 0; i < ncol; i++) {
4399 r[i] =
R[i] * 255 / maxcol;
4400 g[i] =
G[i] * 255 / maxcol;
4401 b[i] =
B[i] * 255 / maxcol;
4413 Error(
"WriteGIF",
"cannot write file: %s",
name);
4430 const int MAX_SEGMENT = 20;
4431 int i,
n,
x,
y, xcur,
x1,
x2, y1, y2;
4432 unsigned char *jimg, *jbase, icol;
4434 GdkSegment lines[256][MAX_SEGMENT];
4438 id = (GdkDrawable*)wid;
4443 for (i = 0; i < 256; i++) nlines[i] = 0;
4446 y1 = y0 + ny -
ymax - 1;
4448 y2 = y0 + ny -
ymin - 1;
4449 jbase = image + (
ymin - 1) * nx +
xmin;
4451 for (
y = y2;
y >= y1;
y--) {
4454 for (jimg = jbase, icol = *jimg++,
x =
x1 + 1;
x <=
x2; jimg++,
x++) {
4455 if (icol != *jimg) {
4456 if (icol != itran) {
4458 lines[icol][
n].x1 = xcur;
4459 lines[icol][
n].y1 =
y;
4460 lines[icol][
n].x2 =
x - 1;
4461 lines[icol][
n].y2 =
y;
4462 if (nlines[icol] == MAX_SEGMENT) {
4465 (GdkSegment *) &lines[icol][0], MAX_SEGMENT);
4473 if (icol != itran) {
4475 lines[icol][
n].x1 = xcur;
4476 lines[icol][
n].y1 =
y;
4477 lines[icol][
n].x2 =
x - 1;
4478 lines[icol][
n].y2 =
y;
4479 if (nlines[icol] == MAX_SEGMENT) {
4482 (GdkSegment *)&lines[icol][0], MAX_SEGMENT);
4488 for (i = 0; i < 256; i++) {
4489 if (nlines[i] != 0) {
4492 (GdkSegment *)&lines[icol][0], nlines[i]);
4505 unsigned char *GIFarr, *PIXarr,
R[256],
G[256],
B[256], *j1, *j2, icol;
4506 int i, j, k,
width, height, ncolor, irep, offset;
4510 fd = fopen(
file,
"r+b");
4512 Error(
"ReadGIF",
"unable to open GIF file");
4517 filesize =
Seek_t(ftell(fd));
4520 if (!(GIFarr = (
unsigned char *)
calloc(filesize + 256, 1))) {
4522 Error(
"ReadGIF",
"unable to allocate array for gif");
4526 if (fread(GIFarr, filesize, 1, fd) != 1) {
4528 Error(
"ReadGIF",
"GIF file read failed");
4539 if (!(PIXarr = (
unsigned char *)
calloc((
width * height), 1))) {
4540 Error(
"ReadGIF",
"unable to allocate array for image");
4552 for (i = 0; i < ncolor; i++) {
4562 for (i = 1; i <= height / 2; i++) {
4563 j1 = PIXarr + (i - 1) *
width;
4564 j2 = PIXarr + (height - i) *
width;
4565 for (k = 0; k <
width; k++) {
4573 PutImage(offset, -1, x0, y0,
width, height, 0, 0,
width-1, height-1, PIXarr, pic);
4575 if (pic)
return pic;
4588 gdk_window_show((GdkWindow *)
id);
4589 if ((GDK_DRAWABLE_TYPE((GdkWindow *)
id) != GDK_WINDOW_TEMP) &&
4591 HWND window = (HWND)GDK_DRAWABLE_XID((GdkWindow *)
id);
4592 ::SetForegroundWindow(window);
4603 EnumChildWindows((HWND)GDK_DRAWABLE_XID((GdkWindow *)
id),
4604 EnumChildProc, (LPARAM) NULL);
4614 HWND hwnd = ::GetForegroundWindow();
4615 HWND window = (HWND)GDK_DRAWABLE_XID((GdkWindow *)
id);
4616 gdk_window_show((GdkWindow *)
id);
4617 if (GDK_DRAWABLE_TYPE((GdkWindow *)
id) != GDK_WINDOW_TEMP) {
4618 ::BringWindowToTop(window);
4619 if (GDK_DRAWABLE_TYPE((GdkWindow *)
id) != GDK_WINDOW_CHILD)
4620 ::SetForegroundWindow(window);
4626 HWND fore = ::GetForegroundWindow();
4627 ::GetWindowRect(fore, &r2);
4628 if (!::IntersectRect(&r3, &r2, &r1)) {
4641 gdk_window_hide((GdkWindow *)
id);
4653 gdk_window_hide((GdkWindow *)
id);
4654 gdk_window_destroy((GdkDrawable *)
id,
kTRUE);
4664 gdk_window_destroy((GdkDrawable *)
id,
kFALSE);
4674 HWND window = (HWND)GDK_DRAWABLE_XID((GdkWindow *)
id);
4675 if (GDK_DRAWABLE_TYPE((GdkWindow *)
id) == GDK_WINDOW_TEMP) {
4676 ::SetWindowPos(window, HWND_TOPMOST, 0, 0, 0, 0,
4677 SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
4680 ::BringWindowToTop(window);
4681 if (GDK_DRAWABLE_TYPE((GdkWindow *)
id) != GDK_WINDOW_CHILD)
4682 ::SetForegroundWindow(window);
4693 HWND window = (HWND)GDK_DRAWABLE_XID((GdkWindow *)
id);
4694 ::SetWindowPos(window, HWND_BOTTOM, 0, 0, 0, 0,
4695 SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
4705 gdk_window_move((GdkDrawable *)
id,
x,
y);
4716 gdk_window_move_resize((GdkWindow *)
id,
x,
y, w,
h);
4729 gdk_window_resize((GdkWindow *)
id, w,
h);
4739 gdk_window_lower((GdkWindow *)
id);
4751 gdk_window_reparent((GdkWindow *)
id, (GdkWindow *)pid,
x,
y);
4763 back.red = GetRValue(color);
4764 back.green = GetGValue(color);
4765 back.blue = GetBValue(color);
4767 gdk_window_set_background((GdkWindow *)
id, &back);
4777 gdk_window_set_back_pixmap((GdkWindow *)
id, (GdkPixmap *) pxm, 0);
4789 GdkWindowAttr xattr;
4791 GdkColor background_color;
4796 xattr.window_type = GDK_WINDOW_CHILD;
4798 xattr.window_type = GDK_WINDOW_TOPLEVEL;
4801 xattr.window_type = GDK_WINDOW_DIALOG;
4804 xattr.window_type = GDK_WINDOW_TEMP;
4806 newWin = gdk_window_new((GdkWindow *) parent, &xattr, xmask);
4810 xattr.wclass = GDK_INPUT_OUTPUT;
4811 xattr.event_mask = 0
L;
4812 xattr.event_mask |= GDK_EXPOSURE_MASK | GDK_STRUCTURE_MASK |
4813 GDK_PROPERTY_CHANGE_MASK;
4825 xattr.colormap = gdk_colormap_get_system();
4826 xattr.cursor = NULL;
4827 xattr.override_redirect =
TRUE;
4828 if ((xattr.y > 0) && (xattr.x > 0)) {
4829 xmask = GDK_WA_X | GDK_WA_Y | GDK_WA_COLORMAP |
4830 GDK_WA_WMCLASS | GDK_WA_NOREDIR;
4832 xmask = GDK_WA_COLORMAP | GDK_WA_WMCLASS | GDK_WA_NOREDIR;
4834 if (visual != NULL) {
4835 xattr.visual = (GdkVisual *) visual;
4836 xmask |= GDK_WA_VISUAL;
4838 xattr.visual = gdk_visual_get_system();
4839 xmask |= GDK_WA_VISUAL;
4841 xattr.window_type = GDK_WINDOW_CHILD;
4843 xattr.window_type = GDK_WINDOW_TOPLEVEL;
4846 xattr.window_type = GDK_WINDOW_DIALOG;
4849 xattr.window_type = GDK_WINDOW_TEMP;
4851 newWin = gdk_window_new((GdkWindow *) parent, &xattr, xmask);
4852 gdk_window_set_events(newWin, (GdkEventMask) 0
L);
4855 gdk_window_set_decorations(newWin,
4856 (GdkWMDecoration) GDK_DECOR_BORDER);
4861 gdk_window_set_back_pixmap(newWin, (GdkPixmap *) GDK_NONE, 0);
4863 gdk_window_set_back_pixmap(newWin, (GdkPixmap *) GDK_NONE, 1);
4865 gdk_window_set_back_pixmap(newWin,
4866 (GdkPixmap *) attr->
4867 fBackgroundPixmap, 0);
4875 gdk_window_set_background(newWin, &background_color);
4879 ::SetClassLong((HWND)GDK_DRAWABLE_XID(newWin), GCL_HCURSOR,
4893 lxemask |= GDK_KEY_PRESS_MASK;
4896 lxemask |= GDK_KEY_RELEASE_MASK;
4899 lxemask |= GDK_BUTTON_PRESS_MASK;
4902 lxemask |= GDK_BUTTON_RELEASE_MASK;
4905 lxemask |= GDK_POINTER_MOTION_MASK;
4908 lxemask |= GDK_BUTTON_MOTION_MASK;
4911 lxemask |= GDK_EXPOSURE_MASK;
4914 lxemask |= GDK_STRUCTURE_MASK;
4917 lxemask |= GDK_ENTER_NOTIFY_MASK;
4920 lxemask |= GDK_LEAVE_NOTIFY_MASK;
4923 lxemask |= GDK_FOCUS_CHANGE_MASK;
4925 xemask = (
UInt_t) lxemask;
4928 if ((xemask & GDK_KEY_PRESS_MASK)) {
4931 if ((xemask & GDK_KEY_RELEASE_MASK)) {
4934 if ((xemask & GDK_BUTTON_PRESS_MASK)) {
4937 if ((xemask & GDK_BUTTON_RELEASE_MASK)) {
4940 if ((xemask & GDK_POINTER_MOTION_MASK)) {
4943 if ((xemask & GDK_BUTTON_MOTION_MASK)) {
4946 if ((xemask & GDK_EXPOSURE_MASK)) {
4949 if ((xemask & GDK_STRUCTURE_MASK)) {
4952 if ((xemask & GDK_ENTER_NOTIFY_MASK)) {
4955 if ((xemask & GDK_LEAVE_NOTIFY_MASK)) {
4958 if ((xemask & GDK_FOCUS_CHANGE_MASK)) {
4969 GdkWindowAttr & xattr)
4975 xmask |= GDK_WA_NOREDIR;
4981 xattr.event_mask = xmsk;
4984 xmask |= GDK_WA_COLORMAP;
4985 xattr.colormap = (GdkColormap *) attr->
fColormap;
4988 xmask |= GDK_WA_CURSOR;
4990 xattr.cursor = (GdkCursor *) attr->
fCursor;
4993 xattr.wclass = GDK_INPUT_OUTPUT;
5009 xmask |= GDK_GC_FUNCTION;
5012 xgval.function = GDK_CLEAR;
5015 xgval.function = GDK_AND;
5018 xgval.function = GDK_AND_REVERSE;
5021 xgval.function = GDK_COPY;
5024 xgval.function = GDK_AND_INVERT;
5027 xgval.function = GDK_NOOP;
5030 xgval.function = GDK_XOR;
5033 xgval.function = GDK_OR;
5036 xgval.function = GDK_EQUIV;
5039 xgval.function = GDK_INVERT;
5042 xgval.function = GDK_OR_REVERSE;
5045 xgval.function = GDK_COPY_INVERT;
5048 xgval.function = GDK_OR_INVERT;
5051 xgval.function = GDK_NAND;
5054 xgval.function = GDK_SET;
5059 xmask |= GDK_GC_SUBWINDOW;
5061 xgval.subwindow_mode = GDK_INCLUDE_INFERIORS;
5063 xgval.subwindow_mode = GDK_CLIP_BY_CHILDREN;
5067 xmask |= GDK_GC_FOREGROUND;
5069 xgval.foreground.red = GetRValue(gval.
fForeground);
5070 xgval.foreground.green = GetGValue(gval.
fForeground);
5071 xgval.foreground.blue = GetBValue(gval.
fForeground);
5074 xmask |= GDK_GC_BACKGROUND;
5076 xgval.background.red = GetRValue(gval.
fBackground);
5077 xgval.background.green = GetGValue(gval.
fBackground);
5078 xgval.background.blue = GetBValue(gval.
fBackground);
5081 xmask |= GDK_GC_LINE_WIDTH;
5085 xmask |= GDK_GC_LINE_STYLE;
5086 xgval.line_style = (GdkLineStyle) gval.
fLineStyle;
5089 xmask |= GDK_GC_CAP_STYLE;
5090 xgval.cap_style = (GdkCapStyle) gval.
fCapStyle;
5093 xmask |= GDK_GC_JOIN_STYLE;
5094 xgval.join_style = (GdkJoinStyle) gval.
fJoinStyle;
5097 xmask |= GDK_GC_FILL;
5101 xmask |= GDK_GC_TILE;
5102 xgval.tile = (GdkPixmap *) gval.
fTile;
5105 xmask |= GDK_GC_STIPPLE;
5106 xgval.stipple = (GdkPixmap *) gval.
fStipple;
5109 xmask |= GDK_GC_TS_X_ORIGIN;
5113 xmask |= GDK_GC_TS_Y_ORIGIN;
5117 xmask |= GDK_GC_FONT;
5118 xgval.font = (GdkFont *) gval.
fFont;
5121 xmask |= GDK_GC_EXPOSURES;
5125 xmask |= GDK_GC_CLIP_X_ORIGIN;
5129 xmask |= GDK_GC_CLIP_Y_ORIGIN;
5133 xmask |= GDK_GC_CLIP_MASK;
5134 xgval.clip_mask = (GdkPixmap *) gval.
fClipMask;
5140 if ((xmask & GDK_GC_FUNCTION)) {
5143 switch (xgval.function) {
5150 case GDK_AND_REVERSE:
5156 case GDK_AND_INVERT:
5174 case GDK_OR_REVERSE:
5177 case GDK_COPY_INVERT:
5191 if (xmask & GDK_GC_SUBWINDOW) {
5193 if (xgval.subwindow_mode == GDK_INCLUDE_INFERIORS)
5198 if ((xmask & GDK_GC_FOREGROUND)) {
5202 if ((xmask & GDK_GC_BACKGROUND)) {
5206 if ((xmask & GDK_GC_LINE_WIDTH)) {
5210 if ((xmask & GDK_GC_LINE_STYLE)) {
5214 if ((xmask & GDK_GC_CAP_STYLE)) {
5218 if ((xmask & GDK_GC_JOIN_STYLE)) {
5222 if ((xmask & GDK_GC_FILL)) {
5226 if ((xmask & GDK_GC_TILE)) {
5230 if ((xmask & GDK_GC_STIPPLE)) {
5234 if ((xmask & GDK_GC_TS_X_ORIGIN)) {
5238 if ((xmask & GDK_GC_TS_Y_ORIGIN)) {
5242 if ((xmask & GDK_GC_FONT)) {
5246 if ((xmask & GDK_GC_EXPOSURES)) {
5250 if ((xmask & GDK_GC_CLIP_X_ORIGIN)) {
5254 if ((xmask & GDK_GC_CLIP_Y_ORIGIN)) {
5258 if ((xmask & GDK_GC_CLIP_MASK)) {
5273 RECT rcClient, rcWind;
5274 ::GetClientRect((HWND)GDK_DRAWABLE_XID((GdkWindow *)
id), &rcClient);
5275 ::GetWindowRect((HWND)GDK_DRAWABLE_XID((GdkWindow *)
id), &rcWind);
5277 gdk_window_get_geometry((GdkWindow *)
id, &attr.
fX, &attr.
fY,
5279 attr.
fX = ((rcWind.right - rcWind.left) - rcClient.right) / 2;
5280 attr.
fY = ((rcWind.bottom - rcWind.top) - rcClient.bottom) - attr.
fX;
5285 attr.
fVisual = gdk_window_get_visual((GdkWindow *)
id);
5292 if (!gdk_window_is_visible((GdkWindow *)
id)) {
5294 }
else if (!gdk_window_is_viewable((GdkWindow *)
id)) {
5300 UInt_t tmp_mask = (
UInt_t)gdk_window_get_events((GdkWindow *)
id);
5320 return gdk_visual_get_best_depth();
5330 GdkAtom
a = gdk_atom_intern((
const gchar *) atom_name, only_if_exist);
5332 if (
a == None)
return kNone;
5342 return (
Window_t) GDK_ROOT_PARENT();
5352 return (
Window_t)gdk_window_get_parent((GdkWindow *)
id);
5362 char family[100], weight[32], slant[32], fontname[256];
5363 Int_t n1, pixel, numfields;
5365 numfields = sscanf(font_name,
"%s -%d%n", family, &pixel, &n1);
5366 if (numfields == 2) {
5367 sprintf(weight,
"medium");
5368 if (strstr(font_name,
"bold"))
5369 sprintf(weight,
"bold");
5371 if (strstr(font_name,
"italic"))
5373 sprintf(fontname,
"-*-%s-%s-%s-*-*-%d-*-*-*-*-*-iso8859-1",
5374 family, weight, slant, pixel);
5377 sprintf(fontname,
"%s", font_name);
5387 return (
FontH_t)gdk_font_ref((GdkFont *) fs);
5397 gdk_font_unref((GdkFont *) fs);
5413 xgval.subwindow_mode = GDK_CLIP_BY_CHILDREN;
5415 GdkGC *gc = gdk_gc_new_with_values((GdkDrawable *)
id,
5416 &xgval, (GdkGCValuesMask)xmask);
5434 gdk_gc_set_foreground((GdkGC *) gc, &xgval.foreground);
5437 gdk_gc_set_background((GdkGC *) gc, &xgval.background);
5440 gdk_gc_set_font((GdkGC *) gc, xgval.font);
5443 gdk_gc_set_function((GdkGC *) gc, xgval.function);
5446 gdk_gc_set_fill((GdkGC *) gc, xgval.fill);
5449 gdk_gc_set_tile((GdkGC *) gc, xgval.tile);
5452 gdk_gc_set_stipple((GdkGC *) gc, xgval.stipple);
5455 gdk_gc_set_ts_origin((GdkGC *) gc, xgval.ts_x_origin,
5459 gdk_gc_set_clip_origin((GdkGC *) gc, xgval.clip_x_origin,
5460 xgval.clip_y_origin);
5463 gdk_gc_set_clip_mask((GdkGC *) gc, xgval.clip_mask);
5466 gdk_gc_set_exposures((GdkGC *) gc, xgval.graphics_exposures);
5469 gdk_gc_set_values((GdkGC *) gc, &xgval, GDK_GC_LINE_WIDTH);
5472 gdk_gc_set_values((GdkGC *) gc, &xgval, GDK_GC_LINE_STYLE);
5475 gdk_gc_set_values((GdkGC *) gc, &xgval, GDK_GC_CAP_STYLE);
5478 gdk_gc_set_values((GdkGC *) gc, &xgval, GDK_GC_JOIN_STYLE);
5481 gdk_gc_set_subwindow((GdkGC *) gc, xgval.subwindow_mode);
5503 gdk_gc_copy((GdkGC *)
dest, (GdkGC *)
org);
5511 gdk_gc_unref((GdkGC *) gc);
5528 GdkWindow *wid = (GdkWindow *)
id;
5529 if (!
id) wid = GDK_ROOT_PARENT();
5531 return (
Pixmap_t) gdk_pixmap_new(wid, w,
h, gdk_visual_get_best_depth());
5543 GdkColor fore, back;
5544 fore.pixel = forecolor;
5545 fore.red = GetRValue(forecolor);
5546 fore.green = GetGValue(forecolor);
5547 fore.blue = GetBValue(forecolor);
5549 back.pixel = backcolor;
5550 back.red = GetRValue(backcolor);
5551 back.green = GetGValue(backcolor);
5552 back.blue = GetBValue(backcolor);
5554 GdkWindow *wid = (GdkWindow *)
id;
5555 if (!
id) wid = GDK_ROOT_PARENT();
5557 return (
Pixmap_t) gdk_pixmap_create_from_data(wid, (
char *) bitmap,
width,
5558 height, depth, &fore, &back);
5567 GdkWindow *wid = (GdkWindow *)
id;
5568 if (!
id) wid = GDK_ROOT_PARENT();
5571 (
char *)bitmap,
width, height);
5580 gdk_pixmap_unref((GdkPixmap *) pmap);
5593 GdkBitmap *gdk_pixmap_mask;
5594 if (strstr(filename,
".xpm") || strstr(filename,
".XPM")) {
5595 GdkWindow *wid = (GdkWindow *)
id;
5596 if (!
id) wid = GDK_ROOT_PARENT();
5598 pict = (
Pixmap_t) gdk_pixmap_create_from_xpm(wid, &gdk_pixmap_mask, 0,
5600 pict_mask = (
Pixmap_t) gdk_pixmap_mask;
5601 }
else if (strstr(filename,
".gif") || strstr(filename,
".GIF")) {
5602 pict =
ReadGIF(0, 0, filename,
id);
5606 gdk_drawable_get_size((GdkPixmap *) pict, (
int *) &attr.
fWidth,
5627 GdkBitmap *gdk_pixmap_mask;
5628 GdkWindow *wid = (GdkWindow *)
id;
5629 if (!
id) wid = GDK_ROOT_PARENT();
5631 pict = (
Pixmap_t) gdk_pixmap_create_from_xpm_d(wid, &gdk_pixmap_mask, 0,
5633 pict_mask = (
Pixmap_t) gdk_pixmap_mask;
5651 GdkPixmap *pxm = gdk_pixmap_create_from_xpm(NULL, NULL, NULL, filename);
5654 if (pxm==NULL)
return kFALSE;
5656 HBITMAP hbm = (HBITMAP)GDK_DRAWABLE_XID(pxm);
5659 ret = ::GetObject(hbm,
sizeof(HBITMAP), (LPVOID)&bitmap);
5660 ret_data = (
char ***)&bitmap.bmBits;
5661 gdk_pixmap_unref(pxm);
5683 for (i = 0; i <
n; i++) {
5684 dashes[i] = (gint8) dash_list[i];
5686 for (i =
n; i < 32; i++) {
5687 dashes[i] = (gint8) 0;
5690 gdk_gc_set_dashes((GdkGC *) gc, offset, dashes,
n);
5698 xcolor.pixel = color->
fPixel;
5699 xcolor.red = color->
fRed;
5700 xcolor.green = color->
fGreen;
5701 xcolor.blue = color->
fBlue;
5716 if (gdk_color_parse((
char *)cname, &xc)) {
5717 color.
fPixel = xc.pixel = RGB(xc.red, xc.green, xc.blue);
5718 color.
fRed = xc.red;
5720 color.
fBlue = xc.blue;
5736 xc.red = color.
fRed;
5738 xc.blue = color.
fBlue;
5740 status = gdk_colormap_alloc_color((GdkColormap *) cmap, &xc,
FALSE,
TRUE);
5756 GdkColorContext *cc = gdk_color_context_new(gdk_visual_get_system(),
fColormap);
5757 gdk_color_context_query_color(cc, &xc);
5758 gdk_color_context_free(cc);
5761 color.
fRed = xc.red;
5763 color.
fBlue = xc.blue;
5789 tev.
fX = tev.
fY = 0;
5800 TGWin32MainThread::LockMSG();
5802 Bool_t r = gdk_check_typed_window_event((GdkWindow *)
id, xev.type, &xev);
5805 TGWin32MainThread::UnlockMSG();
5815 if (!ev || !
id)
return;
5817 TGWin32MainThread::LockMSG();
5820 gdk_event_put(&xev);
5821 TGWin32MainThread::UnlockMSG();
5831 TGWin32MainThread::LockMSG();
5832 ret = (
Int_t)gdk_event_queue_find_first();
5833 TGWin32MainThread::UnlockMSG();
5845 TGWin32MainThread::LockMSG();
5846 GdkEvent *xev = gdk_event_unqueue();
5851 TGWin32MainThread::UnlockMSG();
5855 gdk_event_free (xev);
5856 TGWin32MainThread::UnlockMSG();
5867 xstate = GDK_MODIFIER_MASK;
5878 switch (event.type) {
5879 case GDK_MOTION_NOTIFY:
5880 event.motion.time = time;
5881 case GDK_BUTTON_PRESS:
5882 case GDK_2BUTTON_PRESS:
5883 case GDK_3BUTTON_PRESS:
5884 case GDK_BUTTON_RELEASE:
5886 event.button.time = time;
5888 case GDK_KEY_RELEASE:
5889 event.key.time = time;
5890 case GDK_ENTER_NOTIFY:
5891 case GDK_LEAVE_NOTIFY:
5892 event.crossing.time = time;
5893 case GDK_PROPERTY_NOTIFY:
5894 event.property.time = time;
5895 case GDK_SELECTION_CLEAR:
5896 case GDK_SELECTION_REQUEST:
5897 case GDK_SELECTION_NOTIFY:
5898 event.selection.time = time;
5899 case GDK_PROXIMITY_IN:
5900 case GDK_PROXIMITY_OUT:
5901 event.proximity.time = time;
5902 case GDK_DRAG_ENTER:
5903 case GDK_DRAG_LEAVE:
5904 case GDK_DRAG_MOTION:
5905 case GDK_DRAG_STATUS:
5906 case GDK_DROP_START:
5907 case GDK_DROP_FINISHED:
5908 event.dnd.time = time;
5922 xev.type = GDK_NOTHING;
5924 xev.type = GDK_KEY_PRESS;
5926 xev.type = GDK_KEY_RELEASE;
5928 xev.type = GDK_BUTTON_PRESS;
5930 xev.type = GDK_BUTTON_RELEASE;
5932 xev.type = GDK_MOTION_NOTIFY;
5934 xev.type = GDK_ENTER_NOTIFY;
5936 xev.type = GDK_LEAVE_NOTIFY;
5938 xev.type = GDK_EXPOSE;
5940 xev.type = GDK_CONFIGURE;
5944 xev.type = GDK_UNMAP;
5946 xev.type = GDK_DESTROY;
5948 xev.type = GDK_CLIENT_EVENT;
5950 xev.type = GDK_SELECTION_CLEAR;
5952 xev.type = GDK_SELECTION_REQUEST;
5954 xev.type = GDK_SELECTION_NOTIFY;
5956 xev.any.type = xev.type;
5959 xev.any.window = (GdkWindow *) ev.
fWindow;
5962 xev.type = GDK_FOCUS_CHANGE;
5963 xev.focus_change.type = xev.type;
5964 xev.focus_change.window = (GdkWindow *) ev.
fWindow;
5965 xev.focus_change.in =
TRUE;
5968 xev.type = GDK_FOCUS_CHANGE;
5969 xev.focus_change.type = xev.type;
5970 xev.focus_change.window = (GdkWindow *) ev.
fWindow;
5971 xev.focus_change.in =
FALSE;
5974 xev.key.window = (GdkWindow *) ev.
fWindow;
5975 xev.key.type = xev.type;
5977 xev.key.keyval = ev.
fCode;
5980 xev.button.window = (GdkWindow *) ev.
fWindow;
5981 xev.button.type = xev.type;
5982 xev.button.x = ev.
fX;
5983 xev.button.y = ev.
fY;
5984 xev.button.x_root = ev.
fXRoot;
5985 xev.button.y_root = ev.
fYRoot;
5987 xev.button.button = ev.
fCode;
5990 xev.selection.window = (GdkWindow *) ev.
fUser[0];
5991 xev.selection.requestor = (guint32) ev.
fUser[0];
5992 xev.selection.selection = (GdkAtom) ev.
fUser[1];
5993 xev.selection.target = (GdkAtom) ev.
fUser[2];
5994 xev.selection.property = (GdkAtom) ev.
fUser[3];
5995 xev.selection.type = xev.type;
5999 xev.type = GDK_DELETE;
6000 xev.any.type = xev.type;
6001 xev.any.window = (GdkWindow *) ev.
fWindow;
6003 xev.client.window = (GdkWindow *) ev.
fWindow;
6004 xev.client.type = xev.type;
6005 xev.client.message_type = (GdkAtom) ev.
fHandle;
6006 xev.client.data_format = ev.
fFormat;
6007 xev.client.data.l[0] = ev.
fUser[0];
6008 if (
sizeof(ev.
fUser[0]) > 4) {
6010 xev.client.data.l[3]);
6012 xev.client.data.l[4]);
6014 xev.client.data.l[1] = ev.
fUser[1];
6015 xev.client.data.l[2] = ev.
fUser[2];
6016 xev.client.data.l[3] = ev.
fUser[3];
6017 xev.client.data.l[4] = ev.
fUser[4];
6022 xev.motion.window = (GdkWindow *) ev.
fWindow;
6023 xev.motion.type = xev.type;
6024 xev.motion.x = ev.
fX;
6025 xev.motion.y = ev.
fY;
6026 xev.motion.x_root = ev.
fXRoot;
6027 xev.motion.y_root = ev.
fYRoot;
6030 xev.crossing.window = (GdkWindow *) ev.
fWindow;
6031 xev.crossing.type = xev.type;
6032 xev.crossing.x = ev.
fX;
6033 xev.crossing.y = ev.
fY;
6034 xev.crossing.x_root = ev.
fXRoot;
6035 xev.crossing.y_root = ev.
fYRoot;
6036 xev.crossing.mode = (GdkCrossingMode) ev.
fCode;
6040 xev.expose.window = (GdkWindow *) ev.
fWindow;
6041 xev.expose.type = xev.type;
6042 xev.expose.area.x = ev.
fX;
6043 xev.expose.area.y = ev.
fY;
6044 xev.expose.area.width = ev.
fWidth;
6045 xev.expose.area.height = ev.
fHeight;
6046 xev.expose.count = ev.
fCount;
6049 xev.configure.window = (GdkWindow *) ev.
fWindow;
6050 xev.configure.type = xev.type;
6051 xev.configure.x = ev.
fX;
6052 xev.configure.y = ev.
fY;
6053 xev.configure.width = ev.
fWidth;
6054 xev.configure.height = ev.
fHeight;
6057 xev.selection.window = (GdkWindow *) ev.
fWindow;
6058 xev.selection.type = xev.type;
6059 xev.selection.selection = ev.
fUser[0];
6062 xev.selection.window = (GdkWindow *) ev.
fUser[0];
6063 xev.selection.type = xev.type;
6064 xev.selection.selection = ev.
fUser[1];
6065 xev.selection.target = ev.
fUser[2];
6066 xev.selection.property = ev.
fUser[3];
6069 xev.any.window = (GdkWindow *) ev.
fWindow;
6071 if (xev.type != GDK_CLIENT_EVENT)
6076 if (xev.type == GDK_KEY_PRESS)
6078 if (xev.type == GDK_KEY_RELEASE)
6080 if (xev.type == GDK_BUTTON_PRESS)
6082 if (xev.type == GDK_BUTTON_RELEASE)
6084 if (xev.type == GDK_MOTION_NOTIFY)
6086 if (xev.type == GDK_ENTER_NOTIFY)
6088 if (xev.type == GDK_LEAVE_NOTIFY)
6090 if (xev.type == GDK_EXPOSE)
6092 if (xev.type == GDK_CONFIGURE)
6094 if (xev.type == GDK_MAP)
6096 if (xev.type == GDK_UNMAP)
6098 if (xev.type == GDK_DESTROY)
6100 if (xev.type == GDK_SELECTION_CLEAR)
6102 if (xev.type == GDK_SELECTION_REQUEST)
6104 if (xev.type == GDK_SELECTION_NOTIFY)
6108 ev.
fTime = gdk_event_get_time((GdkEvent *)&xev);
6111 if ((xev.type == GDK_MAP) || (xev.type == GDK_UNMAP)) {
6114 if (xev.type == GDK_DELETE) {
6120 if (
sizeof(ev.
fUser[0]) > 4) {
6121 AsmLong(xev.client.data.l[1], xev.client.data.l[3],
6123 AsmLong(xev.client.data.l[2], xev.client.data.l[4],
6132 if (xev.type == GDK_DESTROY) {
6137 if (xev.type == GDK_FOCUS_CHANGE) {
6141 if (xev.focus_change.in ==
TRUE) {
6150 ev.
fCode = xev.key.keyval;
6151 ev.
fUser[1] = xev.key.length;
6152 if (xev.key.length > 0) ev.
fUser[2] = xev.key.string[0];
6153 if (xev.key.length > 1) ev.
fUser[3] = xev.key.string[1];
6154 if (xev.key.length > 2) ev.
fUser[4] = xev.key.string[2];
6155 HWND tmpwin = (HWND) GetWindow((HWND) GDK_DRAWABLE_XID((GdkWindow *)xev.key.window), GW_CHILD);
6157 ev.
fUser[0] = (
ULong_t) gdk_xid_table_lookup((HANDLE)tmpwin);
6164 ev.
fX = xev.button.x;
6165 ev.
fY = xev.button.y;
6166 ev.
fXRoot = xev.button.x_root;
6167 ev.
fYRoot = xev.button.y_root;
6169 ev.
fCode = xev.button.button;
6171 tpoint.x = xev.button.x;
6172 tpoint.y = xev.button.y;
6173 HWND tmpwin = ChildWindowFromPoint((HWND) GDK_DRAWABLE_XID((GdkWindow *)xev.button.window), tpoint);
6175 ev.
fUser[0] = (
ULong_t) gdk_xid_table_lookup((HANDLE)tmpwin);
6182 ev.
fX = xev.motion.x;
6183 ev.
fY = xev.motion.y;
6184 ev.
fXRoot = xev.motion.x_root;
6185 ev.
fYRoot = xev.motion.y_root;
6189 tpoint.x = xev.button.x;
6190 tpoint.y = xev.button.y;
6191 HWND tmpwin = ChildWindowFromPoint((HWND) GDK_DRAWABLE_XID((GdkWindow *)xev.motion.window), tpoint);
6193 ev.
fUser[0] = (
ULong_t)gdk_xid_table_lookup((HANDLE)tmpwin);
6200 ev.
fX = xev.crossing.x;
6201 ev.
fY = xev.crossing.y;
6202 ev.
fXRoot = xev.crossing.x_root;
6203 ev.
fYRoot = xev.crossing.y_root;
6204 ev.
fCode = xev.crossing.mode;
6209 ev.
fX = xev.expose.area.x;
6210 ev.
fY = xev.expose.area.y;
6211 ev.
fWidth = xev.expose.area.width;
6212 ev.
fHeight = xev.expose.area.height;
6213 ev.
fCount = xev.expose.count;
6217 ev.
fX = xev.configure.x;
6218 ev.
fY = xev.configure.y;
6219 ev.
fWidth = xev.configure.width;
6220 ev.
fHeight = xev.configure.height;
6222 if (xev.type == GDK_CLIENT_EVENT) {
6225 ev.
fHandle = xev.client.message_type;
6226 ev.
fFormat = xev.client.data_format;
6227 ev.
fUser[0] = xev.client.data.l[0];
6228 if (
sizeof(ev.
fUser[0]) > 4) {
6229 AsmLong(xev.client.data.l[1], xev.client.data.l[3],
6231 AsmLong(xev.client.data.l[2], xev.client.data.l[4],
6234 ev.
fUser[1] = xev.client.data.l[1];
6235 ev.
fUser[2] = xev.client.data.l[2];
6236 ev.
fUser[3] = xev.client.data.l[3];
6237 ev.
fUser[4] = xev.client.data.l[4];
6242 ev.
fUser[0] = xev.selection.selection;
6247 ev.
fUser[1] = xev.selection.selection;
6248 ev.
fUser[2] = xev.selection.target;
6249 ev.
fUser[3] = xev.selection.property;
6254 ev.
fUser[1] = xev.selection.selection;
6255 ev.
fUser[2] = xev.selection.target;
6256 ev.
fUser[3] = xev.selection.property;
6258 if (xev.type == GDK_SCROLL) {
6260 if (xev.scroll.direction == GDK_SCROLL_UP) {
6262 }
else if (xev.scroll.direction == GDK_SCROLL_DOWN) {
6266 ev.
fX = xev.scroll.x;
6267 ev.
fY = xev.scroll.y;
6268 ev.
fXRoot = xev.scroll.x_root;
6269 ev.
fYRoot = xev.scroll.y_root;
6271 tpoint.x = xev.scroll.x;
6272 tpoint.y = xev.scroll.y;
6273 HWND tmpwin = ChildWindowFromPoint((HWND) GDK_DRAWABLE_XID((GdkWindow *)xev.scroll.window), tpoint);
6275 ev.
fUser[0] = (
ULong_t)gdk_xid_table_lookup((HANDLE)tmpwin);
6300 if (!src || !
dest)
return;
6302 gdk_window_copy_area((GdkDrawable *)
dest, (GdkGC *) gc, dest_x, dest_y,
6303 (GdkDrawable *) src, src_x, src_y,
width, height);
6320 gdk_window_set_events((GdkWindow *)
id, (GdkEventMask) xevmask);
6327 gdk_window_set_background((GdkWindow *)
id, &color);
6332 gdk_window_set_back_pixmap((GdkWindow *)
id,
6336 gdk_window_set_cursor((GdkWindow *)
id, (GdkCursor *) attr->
fCursor);
6339 gdk_window_set_colormap((GdkWindow *)
id,(GdkColormap *) attr->
fColormap);
6343 gdk_window_set_decorations((GdkWindow *)
id,
6344 (GdkWMDecoration) GDK_DECOR_BORDER);
6359 gdk_property_change((GdkWindow *)
id, (GdkAtom) property,
6360 (GdkAtom)
type, 8, GDK_PROP_MODE_REPLACE, data,len);
6371 gdk_draw_line((GdkDrawable *)
id, (GdkGC *) gc,
x1, y1,
x2, y2);
6381 gdk_window_clear_area((GdkWindow *)
id,
x,
y, w,
h);
6392 prop = (
Atom_t) gdk_atom_intern(
"WM_DELETE_WINDOW",
FALSE);
6394 W32ChangeProperty((HWND) GDK_DRAWABLE_XID((GdkWindow *)
id),
6395 prop,
XA_ATOM, 32, GDK_PROP_MODE_REPLACE,
6405 gdk_key_repeat_restore();
6407 gdk_key_repeat_disable();
6424 gdk_key_grab(keycode, (GdkEventMask)xmod, (GdkWindow *)
id);
6426 gdk_key_ungrab(keycode, (GdkEventMask)xmod, (GdkWindow *)
id);
6449 gdk_button_grab(button, xmod, ( GdkWindow *)
id, 1, (GdkEventMask)xevmask,
6450 (GdkWindow*)confine, (GdkCursor*)cursor);
6452 gdk_button_ungrab(button, xmod, ( GdkWindow *)
id);
6468 if(!::IsWindowVisible((HWND)GDK_DRAWABLE_XID(
id)))
return;
6469 gdk_pointer_grab((GdkWindow *)
id, owner_events, (GdkEventMask) xevmask,
6470 (GdkWindow *) confine, (GdkCursor *) cursor,
6473 gdk_pointer_ungrab(GDK_CURRENT_TIME);
6485 gdk_window_set_title((GdkWindow *)
id,
name);
6495 gdk_window_set_icon_name((GdkWindow *)
id,
name);
6505 gdk_window_set_icon((GdkWindow *)
id, NULL, (GdkPixmap *)pic, (GdkPixmap *)pic);
6508#define safestrlen(s) ((s) ? strlen(s) : 0)
6522 prop = gdk_atom_intern(
"WM_CLASS",
kFALSE);
6527 if ((class_string =
s =
6528 (
char *)
malloc((
unsigned) (len_nm + len_cl + 2)))) {
6530 strcpy(
s, resourceName);
6535 strcpy(
s, className);
6540 W32ChangeProperty((HWND) GDK_DRAWABLE_XID((GdkWindow *)
id),
6542 GDK_PROP_MODE_REPLACE,
6543 (
unsigned char *) class_string,
6544 len_nm + len_cl + 2);
6557 gdk_window_set_decorations((GdkDrawable *)
id, (GdkWMDecoration) value);
6558 gdk_window_set_functions((GdkDrawable *)
id, (GdkWMFunction) funcs);
6568 gdk_window_move((GdkDrawable *)
id,
x,
y);
6578 gdk_window_resize((GdkWindow *)
id, w,
h);
6592 GdkWindowHints flags;
6594 flags = (GdkWindowHints) (GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE |
6595 GDK_HINT_RESIZE_INC);
6596 hints.min_width = (
Int_t) wmin;
6597 hints.max_width = (
Int_t) wmax;
6598 hints.min_height = (
Int_t) hmin;
6599 hints.max_height = (
Int_t) hmax;
6600 hints.width_inc = (
Int_t) winc;
6601 hints.height_inc = (
Int_t) hinc;
6603 gdk_window_set_geometry_hints((GdkWindow *)
id, (GdkGeometry *) &hints,
6604 (GdkWindowHints) flags);
6616 Int_t xstate = NormalState;
6619 xstate = NormalState;
6621 xstate = IconicState;
6623 hints.flags = StateHint;
6624 hints.initial_state = xstate;
6626 XSetWMHints((GdkWindow *)
id, &hints);
6637 gdk_window_set_transient_for((GdkWindow *)
id, (GdkWindow *) main_id);
6644 const char *
s,
Int_t len)
6649 gdk_gc_get_values((GdkGC *) gc, &values);
6651 (GdkGC *) gc,
x,
y, (
const gchar *)
s, len);
6659 return gdk_text_width((GdkFont *)font,
s, len);
6666 Int_t & max_descent)
6668 GdkFont *
f = (GdkFont *) font;
6669 max_ascent =
f->ascent;
6670 max_descent =
f->descent;
6683 gdk_gc_get_values((GdkGC *) gc, &xgval);
6701 gdk_font_unref((GdkFont *) fs);
6711 gdk_window_clear((GdkDrawable *)
id);
6771 gdk_window_set_events((GdkWindow *)
id, (GdkEventMask)xevmask);
6779 HWND hwnd = ::GetFocus();
6780 return (
Window_t) gdk_xid_table_lookup(hwnd);
6790 HWND hwnd = (HWND)GDK_DRAWABLE_XID((GdkWindow *)
id);
6800 return (
Window_t)gdk_selection_owner_get(gClipboardAtom);
6811 gdk_selection_owner_set((GdkWindow *)
id, gClipboardAtom, GDK_CURRENT_TIME, 0);
6829 gdk_selection_convert((GdkWindow *)
id, clipboard,
6830 gdk_atom_intern(
"GDK_TARGET_STRING", 0), when);
6842 _lookup_string(event, buf, buflen);
6845 keysym = (
Int_t) ks;
6855 xkeysym = GDK_VoidSymbol;
6861 for (
int i = 0;
gKeyMap[i].fKeySym; i++) {
6871 if (xkeysym < 127) {
6873 }
else if (xkeysym >= GDK_F1 && xkeysym <= GDK_F35) {
6874 keysym =
kKey_F1 + (xkeysym - GDK_F1);
6875 }
else if (xkeysym >= GDK_KP_0 && xkeysym <= GDK_KP_9) {
6876 keysym =
kKey_0 + (xkeysym - GDK_KP_0);
6878 for (
int i = 0;
gKeyMap[i].fXKeySym; i++) {
6879 if (xkeysym ==
gKeyMap[i].fXKeySym) {
6898 int nread, actual_format;
6900 nread = gdk_selection_property_get((GdkWindow *)
id,
6901 (
unsigned char **) &data,
6902 (GdkAtom *) & atom, &actual_format);
6904 if ((nread == 0) || (data == NULL)) {
6909 text.Insert(0, (
const char *) data);
6914 gdk_property_delete((GdkWindow *)
id,
6915 gdk_atom_intern(
"GDK_SELECTION",
FALSE));
6929 if (!src || !
dest)
return;
6931 HWND sw, dw, ch = NULL;
6933 sw = (HWND)GDK_DRAWABLE_XID((GdkWindow *)src);
6934 dw = (HWND)GDK_DRAWABLE_XID((GdkWindow *)
dest);
6937 ::MapWindowPoints(sw,
6941 ch = ::ChildWindowFromPointEx(dw, point, CWP_SKIPDISABLED | CWP_SKIPINVISIBLE);
6942 child = (
Window_t)gdk_xid_table_lookup(ch);
6961 if (GDK_DRAWABLE_TYPE(
id) == GDK_DRAWABLE_PIXMAP) {
6963 gdk_drawable_get_size((GdkDrawable *)
id, (
int*)&w, (
int*)&
h);
6966 gdk_window_get_geometry((GdkDrawable *)
id, &
x, &
y, (
int*)&w,
7008 window = (HWND)GDK_DRAWABLE_XID((GdkWindow *)
id);
7009 rootw = (
Window_t)GDK_ROOT_PARENT();
7010 ::GetCursorPos(&currPt);
7011 chw = ::WindowFromPoint(currPt);
7012 childw = (
Window_t)gdk_xid_table_lookup(chw);
7016 ::ScreenToClient(window, &currPt);
7020 ::GetKeyboardState (kbd);
7022 if (kbd[VK_SHIFT] & 0x80) {
7023 umask |= GDK_SHIFT_MASK;
7025 if (kbd[VK_CAPITAL] & 0x80) {
7026 umask |= GDK_LOCK_MASK;
7028 if (kbd[VK_CONTROL] & 0x80) {
7029 umask |= GDK_CONTROL_MASK;
7031 if (kbd[VK_MENU] & 0x80) {
7032 umask |= GDK_MOD1_MASK;
7034 if (kbd[VK_LBUTTON] & 0x80) {
7035 umask |= GDK_BUTTON1_MASK;
7037 if (kbd[VK_MBUTTON] & 0x80) {
7038 umask |= GDK_BUTTON2_MASK;
7040 if (kbd[VK_RBUTTON] & 0x80) {
7041 umask |= GDK_BUTTON3_MASK;
7054 fore.pixel = foreground;
7055 fore.red = GetRValue(foreground);
7056 fore.green = GetGValue(foreground);
7057 fore.blue = GetBValue(foreground);
7058 gdk_gc_set_foreground((GdkGC *) gc, &fore);
7070 GdkRectangle *grects =
new GdkRectangle[
n];
7072 for (i = 0; i <
n; i++) {
7073 grects[i].x =
x+recs[i].
fX;
7074 grects[i].y =
y+recs[i].
fY;
7075 grects[i].width = recs[i].
fWidth;
7076 grects[i].height = recs[i].
fHeight;
7079 for (i = 0; i <
n; i++) {
7080 gdk_gc_set_clip_rectangle((GdkGC *)gc, (GdkRectangle*)recs);
7100 return (
Region_t) gdk_region_new();
7108 gdk_region_destroy((GdkRegion *) reg);
7121 dest = (
Region_t) gdk_region_union_with_rect((GdkRegion *) src, &
r);
7131 winding ? GDK_WINDING_RULE : GDK_EVEN_ODD_RULE);
7140 result = (
Region_t) gdk_regions_union((GdkRegion *) rega, (GdkRegion *) regb);
7150 result = (
Region_t) gdk_regions_intersect((GdkRegion *) rega,(GdkRegion *) regb);
7158 result = (
Region_t)gdk_regions_subtract((GdkRegion *) rega,(GdkRegion *) regb);
7167 result = (
Region_t) gdk_regions_xor((GdkRegion *) rega, (GdkRegion *) regb);
7175 return (
Bool_t) gdk_region_empty((GdkRegion *) reg);
7183 return (
Bool_t) gdk_region_point_in((GdkRegion *) reg,
x,
y);
7191 return (
Bool_t) gdk_region_equal((GdkRegion *) rega, (GdkRegion *) regb);
7200 gdk_region_get_clipbox((GdkRegion *) reg, &
r);
7212 char foundry[32], family[100], weight[32], slant[32], font_name[256];
7214 Int_t n1, fontcount = 0;
7216 sscanf(fontname,
"-%30[^-]-%100[^-]-%30[^-]-%30[^-]-%n",
7217 foundry, family, weight, slant, &n1);
7219 if(!stricmp(weight,
"medium")) {
7220 sprintf(weight,
"normal");
7223 sprintf(font_name,
"-%s-%s-%s-%s-*", foundry, family, weight, slant);
7224 fontlist = gdk_font_list_new(font_name, &fontcount);
7227 if (fontcount > 0)
return fontlist;
7236 gdk_font_list_free(fontlist);
7244 return (
Drawable_t) gdk_image_new(GDK_IMAGE_SHARED, gdk_visual_get_best(),
7253 width = ((GdkImage*)
id)->width;
7254 height = ((GdkImage*)
id)->height;
7264 GdkImage *image = (GdkImage *)
id;
7265 if (image->depth == 1) {
7267 ((
UChar_t *) image->mem)[
y * image->bpl + (
x >> 3)] |= (1 << (7 - (
x & 0x7)));
7269 ((
UChar_t *) image->mem)[
y * image->bpl + (
x >> 3)] &= ~(1 << (7 - (
x & 0x7)));
7272 UChar_t *pixelp = (
UChar_t *) image->mem +
y * image->bpl +
x * image->bpp;
7274 switch (image->bpp) {
7278 pixelp[2] = ((pixel >> 16) & 0xFF);
7280 pixelp[1] = ((pixel >> 8) & 0xFF);
7282 pixelp[0] = (pixel & 0xFF);
7295 gdk_draw_image((GdkDrawable *)
id, (GdkGC *)gc, (GdkImage *)img,
7296 x,
y, dx, dy, w,
h);
7305 gdk_image_unref((GdkImage *)img);
7323 HGDIOBJ oldbitmap1, oldbitmap2;
7327 unsigned char *ret = 0;
7329 if (GDK_DRAWABLE_TYPE(wid) == GDK_DRAWABLE_PIXMAP) {
7330 hdc = ::CreateCompatibleDC(NULL);
7331 oldbitmap1 = ::SelectObject(hdc, GDK_DRAWABLE_XID(wid));
7332 ::GetObject(GDK_DRAWABLE_XID(wid),
sizeof(BITMAP), &bm);
7334 hdc = ::GetDC((HWND)GDK_DRAWABLE_XID(wid));
7336 memdc = ::CreateCompatibleDC(hdc);
7338 bmi.bmiHeader.biSize =
sizeof(BITMAPINFOHEADER);
7339 bmi.bmiHeader.biWidth =
width;
7340 bmi.bmiHeader.biHeight = -1 * (int)(height);
7341 bmi.bmiHeader.biPlanes = 1;
7342 bmi.bmiHeader.biBitCount = 32;
7343 bmi.bmiHeader.biCompression = BI_RGB;
7344 bmi.bmiHeader.biSizeImage = 0;
7345 bmi.bmiHeader.biXPelsPerMeter = bmi.bmiHeader.biYPelsPerMeter = 0;
7346 bmi.bmiHeader.biClrUsed = 0;
7347 bmi.bmiHeader.biClrImportant = 0;
7349 ximage = ::CreateDIBSection(hdc, (BITMAPINFO *) &bmi, DIB_RGB_COLORS, &bmbits, NULL, 0);
7351 if (ximage && bmbits) {
7352 oldbitmap2 = ::SelectObject(memdc, ximage);
7353 ::BitBlt(memdc,
x,
y,
width, height, hdc, 0, 0, SRCCOPY);
7354 ::SelectObject(memdc, oldbitmap2);
7357 if (GDK_DRAWABLE_TYPE(wid) == GDK_DRAWABLE_PIXMAP) {
7358 ::SelectObject(hdc, oldbitmap1);
7361 ::ReleaseDC((HWND)GDK_DRAWABLE_XID(wid), hdc);
7363 if (ximage && bmbits) {
7365 ret =
new unsigned char[sz];
7366 memcpy(ret, bmbits, sz);
7367 ::DeleteObject(ximage);
7381 BITMAPINFO bmp_info;
7382 bmp_info.bmiHeader.biSize =
sizeof(BITMAPINFOHEADER);
7383 bmp_info.bmiHeader.biWidth =
width;
7384 bmp_info.bmiHeader.biHeight = -1 * (int)(height);
7385 bmp_info.bmiHeader.biPlanes = 1;
7386 bmp_info.bmiHeader.biBitCount = 32;
7387 bmp_info.bmiHeader.biCompression = BI_RGB;
7388 bmp_info.bmiHeader.biSizeImage = 0;
7389 bmp_info.bmiHeader.biClrUsed = 0;
7390 bmp_info.bmiHeader.biXPelsPerMeter = 0
L;
7391 bmp_info.bmiHeader.biYPelsPerMeter = 0
L;
7392 bmp_info.bmiHeader.biClrImportant = 0;
7393 bmp_info.bmiColors[0].rgbRed = 0;
7394 bmp_info.bmiColors[0].rgbGreen = 0;
7395 bmp_info.bmiColors[0].rgbBlue = 0;
7396 bmp_info.bmiColors[0].rgbReserved = 0;
7398 HDC hdc = ::GetDC(NULL);
7399 HBITMAP hbitmap = ::CreateDIBitmap(hdc, &bmp_info.bmiHeader, CBM_INIT,
7400 (
void *)bits, &bmp_info, DIB_RGB_COLORS);
7401 ::ReleaseDC(NULL, hdc);
7407 ::SetBitmapDimensionEx(hbitmap,
width, height, &size);
7409 return (
Pixmap_t)gdk_pixmap_foreign_new((guint32)hbitmap);
7417 HBITMAP hBmp =
reinterpret_cast<HBITMAP
>(pix);
7420 SetBitmapDimensionEx(hBmp, w,
h, &sz);
7421 GdkPixmap *newPix = gdk_pixmap_foreign_new(
reinterpret_cast<guint32
>(hBmp));
7442 gCws->window = newPix;
7445 gCws->double_buffer = 0;
7450 gCws->new_colors = 0;
7477 newsize *
sizeof(XWindow_t),
7489 gCws->window = gdk_window_foreign_new((guint32)qwid);
7493 gCws->double_buffer = 0;
7498 gCws->new_colors = 0;
7513 gdk_pixmap_unref(
gCws->buffer);
7515 if (
gCws->new_colors) {
7516 gdk_colormap_free_colors((GdkColormap *)
fColormap,
7517 (GdkColor *)
gCws->new_colors,
gCws->ncolors);
7519 delete []
gCws->new_colors;
7520 gCws->new_colors = 0;
7545 gdk_window_shape_combine_mask((GdkWindow *)
id, (GdkBitmap *) mask,
x,
y);
7553 return (
UInt_t)gdk_screen_width_mm();
7563 HWND hWnd = (HWND)GDK_DRAWABLE_XID((GdkWindow *)win);
7564 Atom_t atom = (
Atom_t)GetProp(hWnd,(LPCTSTR)MAKELONG(prop,0));
7566 GlobalDeleteAtom(atom);
7568 RemoveProp(hWnd,(LPCTSTR)MAKELONG(prop,0));
7578 unsigned char **prop_list)
7584 HWND hWnd = (HWND)GDK_DRAWABLE_XID((GdkWindow *)win);
7591 if (prop == dndproxy)
7593 if (prop == dndtypelist) {
7595 *prop_list = (
unsigned char *)GetProp(hWnd, (LPCTSTR)MAKELONG(prop,0));
7596 for (
n = 0; prop_list[
n];
n++);
7601 if (!OpenClipboard((HWND)GDK_DRAWABLE_XID((GdkWindow *)win))) {
7604 hdata = GetClipboardData(CF_PRIVATEFIRST);
7605 ptr = (
UChar_t *)GlobalLock(hdata);
7606 length = GlobalSize(hdata);
7608 for (i = 0; i < length; i++) {
7611 GlobalUnlock(hdata);
7614 *bytes = *nitems = length;
7630 gdk_window_set_cursor((GdkWindow *) win, (GdkCursor *)cur);
7641 static UINT gdk_selection_notify_msg =
7642 RegisterWindowMessage(
"gdk-selection-notify");
7643 HWND hWnd = (HWND)GDK_DRAWABLE_XID((GdkWindow *)win);
7644 if (!OpenClipboard((HWND)GDK_DRAWABLE_XID((GdkWindow *)win))) {
7647 hdata = GetClipboardData(CF_PRIVATEFIRST);
7654 PostMessage(hWnd, gdk_selection_notify_msg, sel, target);
7662 static UINT gdk_selection_request_msg =
7663 RegisterWindowMessage(
"gdk-selection-request");
7664 HWND hWnd = (HWND)GDK_DRAWABLE_XID((GdkWindow *)owner);
7665 OpenClipboard(hWnd);
7669 ::PostMessage(hWnd, gdk_selection_request_msg, sel, 0);
7684 if (data == 0 || len == 0)
7686 if (!OpenClipboard((HWND)GDK_DRAWABLE_XID((GdkWindow *)
id))) {
7689 hdata = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, len + 1);
7690 ptr = (
UChar_t *)GlobalLock(hdata);
7691 for (i = 0; i < len; i++) {
7694 GlobalUnlock(hdata);
7695 SetClipboardData(CF_PRIVATEFIRST, hdata);
7704 SetProp((HWND)GDK_DRAWABLE_XID((GdkWindow *)win),
7705 (LPCTSTR)MAKELONG(prop,0),
7715 int x,
int y,
int maxd)
7728 hwnd = ::ChildWindowFromPointEx((HWND)GDK_DRAWABLE_XID((GdkWindow *)root),
7731 GetWindowRect(hwnd, &rect);
7732 if (PtInRect(&rect, cpt)) {
7733 if (GetProp(hwnd,(LPCTSTR)MAKELONG(dndaware,0))) {
7734 win = (
Window_t) gdk_xid_table_lookup(hwnd);
7735 if (win && win != dragwin && win != input)
7742 ::MapWindowPoints(NULL, hwndt, &point, 1);
7743 hwndc = ChildWindowFromPoint (hwndt, point);
7744 if (GetProp(hwnd,(LPCTSTR)MAKELONG(dndaware,0))) {
7745 win = (
Window_t) gdk_xid_table_lookup(hwndc);
7746 if (win && win != dragwin && win != input)
7751 else if (hwndc == hwndt)
7755 if (GetProp(hwndt,(LPCTSTR)MAKELONG(dndaware,0))) {
7756 win = (
Window_t) gdk_xid_table_lookup(hwndt);
7757 if (win && win != dragwin && win != input)
7762 hwnd = GetNextWindow(hwnd, GW_HWNDNEXT);
7777 HWND window = (HWND)GDK_DRAWABLE_XID((GdkWindow *)win);
7779 version = (
Atom_t)GetProp(window,(LPCTSTR)MAKELONG(dndaware,0));
7780 if (version)
return kTRUE;
7795 DWORD dwStyle = GetWindowLong((HWND)GDK_DRAWABLE_XID((GdkWindow *)
id),
7797 SetWindowLong((HWND)GDK_DRAWABLE_XID((GdkWindow *)
id), GWL_EXSTYLE,
7798 dwStyle | WS_EX_ACCEPTFILES);
7800 SetProp((HWND)GDK_DRAWABLE_XID((GdkWindow *)
id),
7801 (LPCTSTR)MAKELONG(dndaware,0),
7806 for (
n = 0; typelist[
n];
n++);
7808 SetProp((HWND)GDK_DRAWABLE_XID((GdkWindow *)
id),
7809 (LPCTSTR)MAKELONG(dndtypelist,0),
const Int_t kPropMotifWMHintsElements
static KeySymbolMap_t gKeyMap[]
const ULong_t kMWMHintsInputMode
const ULong_t kMWMHintsDecorations
const Int_t kPropMWMHintElements
const ULong_t kMWMHintsFunctions
void AsmLong(Long_t i1, Long_t i2, Long_t &ll)
void SplitLong(Long_t ll, Long_t &i1, Long_t &i2)
const Mask_t kWAOverrideRedirect
const Mask_t kGCBackground
const Mask_t kGCForeground
const Mask_t kGCLineStyle
const Mask_t kGCSubwindowMode
const Mask_t kGCLineWidth
const Mask_t kButtonMotionMask
const Mask_t kGCClipXOrigin
const Mask_t kFocusChangeMask
const Mask_t kButtonPressMask
const Mask_t kExposureMask
const Mask_t kWAEventMask
const Mask_t kGCFillStyle
const Mask_t kGCJoinStyle
const Mask_t kKeyReleaseMask
const Mask_t kWABackPixel
const Mask_t kAnyModifier
const Mask_t kKeyPressMask
const Mask_t kGCTileStipXOrigin
const Mask_t kPointerMotionMask
const Mask_t kLeaveWindowMask
const Mask_t kStructureNotifyMask
const Handle_t kParentRelative
const Mask_t kButtonReleaseMask
const Mask_t kGCGraphicsExposures
const Mask_t kGCClipYOrigin
const Mask_t kEnterWindowMask
const Mask_t kGCTileStipYOrigin
const Mask_t kWABackPixmap
const Mask_t kWABorderWidth
#define R(a, b, c, d, e, f, g, h, i)
const unsigned char gStipples[26][32]
static const double x2[5]
static const double x1[5]
const size_t kBitsPerByte
R__EXTERN TApplication * gApplication
include TDocParser_001 C image html pict1_TDocParser_001 png width
void gdk_win32_draw_segments(GdkDrawable *drawable, GdkGC *gc, GdkSegment *segs, gint nsegs)
int GIFdecode(Byte_t *GIFarr, Byte_t *PIXarr, int *Width, int *Height, int *Ncols, Byte_t *R, Byte_t *G, Byte_t *B)
int GIFquantize(UInt_t width, UInt_t height, Int_t *ncol, Byte_t *red, Byte_t *green, Byte_t *blue, Byte_t *outputBuf, Byte_t *outputCmap)
#define XDND_PROTOCOL_VERSION
int GIFinfo(Byte_t *GIFarr, int *Width, int *Height, int *Ncols)
static void GetPixel(int y, int width, Byte_t *scline)
Get pixels in line y and put in array scline.
static void _set_event_time(GdkEvent &event, UInt_t time)
void gdk_win32_draw_text(GdkDrawable *drawable, GdkFont *font, GdkGC *gc, gint x, gint y, const gchar *text, gint text_length)
void gdk_win32_draw_polygon(GdkDrawable *drawable, GdkGC *gc, gint filled, GdkPoint *points, gint npoints)
void gdk_win32_draw_lines(GdkDrawable *drawable, GdkGC *gc, GdkPoint *points, gint npoints)
void gdk_win32_draw_points(GdkDrawable *drawable, GdkGC *gc, GdkPoint *points, gint npoints)
static GdkImage * gGifImage
static void PutByte(Byte_t b)
Put byte b in output stream.
VOID CALLBACK MyTimerProc(HWND hwnd, UINT message, UINT idTimer, DWORD dwTime)
Windows timer handling events while moving/resizing windows.
void gdk_win32_draw_arc(GdkDrawable *drawable, GdkGC *gc, gint filled, gint x, gint y, gint width, gint height, gint angle1, gint angle2)
long GIFencode(int Width, int Height, Int_t Ncol, Byte_t R[], Byte_t G[], Byte_t B[], Byte_t ScLine[], void(*get_scline)(int, int, Byte_t *), void(*pb)(Byte_t))
void gdk_win32_draw_rectangle(GdkDrawable *drawable, GdkGC *gc, gint filled, gint x, gint y, gint width, gint height)
static ULong_t gKeybdMask
static Pixmap gFillPattern
static Cursor gNullCursor
const char null_cursor_bits[]
static char gDashList[10]
const Int_t kBIGGEST_RGB_VALUE
static ULong_t gMouseMask
static GC gGClist[kMAXGC]
static struct @52 gMarker
static XFontStruct * gTextFont
R__EXTERN TStyle * gStyle
R__EXTERN TSystem * gSystem
R__EXTERN TVirtualX *(* gPtr2VirtualX)()
R__EXTERN Atom_t gWM_DELETE_WINDOW
R__EXTERN TWin32SplashThread * gSplash
R__EXTERN ULong_t gConsoleWindow
virtual Color_t GetFillColor() const
Return the fill area color.
Style_t fFillStyle
Fill area style.
Color_t fFillColor
Fill area color.
Width_t fLineWidth
Line width.
Style_t fLineStyle
Line style.
Color_t fLineColor
Line color.
Color_t fMarkerColor
Marker color.
Size_t fMarkerSize
Marker size.
Style_t fMarkerStyle
Marker style.
virtual void SetTextAlign(Short_t align=11)
Set the text alignment.
Float_t fTextAngle
Text angle.
virtual void SetTextColor(Color_t tcolor=1)
Set the text color.
Font_t fTextFont
Text font.
Float_t fTextSize
Text size.
The color creation and management class.
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
Bool_t Next(ULong64_t &hash, Long64_t &key, Long64_t &value)
Get next entry from TExMap. Returns kFALSE at end of map.
This class stores a (key,value) pair using an external hash.
void Add(ULong64_t hash, Long64_t key, Long64_t value)
Add an (key,value) pair to the table. The key should be unique.
Long64_t GetValue(ULong64_t hash, Long64_t key)
Return the value belonging to specified key and hash value.
Proxy classes provide thread-safe interface to global objects.
static ULong_t fgPingMessageId
ping message ID
static void GlobalUnlock()
unlock any proxy (client thread)
static UInt_t fMaxResponseTime
max period for waiting response from server thread
static void GlobalLock()
lock any proxy (client thread)
static ULong_t fgUserThreadId
user (e.g. python) thread ID
static ULong_t fgPostMessageId
post message ID
static ULong_t fgMainThreadId
main thread ID
virtual void ExecuteCallBack(Bool_t sync)
Executes all batched callbacks and the latest callback This method is executed by server thread.
static TVirtualX * fgRealObject
static TVirtualX * ProxyObject()
static TVirtualX * RealObject()
This class is the basic interface to the Win32 graphics system.
void DrawString(Drawable_t id, GContext_t gc, Int_t x, Int_t y, const char *s, Int_t len)
Draw a string using a specific graphics context in position (x,y).
void SetClipRectangles(GContext_t gc, Int_t x, Int_t y, Rectangle_t *recs, Int_t n)
Set clipping rectangles in graphics context.
void MapWindow(Window_t id)
Map window on screen.
void SetWMSizeHints(Window_t id, UInt_t wmin, UInt_t hmin, UInt_t wmax, UInt_t hmax, UInt_t winc, UInt_t hinc)
Give the window manager minimum and maximum size hints.
void DrawImage(FT_Bitmap *source, ULong_t fore, ULong_t back, GdkImage *xim, Int_t bx, Int_t by)
Draw FT_Bitmap bitmap to xim image at position bx,by using specified foreground color.
void MapModifierState(UInt_t &state, UInt_t &xstate, Bool_t tox=kTRUE)
Map modifier key state to or from X.
void CloseWindow1()
Delete current window.
void SetClassHints(Window_t id, char *className, char *resourceName)
Set the windows class and resource name.
void LookupString(Event_t *event, char *buf, Int_t buflen, UInt_t &keysym)
Convert the keycode from the event structure to a key symbol (according to the modifiers specified in...
void DestroyWindow(Window_t id)
Destroy window.
void IntersectRegion(Region_t rega, Region_t regb, Region_t result)
Compute the intersection of rega and regb and return result region.
void SetIconPixmap(Window_t id, Pixmap_t pic)
Set pixmap the WM can use when the window is iconized.
void DrawCellArray(Int_t x1, Int_t y1, Int_t x2, Int_t y2, Int_t nx, Int_t ny, Int_t *ic)
Draw a cell array.
void SetMarkerSize(Float_t markersize)
Set marker size index.
void MapSetWindowAttributes(SetWindowAttributes_t *attr, ULong_t &xmask, GdkWindowAttr &xattr)
Map a SetWindowAttributes_t to a GdkWindowAttr structure.
void SetClipOFF(Int_t wid)
Turn off the clipping for the window wid.
void SetClipRegion(Int_t wid, Int_t x, Int_t y, UInt_t w, UInt_t h)
Set clipping region for the window wid.
void SetCharacterUp(Float_t chupx, Float_t chupy)
Set character up vector.
void DrawFillArea(Int_t n, TPoint *xy)
Fill area described by polygon.
void SendEvent(Window_t id, Event_t *ev)
Send event ev to window id.
void QueryColor(Colormap_t cmap, ColorStruct_t &color)
Fill in the primary color components for a specific pixel value.
void GetPasteBuffer(Window_t id, Atom_t atom, TString &text, Int_t &nchar, Bool_t del)
Get contents of paste buffer atom into string.
void SetInputFocus(Window_t id)
Set keyboard input focus to window id.
void SubtractRegion(Region_t rega, Region_t regb, Region_t result)
Subtract rega from regb.
void SetForeground(GContext_t gc, ULong_t foreground)
Set foreground color in graphics context (shortcut for ChangeGC with only foreground mask set).
void MoveWindow(Int_t wid, Int_t x, Int_t y)
Move the window wid.
Int_t EventsPending()
Returns number of pending events.
const char * DisplayName(const char *dpyName=0)
Return hostname on which the display is opened.
Int_t TextWidth(FontStruct_t font, const char *s, Int_t len)
Return length of string in pixels. Size depends on font.
void DrawBox(Int_t x1, Int_t y1, Int_t x2, Int_t y2, EBoxMode mode)
Draw a box.
void UnmapWindow(Window_t id)
Unmap window from screen.
void ClearWindow()
Clear current window.
void SetTextFont(Font_t fontnumber)
Set specified font.
Pixmap_t ReadGIF(Int_t x0, Int_t y0, const char *file, Window_t id=0)
If id is NULL - loads the specified gif file at position [x0,y0] in the current window.
Float_t fCharacterUpY
Character Up vector along Y.
Bool_t EqualRegion(Region_t rega, Region_t regb)
Returns true if two regions are equal.
void FillPolygon(Window_t id, GContext_t gc, Point_t *points, Int_t npnt)
FillPolygon fills the region closed by the specified path.
void UnionRegion(Region_t rega, Region_t regb, Region_t result)
Compute the union of rega and regb and return result region.
Bool_t SetSelectionOwner(Window_t, Atom_t &)
Assigns owner of Clipboard.
void ChangeGC(GContext_t gc, GCValues_t *gval)
Change entries in an existing graphics context, gc, by values from gval.
void SetWMSize(Window_t id, UInt_t w, UInt_t h)
Tells window manager the desired size of window "id".
void ShapeCombineMask(Window_t id, Int_t x, Int_t y, Pixmap_t mask)
The Nonrectangular Window Shape Extension adds nonrectangular windows to the System.
void RenderString(Int_t x, Int_t y, ETextMode mode)
Perform the string rendering in the pad.
Int_t fDepth
Number of color planes.
void SetWMTransientHint(Window_t id, Window_t main_id)
Tell window manager that window is a transient window of gdk_parent_root.
void SetRGB(Int_t cindex, Float_t r, Float_t g, Float_t b)
Set color intensities for given color index.
Bool_t IsDNDAware(Window_t win, Atom_t *typelist)
Checks if Window win is DND aware, and knows any of the DND formats passed in argument.
Float_t fTextMagnitude
Text Magnitude.
void GetFontProperties(FontStruct_t font, Int_t &max_ascent, Int_t &max_descent)
Return some font properties.
void SetLineType(Int_t n, Int_t *dash)
Set line type.
void DestroySubwindows(Window_t id)
Destroy all internal subwindows.
void CopyArea(Drawable_t src, Drawable_t dest, GContext_t gc, Int_t src_x, Int_t src_y, UInt_t width, UInt_t height, Int_t dest_x, Int_t dest_y)
Copy a drawable (i.e.
void NextEvent(Event_t &event)
Copies first pending event from event queue to Event_t structure and removes event from queue.
void SetOpacity(Int_t percent)
Set opacity of a window.
void Align(void)
Compute alignment variables.
GdkImage * GetBackground(Int_t x, Int_t y, UInt_t w, UInt_t h)
Get the background of the current window in an XImage.
Region_t CreateRegion()
Create a new empty region.
void DrawLine(Int_t x1, Int_t y1, Int_t x2, Int_t y2)
Draw a line.
Pixmap_t CreatePixmapFromData(unsigned char *bits, UInt_t width, UInt_t height)
create an image from RGB data.
Atom_t InternAtom(const char *atom_name, Bool_t only_if_exist)
Return atom handle for atom_name.
Bool_t fMarkerStyleModified
void DeleteProperty(Window_t, Atom_t &)
Deletes the specified property on the specified window.
TGWin32()
Default constructor.
void ResizeWindow(Int_t wid)
Resize the current window if necessary.
Int_t ResizePixmap(Int_t wid, UInt_t w, UInt_t h)
Resize a pixmap.
void IconifyWindow(Window_t id)
Iconify the window.
void SetColor(GdkGC *gc, Int_t ci)
Set the foreground color in GdkGC.
void SetWMPosition(Window_t id, Int_t x, Int_t y)
Tells the window manager the desired position [x,y] of window "id".
GdkColormap * fColormap
Default colormap, 0 if b/w.
void GetPlanes(Int_t &nplanes)
Get maximum number of planes.
Int_t InitWindow(ULong_t window)
Open window and return window number.
Region_t PolygonRegion(Point_t *points, Int_t np, Bool_t winding)
Create region for the polygon defined by the points array.
Bool_t fFillStyleModified
void CloseWindow()
Delete current window.
void GetWindowSize(Drawable_t id, Int_t &x, Int_t &y, UInt_t &w, UInt_t &h)
Return geometry of window (should be called GetGeometry but signature already used).
void RaiseWindow(Window_t id)
Put window on top of window stack.
void SetUserThreadId(ULong_t id)
Set user thread id.
Int_t fBlueDiv
Blue value divider.
void FreeFontStruct(FontStruct_t fs)
Free font structure returned by GetFontStruct().
void DeleteGC(GContext_t gc)
Explicitely delete a graphics context.
void TranslateCoordinates(Window_t src, Window_t dest, Int_t src_x, Int_t src_y, Int_t &dest_x, Int_t &dest_y, Window_t &child)
TranslateCoordinates translates coordinates from the frame of reference of one window to another.
void SetWindowBackgroundPixmap(Window_t id, Pixmap_t pxm)
Set pixmap as window background.
Bool_t CheckEvent(Window_t id, EGEventType type, Event_t &ev)
Check if there is for window "id" an event of type "type".
Int_t fGreenShift
Bits to left shift green.
void ImgPickPalette(GdkImage *image, Int_t &ncol, Int_t *&R, Int_t *&G, Int_t *&B)
Returns in R G B the ncol colors of the palette used by the image.
void SetTextSize(Float_t textsize)
Set current text size.
void SetTypeList(Window_t win, Atom_t prop, Atom_t *typelist)
Add the list of drag and drop types to the Window win.
Window_t CreateWindow(Window_t parent, Int_t x, Int_t y, UInt_t w, UInt_t h, UInt_t border, Int_t depth, UInt_t clss, void *visual, SetWindowAttributes_t *attr, UInt_t wtype)
Return handle to newly created gdk window.
void DrawSegments(Drawable_t id, GContext_t gc, Segment_t *seg, Int_t nseg)
Draws multiple line segments. Each line is specified by a pair of points.
virtual void GetTextExtent(UInt_t &w, UInt_t &h, char *mess)
Return the size of a character string.
Window_t GetDefaultRootWindow() const
Return handle to the default root window created when calling XOpenDisplay().
void SetDoubleBufferOFF()
Turn double buffer mode off.
Int_t AddWindow(ULong_t qwid, UInt_t w, UInt_t h)
Register a window created by Qt as a ROOT window (like InitWindow()).
void SetLineStyle(Style_t linestyle)
Set line style.
Int_t GetDoubleBuffer(Int_t wid)
Query the double buffer value for the window wid.
void CloseDisplay()
close display (terminate server/gMainThread thread)
void ReparentWindow(Window_t id, Window_t pid, Int_t x, Int_t y)
Reparent window, make pid the new parent and position the window at position (x,y) in new parent.
void MapEventMask(UInt_t &emask, UInt_t &xemask, Bool_t tox=kTRUE)
Map event mask to or from gdk.
Float_t fCharacterUpX
Character Up vector along X.
void GrabPointer(Window_t id, UInt_t evmask, Window_t confine, Cursor_t cursor, Bool_t grab=kTRUE, Bool_t owner_events=kTRUE)
Establish an active pointer grab.
Window_t FindRWindow(Window_t win, Window_t dragwin, Window_t input, int x, int y, int maxd)
Recursively search in the children of Window for a Window which is at location x, y and is DND aware,...
void CopyGC(GContext_t org, GContext_t dest, Mask_t mask)
Copies graphics context from org to dest.
void MapRaised(Window_t id)
Map window on screen and put on top of all windows.
void CopyPixmap(Int_t wid, Int_t xpos, Int_t ypos)
Copy the pixmap wid at the position xpos, ypos in the current window.
Bool_t fPenModified
line syle || width modified
void DeletePixmap(Pixmap_t pmap)
Explicitely delete pixmap resource.
void SelectWindow(Int_t wid)
Select window to which subsequent output is directed.
void QueryPointer(Int_t &ix, Int_t &iy)
Query pointer position.
void SetFillColor(Color_t cindex)
Set color index for fill areas.
void DrawText(Int_t x, Int_t y, Float_t angle, Float_t mgn, const char *text, ETextMode mode)
Draw text using TrueType fonts.
Bool_t fHasTTFonts
True when TrueType fonts are used.
void DeleteFont(FontStruct_t fs)
Explicitely delete font structure obtained with LoadQueryFont().
void MapEvent(Event_t &ev, GdkEvent &xev, Bool_t tox=kTRUE)
Map Event_t structure to gdk_event structure.
void DrawPolyMarker(Int_t n, TPoint *xy)
Draw n markers with the current attributes at position x, y.
void DrawPolyLine(Int_t n, TPoint *xy)
Draw a line through all points.
void UpdateLineStyle()
Update line style.
void SelectInput(Window_t id, UInt_t evmask)
Defines which input events the window is interested in.
Int_t fRedShift
Bits to left shift red, -1 if no TrueColor visual.
Bool_t IsVisible(Int_t x, Int_t y, UInt_t w, UInt_t h)
Test if there is really something to render.
void DestroyRegion(Region_t reg)
Destroy region.
Int_t FindColor(ULong_t pixel, ULong_t *orgcolors, Int_t ncolors)
Returns index in orgcolors (and new_colors) for pixel.
void UpdateFillStyle()
Set fill area style index.
Pixmap_t CreateBitmap(Drawable_t id, const char *bitmap, UInt_t width, UInt_t height)
Create a bitmap (i.e. pixmap with depth 1) from the bitmap data.
void SetDoubleBuffer(Int_t wid, Int_t mode)
Set the double buffer on/off on window wid.
void UpdateWindow(Int_t mode)
Update display.
void LowerWindow(Window_t id)
Lower window so it lays below all its siblings.
void WMDeleteNotify(Window_t id)
Tell WM to send message when window is closed via WM.
Window_t GetInputFocus()
Returns the window id of the window having the input focus.
void DeleteImage(Drawable_t img)
Deallocates the memory associated with the image img.
Bool_t fLineColorModified
Int_t WriteGIF(char *name)
Writes the current window into GIF file.
void MakeOpaqueColors(Int_t percent, ULong_t *orgcolors, Int_t ncolors)
Get RGB values for orgcolors, add percent neutral to the RGB and allocate new_colors.
Int_t GetDepth() const
Get maximum number of planes.
void GetWindowAttributes(Window_t id, WindowAttributes_t &attr)
Get window attributes and return filled in attributes structure.
void GrabButton(Window_t id, EMouseButton button, UInt_t modifier, UInt_t evmask, Window_t confine, Cursor_t cursor, Bool_t grab=kTRUE)
Establish passive grab on a certain mouse button.
void GetGeometry(Int_t wid, Int_t &x, Int_t &y, UInt_t &w, UInt_t &h)
Return position and size of window wid.
void SetDNDAware(Window_t win, Atom_t *typelist)
Add XdndAware property and the list of drag and drop types to the Window win.
Int_t fScreenNumber
Screen number.
void Warp(Int_t ix, Int_t iy, Window_t id=0)
Set pointer position.
Drawable_t CreateImage(UInt_t width, UInt_t height)
Allocates the memory needed for an drawable.
Cursor_t CreateCursor(ECursor cursor)
Create cursor handle (just return cursor from cursor pool fCursors).
void MapGCValues(GCValues_t &gval, ULong_t &xmask, GdkGCValues &xgval, Bool_t tox=kTRUE)
Map a GCValues_t to a XCGValues structure if tox is true.
void DrawRectangle(Drawable_t id, GContext_t gc, Int_t x, Int_t y, UInt_t w, UInt_t h)
Draw a rectangle outline.
Int_t AddPixmap(ULong_t pix, UInt_t w, UInt_t h)
register pixmap created by TGWin32GLManager
void SetMarkerType(Int_t type, Int_t n, GdkPoint *xy)
Set marker type.
Int_t OpenPixmap(UInt_t w, UInt_t h)
Open a new pixmap.
void SetDoubleBufferON()
Turn double buffer mode on.
void ClearArea(Window_t id, Int_t x, Int_t y, UInt_t w, UInt_t h)
Clear a window area to the bakcground color.
void SetKeyAutoRepeat(Bool_t on=kTRUE)
Turn key auto repeat on or off.
void FillRectangle(Drawable_t id, GContext_t gc, Int_t x, Int_t y, UInt_t w, UInt_t h)
Draw a filled rectangle. Filling is done according to the gc.
void SetFillStyle(Style_t style)
Set fill area style.
void SetMWMHints(Window_t id, UInt_t value, UInt_t funcs, UInt_t input)
Set decoration style for MWM-compatible wm (mwm, ncdwm, fvwm?).
TObject * fRefreshTimer
TGWin32RefreshTimer for GUI thread message handler.
void SetCursor(Int_t win, ECursor cursor)
Set the cursor.
char ** ListFonts(const char *fontname, Int_t max, Int_t &count)
Return list of font names matching "fontname".
void QueryColors(GdkColormap *cmap, GdkColor *colors, Int_t ncolors)
Returns the current RGB value for the pixel in the XColor structure.
void GrabKey(Window_t id, Int_t keycode, UInt_t modifier, Bool_t grab=kTRUE)
Establish passive grab on a certain key.
Window_t GetPrimarySelectionOwner()
Returns the window id of the current owner of the primary selection.
void MapColorStruct(ColorStruct_t *color, GdkColor &xcolor)
Map a ColorStruct_t to a XColor structure.
void SetWindowName(Window_t id, char *name)
Set window name.
FontH_t GetFontHandle(FontStruct_t fs)
Return handle to font described by font structure.
void ConvertPrimarySelection(Window_t id, Atom_t clipboard, Time_t when)
XConvertSelection() causes a SelectionRequest event to be sent to the current primary selection owner...
void SetTextColor(Color_t cindex)
Set color index for text.
void SetWindowBackground(Window_t id, ULong_t color)
Set the window background color.
FT_Vector fAlign
alignment vector
Bool_t IsCmdThread() const
returns kTRUE if we are inside cmd/server thread
Int_t fTextAlignH
Text Alignment Horizontal.
Handle_t fXEvent
Current native (GDK) event.
void RemovePixmap(GdkDrawable *pix)
Remove the pixmap pix.
void GetGCValues(GContext_t gc, GCValues_t &gval)
Get current values from graphics context gc.
Bool_t fFillColorModified
Int_t fRedDiv
Red value divider, -1 if no TrueColor visual.
void SetIconName(Window_t id, char *name)
Set window icon name.
Bool_t fMarkerColorModified
void PutImage(Int_t offset, Int_t itran, Int_t x0, Int_t y0, Int_t nx, Int_t ny, Int_t xmin, Int_t ymin, Int_t xmax, Int_t ymax, UChar_t *image, Drawable_t id)
Draw image.
void DeletePictureData(void *data)
Delete picture data created by the function ReadPictureDataFromFile.
GdkGC * GetGC(Int_t which) const
Return desired Graphics Context ("which" maps directly on gGCList[]).
void ConvertSelection(Window_t, Atom_t &, Atom_t &, Atom_t &, Time_t &)
Get Clipboard data.
GContext_t CreateGC(Drawable_t id, GCValues_t *gval)
Create a graphics context using the values set in gval (but only for those entries that are in the ma...
void SetLineColor(Color_t cindex)
Set color index for lines.
XColor_t & GetColor(Int_t cid)
Return reference to internal color structure associated to color index cid.
Int_t OpenDisplay(const char *dpyName=0)
Open the display. Return -1 if the opening fails, 0 when ok.
void SetDashes(GContext_t gc, Int_t offset, const char *dash_list, Int_t n)
Specify a dash pattertn.
void FreeFontNames(char **fontlist)
Frees the specified the array of strings "fontlist".
Bool_t ParseColor(Colormap_t cmap, const char *cname, ColorStruct_t &color)
Parse string cname containing color name, like "green" or "#00FF00".
void SetDrawMode(EDrawMode mode)
Set the drawing mode.
Int_t fTextAlign
Text alignment (set in SetTextAlign)
void SetMarkerColor(Color_t cindex)
Set color index for markers.
Bool_t Init(void *display=0)
Initialize Win32 system. Returns kFALSE in case of failure.
unsigned char * GetColorBits(Drawable_t wid, Int_t x, Int_t y, UInt_t width, UInt_t height)
Gets DIB bits x, y, width, height - position of bitmap returns a pointer on bitmap bits array in form...
FontStruct_t GetFontStruct(FontH_t fh)
Retrieve associated font structure once we have the font handle.
void GetCharacterUp(Float_t &chupx, Float_t &chupy)
Return character up vector.
void SetLineWidth(Width_t width)
Set line width.
void RescaleWindow(Int_t wid, UInt_t w, UInt_t h)
Rescale the window wid.
void ChangeProperty(Window_t id, Atom_t property, Atom_t type, UChar_t *data, Int_t len)
This function alters the property for the specified window and causes the X server to generate a Prop...
void SetMarkerStyle(Style_t markerstyle)
Set marker style.
Int_t RequestString(Int_t x, Int_t y, char *text)
Request a string.
void SetWMState(Window_t id, EInitialState state)
Set the initial state of the window. Either kNormalState or kIconicState.
void MapSubwindows(Window_t id)
Maps all subwindows for the specified window "id" in top-to-bottom stacking order.
void GetRegionBox(Region_t reg, Rectangle_t *)
Return smallest enclosing rectangle.
Int_t fMaxNumberOfWindows
Maximum number of windows.
void RemoveWindow(ULong_t qwid)
Remove a window created by Qt (like CloseWindow1()).
Bool_t ReadPictureDataFromFile(const char *filename, char ***ret_data)
Read picture data from file and store in ret_data.
Pixmap_t CreatePixmap(Drawable_t id, UInt_t w, UInt_t h)
Creates a pixmap of the width and height you specified and returns a pixmap ID that identifies it.
void MoveResizeWindow(Window_t id, Int_t x, Int_t y, UInt_t w, UInt_t h)
Move and resize a window.
UInt_t ScreenWidthMM() const
Returns the width of the screen in millimeters.
void MapKeySym(UInt_t &keysym, UInt_t &xkeysym, Bool_t tox=kTRUE)
Map to and from X key symbols.
void ChangeWindowAttributes(Window_t id, SetWindowAttributes_t *attr)
Change window attributes.
Bool_t AllocColor(GdkColormap *cmap, GdkColor *color)
Allocate color in colormap.
void SetTextAlign(Short_t talign=11)
Set text alignment.
Int_t RequestLocator(Int_t mode, Int_t ctyp, Int_t &x, Int_t &y)
Request Locator position.
Int_t GetProperty(Window_t, Atom_t, Long_t, Long_t, Bool_t, Atom_t, Atom_t *, Int_t *, ULong_t *, ULong_t *, unsigned char **)
Returns the actual type of the property, the actual format of the property, and a pointer to the data...
Int_t KeysymToKeycode(UInt_t keysym)
Convert a keysym to the appropriate keycode.
void ClosePixmap()
Delete current pixmap.
Window_t GetCurrentWindow() const
Return current window pointer. Protected method used by TGWin32TTF.
Bool_t EmptyRegion(Region_t reg)
Return true if the region is empty.
void XorRegion(Region_t rega, Region_t regb, Region_t result)
Calculate the difference between the union and intersection of two regions.
void Bell(Int_t percent)
Sets the sound bell. Percent is loudness from -100% to 100%.
void SetPrimarySelectionOwner(Window_t id)
Makes the window id the current owner of the primary selection.
Bool_t PointInRegion(Int_t x, Int_t y, Region_t reg)
Returns true if the point x,y is in the region.
Int_t fBlueShift
Bits to left shift blue.
GdkCursor * fCursors[kNumCursors]
List of cursors.
FontStruct_t LoadQueryFont(const char *font_name)
Load font and query font.
void ChangeActivePointerGrab(Window_t, UInt_t, Cursor_t)
Changes the active cursor of the specified window.
void PutPixel(Drawable_t id, Int_t x, Int_t y, ULong_t pixel)
Overwrites the pixel in the image with the specified pixel value.
Window_t GetParent(Window_t id) const
Return the parent of the window.
void ChangeProperties(Window_t id, Atom_t property, Atom_t type, Int_t format, UChar_t *data, Int_t len)
Put data into Clipboard.
Bool_t CreatePictureFromData(Drawable_t id, char **data, Pixmap_t &pict, Pixmap_t &pict_mask, PictureAttributes_t &attr)
Create a pixture pixmap from data.
void FreeColor(Colormap_t cmap, ULong_t pixel)
Free color cell with specified pixel value.
Window_t GetWindowID(Int_t wid)
Return the X11 window identifier.
virtual ~TGWin32()
destructor.
Bool_t GUIThreadMessageFunc(MSG *msg)
Message processing function for the GUI thread.
Int_t fTextAlignV
Text Alignment Vertical.
Bool_t fUseSysPointers
True when using system mouse pointers.
XWindow_t * fWindows
List of windows.
void GetImageSize(Drawable_t id, UInt_t &width, UInt_t &height)
Returns the width and height of the image id.
Int_t fGreenDiv
Green value divider.
void Update(Int_t mode=0)
Flush (mode = 0, default) or synchronize (mode = 1) X output buffer.
void WritePixmap(Int_t wid, UInt_t w, UInt_t h, char *pxname)
Write the pixmap wid in the bitmap file pxname.
void SetInput(Int_t inp)
Set input on or off.
ULong_t GetPixel(Color_t cindex)
Return pixel value associated to specified ROOT color number.
Display_t GetDisplay() const
Returns handle to display (might be useful in some cases where direct X11 manipulation outside of TVi...
void GetRGB(Int_t index, Float_t &r, Float_t &g, Float_t &b)
Get rgb values for color "index".
void Sync(Int_t mode)
Set synchronisation on or off.
TExMap * fColors
Hash list of colors.
void UnionRectWithRegion(Rectangle_t *rect, Region_t src, Region_t dest)
Union of rectangle with a region.
Bool_t CreatePictureFromFile(Drawable_t id, const char *filename, Pixmap_t &pict, Pixmap_t &pict_mask, PictureAttributes_t &attr)
Create a picture pixmap from data on file.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
virtual void SetName(const char *name)
Set the name of the TNamed.
Int_t GetEntries() const
Return the number of objects in array (i.e.
TObject * At(Int_t idx) const
Collectable string class.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
static void * Alloc(size_t size)
Allocate a block of memory, that later can be resized using TStorage::ReAlloc().
static void * ReAlloc(void *vp, size_t size)
Reallocate (i.e.
static void Dealloc(void *ptr)
De-allocate block of memory, that was allocated via TStorage::Alloc().
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
const char * GetLineStyleString(Int_t i=1) const
Return line style string (used by PostScript).
void Beep(Int_t freq=-1, Int_t duration=-1, Bool_t setDefault=kFALSE)
Beep for duration milliseconds with a tone of frequency freq.
virtual void AddTimer(TTimer *t)
Add timer to list of system timers.
virtual const char * BaseName(const char *pathname)
Base name of a file name. Base name of /user/root is root.
virtual Bool_t ProcessEvents()
Process pending events (GUI, timers, sockets).
virtual TTimer * RemoveTimer(TTimer *t)
Remove timer from list of system timers.
TTF helper class containing glyphs description.
FT_Glyph fImage
glyph image
static Bool_t IsInitialized()
static void PrepareString(const char *string)
Put the characters in "string" in the "glyphs" array.
static void Init()
Initialise the TrueType fonts interface.
static void LayoutGlyphs()
Compute the glyphs positions, fgAscent and fgWidth (needed for alignment).
static void SetSmoothing(Bool_t state)
Set smoothing (anti-aliasing) flag.
static void SetRotationMatrix(Float_t angle)
Set the rotation matrix used to rotate the font outlines.
static void SetTextFont(Font_t fontnumber)
Set specified font.
static void GetTextExtent(UInt_t &w, UInt_t &h, char *text)
Get width (w) and height (h) when text is horizontal.
static TTGlyph * GetGlyphs()
static Int_t GetNumGlyphs()
static const FT_BBox & GetBox()
static Bool_t GetSmoothing()
static void SetTextSize(Float_t textsize)
Set current text size.
static FT_Matrix * GetRotMatrix()
Handles synchronous and a-synchronous timer events.
void Reset()
Reset the timer.
virtual Bool_t Notify()
Notify when timer times out.
Semi-Abstract base class defining a generic interface to the underlying, low level,...
static constexpr double s
static constexpr double L
Short_t Max(Short_t a, Short_t b)
Double_t Sqrt(Double_t x)
Short_t Min(Short_t a, Short_t b)
Bool_t fGraphicsExposures
EGraphicsFunction fFunction
Pixmap_t fBackgroundPixmap
Description of a X11 color.
Bool_t fDefined
true if pixel value is defined
#define dest(otri, vertexptr)
#define org(otri, vertexptr)