36#include "gdk/gdkkeysyms.h"
64#define XDND_PROTOCOL_VERSION 5
66#define IDC_HAND MAKEINTRESOURCE(32649)
119 GdkDrawable *drawing;
140GdkAtom gClipboardAtom = GDK_NONE;
141static XWindow_t *
gCws;
142static XWindow_t *
gTws;
177static const char *
gTextFont =
"arial.ttf";
209 GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK
210 | GDK_LEAVE_NOTIFY_MASK | GDK_POINTER_MOTION_MASK | GDK_KEY_PRESS_MASK
211 | GDK_KEY_RELEASE_MASK;
213 GDK_BUTTON_PRESS_MASK | GDK_KEY_PRESS_MASK | GDK_ENTER_NOTIFY_MASK |
214 GDK_LEAVE_NOTIFY_MASK;
220 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
221 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
222 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
226static bool gdk_initialized =
false;
230struct MWMHintsProperty_t {
249struct KeySymbolMap_t {
254static const char *keyCodeToString[] = {
308static KeySymbolMap_t
gKeyMap[] = {
311#ifndef GDK_ISO_Left_Tab
365 int n =
event->fUser[1];
367 for (i = 0; i <
n; i++) {
368 buf[i] =
event->fUser[2 + i];
374 if (event->
fCode <= 0x20) {
375 strncpy(buf, keyCodeToString[event->
fCode], buflen - 1);
407 conv.i[0] = (
Int_t) i1;
408 conv.i[1] = (
Int_t) i2;
415static BOOL
CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam)
417 ::ShowWindow(hwndChild, SW_SHOWNORMAL);
418 GdkWindow *child = gdk_window_lookup(hwndChild);
420 ((GdkWindowPrivate *) child)->mapped =
TRUE;
426static void _ChangeProperty(HWND w,
char *np,
char *dp,
int n,
Atom_t type)
431 hMem = ::GetProp(w, np);
435 hMem = ::GlobalAlloc(GHND,
n +
sizeof(
Atom_t));
436 p = (
char *) ::GlobalLock(hMem);
438 memcpy(p +
sizeof(
Atom_t), dp,
n);
439 ::GlobalUnlock(hMem);
440 ::SetProp(w, np, hMem);
448 int format,
int mode,
const unsigned char *data,
456 if (mode == GDK_PROP_MODE_REPLACE || mode == GDK_PROP_MODE_PREPEND) {
457 len = (
int) ::GlobalGetAtomName(property, buffer,
sizeof(buffer));
458 if ((atomName = (
char *)
malloc(len + 1)) == NULL) {
461 strcpy(atomName, buffer);
463 sprintf(propName,
"#0x%0.4x", (
unsigned) atomName);
464 _ChangeProperty(w, propName, (
char *) data, nelements,
type);
472static int _GetWindowProperty(GdkWindow *
id,
Atom_t property,
Long_t long_offset,
474 Atom_t * actual_type_return,
480 char *data, *destPtr;
485 w = (HWND) GDK_DRAWABLE_XID(
id);
487 if (::IsClipboardFormatAvailable(CF_TEXT) && ::OpenClipboard(NULL)) {
488 handle = ::GetClipboardData(CF_TEXT);
489 if (handle != NULL) {
490 data = (
char *) ::GlobalLock(handle);
491 *nitems_return = strlen(data);
493 destPtr = (
char *) *prop_return;
494 while (*data !=
'\0') {
502 ::GlobalUnlock(handle);
504 *bytes_after_return = 0;
510 ::RemoveProp(w, propName);
522 GdkImage *image = (GdkImage *)
id;
525 if (image->depth == 1) {
526 pixel = (((
char *) image->mem)[
y * image->bpl + (
x >> 3)] & (1 << (7 - (
x & 0x7)))) != 0;
529 switch (image->bpp) {
535 pixel = pixelp[0] | (pixelp[1] << 8);
538 pixel = pixelp[0] | (pixelp[1] << 8) | (pixelp[2] << 16);
541 pixel = pixelp[0] | (pixelp[1] << 8) | (pixelp[2] << 16);
551static void CollectImageColors(
ULong_t pixel,
ULong_t * &orgcolors,
554 if (maxcolors == 0) {
560 for (
int i = 0; i < ncolors; i++) {
561 if (pixel == orgcolors[i])
return;
563 if (ncolors >= maxcolors) {
571 orgcolors[ncolors++] = pixel;
577static char *EventMask2String(
UInt_t evmask)
579 static char bfr[500];
584 if (evmask & k##x##Mask) \
585 p += sprintf (p, "%s" #x, (p > bfr ? " " : ""))
603class TGWin32MainThread {
608 static LPCRITICAL_SECTION fCritSec;
609 static LPCRITICAL_SECTION fMessageMutex;
612 ~TGWin32MainThread();
613 static void LockMSG();
614 static void UnlockMSG();
617TGWin32MainThread *gMainThread = 0;
618LPCRITICAL_SECTION TGWin32MainThread::fCritSec = 0;
619LPCRITICAL_SECTION TGWin32MainThread::fMessageMutex = 0;
625TGWin32MainThread::~TGWin32MainThread()
628 ::LeaveCriticalSection(fCritSec);
629 ::DeleteCriticalSection(fCritSec);
635 ::LeaveCriticalSection(fMessageMutex);
636 ::DeleteCriticalSection(fMessageMutex);
637 delete fMessageMutex;
642 ::PostThreadMessage(fId, WM_QUIT, 0, 0);
643 ::CloseHandle(fHandle);
651void TGWin32MainThread::LockMSG()
653 if (fMessageMutex) ::EnterCriticalSection(fMessageMutex);
659void TGWin32MainThread::UnlockMSG()
661 if (fMessageMutex) ::LeaveCriticalSection(fMessageMutex);
668VOID CALLBACK MyTimerProc(HWND hwnd, UINT message, UINT idTimer, DWORD dwTime)
679Bool_t GUIThreadMessageFunc(MSG *msg)
682 static Int_t m_timer = 0;
684 if ( (msg->message == WM_NCLBUTTONDOWN) ) {
686 m_timer = SetTimer(NULL, 1, 20, (TIMERPROC) MyTimerProc);
688 else if (msg->message == WM_NCMOUSELEAVE ) {
690 KillTimer(NULL, m_timer);
709 TGWin32MainThread::LockMSG();
710 TranslateMessage(msg);
711 DispatchMessage(msg);
712 TGWin32MainThread::UnlockMSG();
719class TGWin32RefreshTimer :
public TTimer {
729 while (::PeekMessage(&msg, NULL, NULL, NULL, PM_NOREMOVE)) {
730 ::PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE);
734 GUIThreadMessageFunc(&msg);
743static DWORD WINAPI MessageProcessingLoop(void *p)
747 Bool_t endLoop = kFALSE;
748 TGWin32RefreshTimer *refersh = 0;
750 // force to create message queue
751 ::PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);
753 // periodically we refresh windows
754 // Don't create refresh timer if the application has been created inside PVSS
756 TString arg = gSystem->BaseName(gApplication->Argv(0));
757 if (!arg.Contains("PVSS"))
758 refersh = new TGWin32RefreshTimer();
762 erret = ::GetMessage(&msg, NULL, NULL, NULL);
763 if (erret <= 0) endLoop = kTRUE;
764 endLoop = MessageProcessingFunc(&msg);
767 TGWin32::Instance()->CloseDisplay();
773 erret = ::GetLastError();
774 Error("MsgLoop", "Error in GetMessage");
786TGWin32MainThread::TGWin32MainThread()
788 fCritSec =
new CRITICAL_SECTION;
789 ::InitializeCriticalSection(fCritSec);
790 fMessageMutex =
new CRITICAL_SECTION;
791 ::InitializeCriticalSection(fMessageMutex);
851 if (!
gROOT->IsBatch() && !gMainThread) {
852 gMainThread =
new TGWin32MainThread();
870 while (it.
Next(key, value)) {
882#ifdef OLD_THREAD_IMPLEMENTATION
904 TGWin32MainThread *delThread = gMainThread;
934 if (gMainThread && gMainThread->fCritSec) ::EnterCriticalSection(gMainThread->fCritSec);
942 if (gMainThread && gMainThread->fCritSec) ::LeaveCriticalSection(gMainThread->fCritSec);
950 if (!gdk_initialized) {
951 if (!gdk_init_check(NULL, NULL))
return kFALSE;
952 gdk_initialized =
true;
955 if (!gClipboardAtom) {
956 gClipboardAtom = gdk_atom_intern(
"CLIPBOARD",
kFALSE);
967 GdkPixmap *pixmp1, *pixmp2;
973 if (!
Init((
void*)dpyName)) {
983 fore.red = fore.green = fore.blue = 0;
984 back.red = back.green = back.blue = 0;
985 color.red = color.green = color.blue = 0;
988 fVisual = gdk_visual_get_best();
990 fDepth = gdk_visual_get_best_depth();
999 for (i = 0; i <
kMAXGC; i++) {
1000 gGClist[i] = gdk_gc_new(GDK_ROOT_PARENT());
1013 gdk_gc_get_values(
gGCtext, &gcvals);
1014 gdk_gc_set_foreground(
gGCinvt, &gcvals.background);
1015 gdk_gc_set_background(
gGCinvt, &gcvals.foreground);
1019 gdk_color_black(
fColormap, &echov.foreground);
1020 gdk_color_white(
fColormap, &echov.background);
1021 echov.function = GDK_INVERT;
1022 echov.subwindow_mode = GDK_CLIP_BY_CHILDREN;
1024 gdk_gc_new_with_values((GdkWindow *) GDK_ROOT_PARENT(), &echov,
1025 (GdkGCValuesMask) (GDK_GC_FOREGROUND |
1030 pixmp1 = gdk_bitmap_create_from_data(GDK_ROOT_PARENT(),
1033 pixmp2 = gdk_bitmap_create_from_data(GDK_ROOT_PARENT(),
1036 gNullCursor = gdk_cursor_new_from_pixmap((GdkDrawable *)pixmp1, (GdkDrawable *)pixmp2,
1037 &fore, &back, 0, 0);
1086 if ( gdk_visual_get_best_type() == GDK_VISUAL_TRUE_COLOR) {
1092 if ((
fVisual->blue_mask >> i) == 1) {
1101 if ((
fVisual->green_mask >> i) == 1) {
1110 if ((
fVisual->red_mask >> i) == 1) {
1118 SetTitle(
"ROOT interface to Win32 with TrueType fonts");
1152 if ( gdk_color_alloc((GdkColormap *)cmap, (GdkColor *)color) )
return kTRUE;
1171 GdkColorContext *cc = gdk_color_context_new(gdk_visual_get_system(), cmap);
1172 gdk_color_context_query_colors(cc, color, ncolors);
1173 gdk_color_context_free(cc);
1175 for (
Int_t i = 0; i < ncolors; i++) {
1230 static GdkColor col[5];
1231 GdkColor *bcol = 0, *bc;
1239 const Int_t maxdots = 50000;
1241 dots =
Int_t(source->width * source->rows);
1242 dots = dots > maxdots ? maxdots : dots;
1243 bcol =
new GdkColor[dots];
1248 for (
y = 0;
y < (
int) source->rows;
y++) {
1249 for (
x = 0;
x < (
int) source->width;
x++, bc++) {
1250 bc->pixel = GetPixelImage((
Drawable_t)xim, bx +
x, by +
y);
1251 if (++dotcnt >= maxdots)
break;
1258 for (
y = 0;
y < (
int) source->rows;
y++) {
1259 for (
x = 0;
x < (
int) source->width;
x++, bc++) {
1263 if (++dotcnt >= maxdots)
break;
1272 if (bc->red ==
r && bc->green ==
g && bc->blue ==
b) {
1286 if (fore != col[4].pixel || back != col[0].pixel) {
1287 col[4].pixel = fore;
1289 col[3].pixel = back;
1297 for (
x = 3;
x > 0;
x--) {
1298 col[
x].red = (col[4].red *
x + col[0].red *(4-
x)) /4;
1299 col[
x].green = (col[4].green*
x + col[0].green*(4-
x)) /4;
1300 col[
x].blue = (col[4].blue *
x + col[0].blue *(4-
x)) /4;
1302 Warning(
"DrawImage",
"cannot allocate smoothing color");
1303 col[
x].pixel = col[
x+1].pixel;
1310 for (
y = 0;
y < (
int) source->rows;
y++) {
1311 for (
x = 0;
x < (
int) source->width;
x++) {
1313 d = ((
d + 10) * 5) / 256;
1315 if (
d &&
x < (
int) source->width) {
1324 for (
int y = 0;
y < (
int) source->rows;
y++) {
1327 for (
int x = 0;
x < (
int) source->width;
x++) {
1328 if (
n == 0)
d = *
s++;
1334 row += source->pitch;
1390 if (
y+
h > height)
h = height -
y;
1392 return gdk_image_get((GdkDrawable*)cws,
x,
y, w,
h);
1407 if ((
int)w == 0 || (
int)
h == 0)
return kFALSE;
1411 if (
y + (
int)h <= 0 || y >= (
int)height)
return kFALSE;
1439 GdkImage *xim = gdk_image_new(GDK_IMAGE_SHARED, gdk_visual_get_best(), w,
h);
1448 gdk_gc_get_values((GdkGC*)
GetGC(3), &gcvals);
1455 Error(
"DrawText",
"error getting background image");
1460 Int_t xo = 0, yo = 0;
1461 if (
x1 < 0) xo = -
x1;
1462 if (y1 < 0) yo = -y1;
1464 for (
int yp = 0; yp < (
int) bim->height; yp++) {
1465 for (
int xp = 0; xp < (
int) bim->width; xp++) {
1466 pixel = GetPixelImage((
Drawable_t)bim, xp, yp);
1471 gdk_image_unref((GdkImage *)bim);
1479 pixel = gcvals.background.pixel;
1481 pixel = GetPixelImage((
Drawable_t)bim, 0, 0);
1483 Int_t xo = 0, yo = 0;
1484 if (
x1 < 0) xo = -
x1;
1485 if (y1 < 0) yo = -y1;
1487 for (
int yp = 0; yp <
h; yp++) {
1488 for (
int xp = 0; xp < (
int) w; xp++) {
1493 gdk_image_unref((GdkImage *)bim);
1503 if (FT_Glyph_To_Bitmap(&glyph->
fImage,
1505 : ft_render_mode_mono,
1507 FT_BitmapGlyph bitmap = (FT_BitmapGlyph)glyph->
fImage;
1508 FT_Bitmap* source = &bitmap->bitmap;
1511 bx = bitmap->left+Xoff;
1512 by =
h - bitmap->top-Yoff;
1513 DrawImage(source, gcvals.foreground.pixel, bg, xim, bx, by);
1518 gdk_draw_image((GdkDrawable *)cws,
GetGC(6), xim, 0, 0,
x1, y1, w,
h);
1520 gdk_image_unref(xim);
1563 if (!
gCws->ispixmap && !
gCws->double_buffer) {
1564 gdk_window_set_background(
gCws->drawing, (GdkColor *) &
GetColor(0).color);
1565 gdk_window_clear(
gCws->drawing);
1598 if (
gCws->ispixmap) {
1599 gdk_pixmap_unref(
gCws->window);
1601 gdk_window_destroy(
gCws->window,
kTRUE);
1605 gdk_pixmap_unref(
gCws->buffer);
1607 if (
gCws->new_colors) {
1608 gdk_colormap_free_colors((GdkColormap *)
fColormap,
1609 (GdkColor *)
gCws->new_colors,
gCws->ncolors);
1611 delete []
gCws->new_colors;
1612 gCws->new_colors = 0;
1638 gdk_window_copy_area(
gCws->drawing,
gGCpxmp, xpos, ypos,
gTws->drawing,
1690 int i, j, icol, ix, iy, w,
h, current_icol;
1702 for (i = 0; i < nx; i++) {
1704 for (j = 0; j < ny; j++) {
1705 icol = ic[i + (nx * j)];
1706 if (icol != current_icol) {
1708 current_icol = icol;
1726 static int lastn = 0;
1727 static GdkPoint *
xy = 0;
1735 delete [] (GdkPoint *)
xy;
1736 xy =
new GdkPoint[
n];
1739 for (i = 0; i <
n; i++) {
1740 xy[i].x = xyt[i].
fX;
1741 xy[i].y = xyt[i].
fY;
1772 dashes[i] = (gint8) 0;
1792 for (i = 0; i <
n; i++) {
1793 xy[i].fX = xyt[i].
fX;
1794 xy[i].fY = xyt[i].
fY;
1811 dashes[i] = (gint8) 0;
1818 for (i = 1; i <
n; i++) {
1819 int dx =
xy[i].fX -
xy[i - 1].fX;
1820 int dy =
xy[i].fY -
xy[i - 1].fY;
1822 if (dx < 0) dx = -dx;
1823 if (dy < 0) dy = -dy;
1843 static int lastn = 0;
1844 static GdkPoint *
xy = 0;
1852 delete [] (GdkPoint *)
xy;
1853 xy =
new GdkPoint[
n];
1857 for (i = 0; i <
n; i++) {
1858 xy[i].x = xyt[i].
fX;
1859 xy[i].y = xyt[i].
fY;
1868 for (
m = 0;
m <
n;
m++) {
1886 for (i = 0; i <
gMarker.n; i++) {
1895 for (i = 0; i <
gMarker.n; i++) {
1902 for (i = 0; i <
gMarker.n; i += 2) {
1952 if (which >=
kMAXGC || which < 0) {
1953 Error(
"GetGC",
"trying to get illegal GdkGC (which = %d)", which);
1972 return gTws->double_buffer;
1992 w = gdk_screen_width();
1993 h = gdk_screen_height();
1999 gdk_window_get_geometry((GdkDrawable *)
gTws->window, &
x, &
y,
2000 &
width, &height, &depth);
2002 gdk_window_get_deskrelative_origin((GdkDrawable *)
gTws->window, &
x, &
y);
2004 if (
width > 0 && height > 0) {
2006 gTws->height = height;
2026 nplanes = gdk_visual_get_best_depth();
2036 }
else if (index == 1) {
2080 if (!
gTws->open)
return;
2082 gdk_window_move((GdkDrawable *)
gTws->window,
x,
y);
2109 newsize *
sizeof(XWindow_t),
2118 depth =gdk_visual_get_best_depth();
2119 gCws->window = (GdkPixmap *) gdk_pixmap_new(GDK_ROOT_PARENT(),wval,hval,depth);
2120 gdk_drawable_get_size((GdkDrawable *)
gCws->window, &ww, &hh);
2122 for (i = 0; i <
kMAXGC; i++) {
2123 gdk_gc_set_clip_mask((GdkGC *)
gGClist[i], (GdkDrawable *)None);
2134 gCws->double_buffer = 0;
2138 gCws->height = hval;
2139 gCws->new_colors = 0;
2150 GdkWindowAttr attributes;
2151 unsigned long attr_mask = 0;
2154 int wval, hval, depth;
2156 GdkWindow *wind = (GdkWindow *) win;
2158 gdk_window_get_geometry(wind, &xval, &yval, &wval, &hval, &depth);
2176 newsize *
sizeof(XWindow_t),
2188 attributes.wclass = GDK_INPUT_OUTPUT;
2189 attributes.event_mask = 0
L;
2190 attributes.event_mask |= GDK_EXPOSURE_MASK | GDK_STRUCTURE_MASK |
2191 GDK_PROPERTY_CHANGE_MASK;
2194 attributes.x = xval;
2196 attributes.x = -1.0 * xval;
2200 attributes.y = yval;
2202 attributes.y = -1.0 * yval;
2204 attributes.width = wval;
2205 attributes.height = hval;
2206 attributes.colormap = gdk_colormap_get_system();
2207 attributes.visual = gdk_window_get_visual(wind);
2208 attributes.override_redirect =
TRUE;
2210 if ((attributes.y > 0) && (attributes.x > 0)) {
2211 attr_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_COLORMAP |
2212 GDK_WA_WMCLASS | GDK_WA_NOREDIR;
2214 attr_mask = GDK_WA_COLORMAP | GDK_WA_WMCLASS | GDK_WA_NOREDIR;
2217 if (attributes.visual != NULL) {
2218 attr_mask |= GDK_WA_VISUAL;
2220 attributes.window_type = GDK_WINDOW_CHILD;
2221 gCws->window = gdk_window_new(wind, &attributes, attr_mask);
2222 HWND window = (HWND)GDK_DRAWABLE_XID((GdkWindow *)
gCws->window);
2223 ::ShowWindow(window, SW_SHOWNORMAL);
2224 ::ShowWindow(window, SW_RESTORE);
2225 ::BringWindowToTop(window);
2228 ::SetClassLong(window, GCL_HCURSOR,
2236 gCws->double_buffer = 0;
2240 gCws->height = hval;
2241 gCws->new_colors = 0;
2268 gdk_pixmap_unref((GdkPixmap *)pix);
2299 static int xloc = 0;
2300 static int yloc = 0;
2301 static int xlocp = 0;
2302 static int ylocp = 0;
2303 static GdkCursor *cursor = NULL;
2311 if (cursor == NULL) {
2313 gdk_window_set_cursor((GdkWindow *)
gCws->window, (GdkCursor *)
gNullCursor);
2317 cursor = gdk_syscursor_new((
ULong_t)IDC_CROSS);
2319 cursor = gdk_cursor_new((GdkCursorType)GDK_CROSSHAIR);
2320 gdk_window_set_cursor((GdkWindow *)
gCws->window, (GdkCursor *)cursor);
2330 while (button_press == 0) {
2331 event = gdk_event_get();
2344 radius = (
int)
TMath::Sqrt((
double)((xloc - xlocp) * (xloc - xlocp) +
2345 (yloc - ylocp) * (yloc - ylocp)));
2348 xlocp - radius, ylocp - radius,
2349 2 * radius, 2 * radius, 0, 23040);
2353 gdk_draw_line(
gCws->window,
gGCecho, xlocp, ylocp, xloc, yloc);
2366 xloc =
event->button.x;
2367 yloc =
event->button.y;
2369 switch (event->type) {
2371 case GDK_LEAVE_NOTIFY:
2374 event = gdk_event_get();
2376 if (event->type == GDK_ENTER_NOTIFY) {
2377 gdk_event_free(event);
2380 gdk_event_free(event);
2387 case GDK_BUTTON_PRESS:
2388 button_press =
event->button.button;
2389 xlocp =
event->button.x;
2390 ylocp =
event->button.y;
2391 gdk_cursor_unref(cursor);
2395 case GDK_BUTTON_RELEASE:
2397 button_press = 10 +
event->button.button;
2398 xlocp =
event->button.x;
2399 ylocp =
event->button.y;
2405 button_press =
event->key.keyval;
2406 xlocp =
event->button.x;
2407 ylocp =
event->button.y;
2411 case GDK_KEY_RELEASE:
2413 button_press = -1 * (
int)(event->key.keyval);
2414 xlocp =
event->button.x;
2415 ylocp =
event->button.y;
2423 xtmp =
event->button.x;
2424 ytmp =
event->button.y;
2426 gdk_event_free(event);
2429 if (button_press == 0) {
2440 return button_press;
2454 static GdkCursor *cursor = NULL;
2455 static int percent = 0;
2456 static GdkWindow *CurWnd;
2461 int len_text = strlen(
text);
2465 CurWnd = (GdkWindow *)
gCws->window;
2467 if (cursor == NULL) {
2469 cursor = gdk_syscursor_new((
ULong_t)IDC_HELP);
2471 cursor = gdk_cursor_new((GdkCursorType)GDK_QUESTION_ARROW);
2474 gdk_window_set_cursor(CurWnd, cursor);
2476 for (nt = len_text; nt > 0 &&
text[nt - 1] ==
' '; nt--);
2479 focuswindow = ::SetFocus((HWND)GDK_DRAWABLE_XID(CurWnd));
2494 event = gdk_event_get();
2497 ::SleepEx(10,
kTRUE);
2508 char *stmp =
new char[
pt+1];
2516 if (
pt < len_text) {
2524 if (event != NULL) {
2525 switch (event->type) {
2526 case GDK_BUTTON_PRESS:
2527 case GDK_ENTER_NOTIFY:
2528 focuswindow = ::SetFocus((HWND)GDK_DRAWABLE_XID(CurWnd));
2531 case GDK_LEAVE_NOTIFY:
2532 ::SetFocus(focuswindow);
2535 nbytes =
event->key.length;
2536 for (i = 0; i < nbytes; i++) {
2537 keybuf[i] =
event->key.string[i];
2539 keysym =
event->key.keyval;
2575 if (isascii(keybuf[0]) && isprint(keybuf[0])) {
2577 if (nt < len_text) {
2580 for (i = nt - 1; i >
pt; i--) {
2583 if (
pt < len_text) {
2588 switch (keybuf[0]) {
2595 for (i =
pt; i < nt; i++) {
2616 for (i =
pt; i < nt; i++) {
2636 for (i =
pt; i < nt; i++)
2666 gdk_event_free(event);
2670 ::SetFocus(focuswindow);
2675 gdk_cursor_unref(cursor);
2699 if (
gTws->width == w &&
gTws->height ==
h)
2702 gdk_window_resize((GdkWindow *)
gTws->window, w,
h);
2706 if (
gTws->width < w ||
gTws->height <
h) {
2707 gdk_pixmap_unref(
gTws->buffer);
2708 gTws->buffer = gdk_pixmap_new(GDK_ROOT_PARENT(),
2709 w,
h, gdk_visual_get_best_depth());
2711 for (i = 0; i <
kMAXGC; i++) {
2712 gdk_gc_set_clip_mask(
gGClist[i], None);
2746 if (
gTws->width >= wval - 1 &&
gTws->width <= wval + 1 &&
2747 gTws->height >= hval - 1 &&
gTws->height <= hval + 1)
2751 if (
gTws->width < wval ||
gTws->height < hval) {
2752 gdk_pixmap_unref((GdkPixmap *)
gTws->window);
2753 depth = gdk_visual_get_best_depth();
2754 gTws->window = gdk_pixmap_new(GDK_ROOT_PARENT(), wval, hval, depth);
2757 gdk_drawable_get_size(
gTws->window, &ww, &hh);
2759 for (i = 0; i <
kMAXGC; i++) {
2760 gdk_gc_set_clip_mask((GdkGC *)
gGClist[i], (GdkDrawable *)None);
2770 gTws->height = hval;
2780 int xval = 0, yval = 0;
2781 GdkWindow *win, *root = NULL;
2782 int wval = 0, hval = 0, depth = 0;
2788 win = (GdkWindow *)
gTws->window;
2789 gdk_window_get_geometry(win, &xval, &yval,
2790 &wval, &hval, &depth);
2793 if (
gTws->width == wval &&
gTws->height == hval) {
2797 gdk_window_resize((GdkWindow *)
gTws->window, wval, hval);
2800 if (
gTws->width < wval ||
gTws->height < hval) {
2801 gdk_pixmap_unref((GdkPixmap *)
gTws->buffer);
2802 depth = gdk_visual_get_best_depth();
2803 gTws->buffer = (GdkPixmap *) gdk_pixmap_new(GDK_ROOT_PARENT(),
2807 for (i = 0; i <
kMAXGC; i++) {
2808 gdk_gc_set_clip_mask((GdkGC *)
gGClist[i], (GdkDrawable *)None);
2820 gTws->height = hval;
2837 if (
gCws->clip && !
gCws->ispixmap && !
gCws->double_buffer) {
2838 rect.x =
gCws->xclip;
2839 rect.y =
gCws->yclip;
2840 rect.width =
gCws->wclip;
2841 rect.height =
gCws->hclip;
2843 for (i = 0; i <
kMAXGC; i++) {
2844 gdk_gc_set_clip_rectangle((GdkGC *)
gGClist[i], &rect);
2847 for (i = 0; i <
kMAXGC; i++) {
2848 gdk_gc_set_clip_mask((GdkGC *)
gGClist[i], (GdkDrawable *)None);
2860 if (chupx == 0 && chupy == 0) {
2862 }
else if (chupx == 0 && chupy == 1) {
2864 }
else if (chupx == -1 && chupy == 0) {
2866 }
else if (chupx == 0 && chupy == -1) {
2868 }
else if (chupx == 1 && chupy == 0) {
2874 180.) / 3.14159) - 90;
2892 for (
int i = 0; i <
kMAXGC; i++) {
2893 gdk_gc_set_clip_mask((GdkGC *)
gGClist[i], (GdkDrawable *)None);
2916 if (
gTws->clip && !
gTws->ispixmap && !
gTws->double_buffer) {
2917 rect.x =
gTws->xclip;
2918 rect.y =
gTws->yclip;
2919 rect.width =
gTws->wclip;
2920 rect.height =
gTws->hclip;
2922 for (
int i = 0; i <
kMAXGC; i++) {
2923 gdk_gc_set_clip_rectangle((GdkGC *)
gGClist[i], &rect);
2937 return col.
color.pixel;
2957 }
else if (!
fColormap && (ci < 0 || ci > 1)) {
2962 gdk_gc_get_values(gc, &gcvals);
2964 color.pixel = col.
color.pixel ^ gcvals.background.pixel;
2965 color.red = GetRValue(color.pixel);
2966 color.green = GetGValue(color.pixel);
2967 color.blue = GetBValue(color.pixel);
2968 gdk_gc_set_foreground(gc, &color);
2971 gdk_gc_set_foreground(gc, &col.
color);
2974 gdk_gc_get_values(gc, &gcvals);
2976 if (gcvals.foreground.pixel != gcvals.background.pixel) {
2977 gdk_gc_set_background(gc, &
GetColor(!ci).color);
2990 gdk_window_set_cursor((GdkWindow *)
gTws->window, (GdkCursor *)
fCursors[cursor]);
3000 static GdkWindow *lid = 0;
3001 static GdkCursor *lcur = 0;
3003 if ((lid == (GdkWindow *)
id) && (lcur==(GdkCursor *)curid))
return;
3004 lid = (GdkWindow *)
id;
3005 lcur = (GdkCursor *)curid;
3007 gdk_window_set_cursor((GdkWindow *)
id, (GdkCursor *)curid);
3037 if (!
gTws->open)
return;
3055 if (!
gTws->double_buffer)
return;
3056 gTws->double_buffer = 0;
3067 if (!
gTws->buffer) {
3068 gTws->buffer = gdk_pixmap_new(GDK_ROOT_PARENT(),
3070 gdk_visual_get_best_depth());
3076 for (
int i = 0; i <
kMAXGC; i++) {
3077 gdk_gc_set_clip_mask(
gGClist[i], None);
3079 gTws->double_buffer = 1;
3098 for (i = 0; i <
kMAXGC; i++) {
3099 gdk_gc_set_function(
gGClist[i], GDK_COPY);
3104 for (i = 0; i <
kMAXGC; i++) {
3105 gdk_gc_set_function(
gGClist[i], GDK_XOR);
3110 for (i = 0; i <
kMAXGC; i++) {
3111 gdk_gc_set_function(
gGClist[i], GDK_INVERT);
3168 static int current_fasi = 0;
3177 gdk_gc_set_fill(
gGCfill, GDK_SOLID);
3186 gdk_gc_set_fill(
gGCfill, GDK_STIPPLED);
3188 if (fasi != current_fasi) {
3193 int stn = (fasi >= 1 && fasi <=25) ? fasi : 2;
3194 gFillPattern = gdk_bitmap_create_from_data(GDK_ROOT_PARENT(),
3197 current_fasi = fasi;
3213 EnableWindow((HWND) GDK_DRAWABLE_XID(
gCws->window), inp);
3221 if ((cindex < 0) || (cindex==
fLineColor))
return;
3290 static Int_t dashed[2] = { 3, 3 };
3291 static Int_t dotted[2] = { 1, 2 };
3292 static Int_t dasheddotted[4] = { 3, 4, 1, 4 };
3308 for (
Int_t j = 0; j<nt; j++) {
3310 sscanf(((
TObjString*)tokens->
At(j))->GetName(),
"%d", &it);
3311 linestyle[j] = (
Int_t)(it/4);
3314 delete [] linestyle;
3385 for (
int i = 0; i <
gMarker.n; i++) {
3410 if (markerstyle == 1 || markerstyle == 6 || markerstyle == 7) {
3411 gdk_gc_set_line_attributes(
gGCmark, 0, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER);
3419 static GdkPoint shape[30];
3422 Int_t im =
Int_t(4 * MarkerSizeReduced + 0.5);
3424 if (markerstyle == 2) {
3435 }
else if (markerstyle == 3 || markerstyle == 31) {
3455 }
else if (markerstyle == 4 || markerstyle == 24) {
3458 }
else if (markerstyle == 5) {
3470 }
else if (markerstyle == 6) {
3481 }
else if (markerstyle == 7) {
3496 }
else if (markerstyle == 8 || markerstyle == 20) {
3499 }
else if (markerstyle == 21) {
3512 }
else if (markerstyle == 22) {
3523 }
else if (markerstyle == 23) {
3534 }
else if (markerstyle == 25) {
3547 }
else if (markerstyle == 26) {
3558 }
else if (markerstyle == 27) {
3560 Int_t imx =
Int_t(2.66 * MarkerSizeReduced + 0.5);
3572 }
else if (markerstyle == 28) {
3574 Int_t imx =
Int_t(1.33 * MarkerSizeReduced + 0.5);
3602 }
else if (markerstyle == 29) {
3604 Int_t im1 =
Int_t(0.66 * MarkerSizeReduced + 0.5);
3605 Int_t im2 =
Int_t(2.00 * MarkerSizeReduced + 0.5);
3606 Int_t im3 =
Int_t(2.66 * MarkerSizeReduced + 0.5);
3607 Int_t im4 =
Int_t(1.33 * MarkerSizeReduced + 0.5);
3631 }
else if (markerstyle == 30) {
3633 Int_t im1 =
Int_t(0.66 * MarkerSizeReduced + 0.5);
3634 Int_t im2 =
Int_t(2.00 * MarkerSizeReduced + 0.5);
3635 Int_t im3 =
Int_t(2.66 * MarkerSizeReduced + 0.5);
3636 Int_t im4 =
Int_t(1.33 * MarkerSizeReduced + 0.5);
3660 }
else if (markerstyle == 32) {
3662 shape[0].x = 0; shape[0].y = im;
3663 shape[1].x = im; shape[1].y = -im;
3664 shape[2].x = -im; shape[2].y = -im;
3665 shape[3].x = 0; shape[3].y = im;
3667 }
else if (markerstyle == 33) {
3669 Int_t imx =
Int_t(2.66*MarkerSizeReduced + 0.5);
3670 shape[0].x =-imx; shape[0].y = 0;
3671 shape[1].x = 0; shape[1].y = -im;
3672 shape[2].x = imx; shape[2].y = 0;
3673 shape[3].x = 0; shape[3].y = im;
3674 shape[4].x =-imx; shape[4].y = 0;
3676 }
else if (markerstyle == 34) {
3678 Int_t imx =
Int_t(1.33*MarkerSizeReduced + 0.5);
3679 shape[0].x = -im; shape[0].y =-imx;
3680 shape[1].x =-imx; shape[1].y =-imx;
3681 shape[2].x =-imx; shape[2].y = -im;
3682 shape[3].x = imx; shape[3].y = -im;
3683 shape[4].x = imx; shape[4].y =-imx;
3684 shape[5].x = im; shape[5].y =-imx;
3685 shape[6].x = im; shape[6].y = imx;
3686 shape[7].x = imx; shape[7].y = imx;
3687 shape[8].x = imx; shape[8].y = im;
3688 shape[9].x =-imx; shape[9].y = im;
3689 shape[10].x=-imx; shape[10].y= imx;
3690 shape[11].x= -im; shape[11].y= imx;
3691 shape[12].x= -im; shape[12].y=-imx;
3693 }
else if (markerstyle == 35) {
3695 shape[0].x = -im; shape[0].y = -im;
3696 shape[1].x = im; shape[1].y = -im;
3697 shape[2].x = im; shape[2].y = im;
3698 shape[3].x = -im; shape[3].y = im;
3699 shape[4].x = -im; shape[4].y = -im;
3700 shape[5].x = im; shape[5].y = im;
3701 shape[6].x = -im; shape[6].y = im;
3702 shape[7].x = im; shape[7].y = -im;
3704 }
else if (markerstyle == 36) {
3706 shape[0].x =-im; shape[0].y = 0;
3707 shape[1].x = 0; shape[1].y = -im;
3708 shape[2].x = im; shape[2].y = 0;
3709 shape[3].x = 0; shape[3].y = im;
3710 shape[4].x =-im; shape[4].y = 0;
3711 shape[5].x = im; shape[5].y = 0;
3712 shape[6].x = 0; shape[6].y = im;
3713 shape[7].x = 0; shape[7].y =-im;
3715 }
else if (markerstyle == 37) {
3717 Int_t im2 =
Int_t(2.0*MarkerSizeReduced + 0.5);
3718 shape[0].x = 0; shape[0].y = 0;
3719 shape[1].x =-im2; shape[1].y = im;
3720 shape[2].x = -im; shape[2].y = 0;
3721 shape[3].x = 0; shape[3].y = 0;
3722 shape[4].x =-im2; shape[4].y = -im;
3723 shape[5].x = im2; shape[5].y = -im;
3724 shape[6].x = 0; shape[6].y = 0;
3725 shape[7].x = im; shape[7].y = 0;
3726 shape[8].x = im2; shape[8].y = im;
3727 shape[9].x = 0; shape[9].y = 0;
3729 }
else if (markerstyle == 38) {
3731 Int_t im2 =
Int_t(2.0*MarkerSizeReduced + 0.5);
3732 shape[0].x = -im; shape[0].y = 0;
3733 shape[1].x = -im; shape[1].y =-im2;
3734 shape[2].x =-im2; shape[2].y =-im;
3735 shape[3].x = im2; shape[3].y = -im;
3736 shape[4].x = im; shape[4].y =-im2;
3737 shape[5].x = im; shape[5].y = im2;
3738 shape[6].x = im2; shape[6].y = im;
3739 shape[7].x =-im2; shape[7].y = im;
3740 shape[8].x = -im; shape[8].y = im2;
3741 shape[9].x = -im; shape[9].y = 0;
3742 shape[10].x = im; shape[10].y = 0;
3743 shape[11].x = 0; shape[11].y = 0;
3744 shape[12].x = 0; shape[12].y = -im;
3745 shape[13].x = 0; shape[13].y = im;
3746 shape[14].x = 0; shape[14].y = 0;
3748 }
else if (markerstyle == 39) {
3750 Int_t im2 =
Int_t(2.0*MarkerSizeReduced + 0.5);
3751 shape[0].x = 0; shape[0].y = 0;
3752 shape[1].x =-im2; shape[1].y = im;
3753 shape[2].x = -im; shape[2].y = 0;
3754 shape[3].x = 0; shape[3].y = 0;
3755 shape[4].x =-im2; shape[4].y = -im;
3756 shape[5].x = im2; shape[5].y = -im;
3757 shape[6].x = 0; shape[6].y = 0;
3758 shape[7].x = im; shape[7].y = 0;
3759 shape[8].x = im2; shape[8].y = im;
3761 }
else if (markerstyle == 40) {
3763 Int_t im2 =
Int_t(2.0*MarkerSizeReduced + 0.5);
3764 shape[0].x = 0; shape[0].y = 0;
3765 shape[1].x = im2; shape[1].y = im;
3766 shape[2].x = im; shape[2].y = im2;
3767 shape[3].x = 0; shape[3].y = 0;
3768 shape[4].x = im; shape[4].y = -im2;
3769 shape[5].x = im2; shape[5].y = -im;
3770 shape[6].x = 0; shape[6].y = 0;
3771 shape[7].x = -im2; shape[7].y = -im;
3772 shape[8].x = -im; shape[8].y = -im2;
3773 shape[9].x = 0; shape[9].y = 0;
3774 shape[10].x = -im; shape[10].y = im2;
3775 shape[11].x = -im2; shape[11].y = im;
3776 shape[12].x = 0; shape[12].y = 0;
3778 }
else if (markerstyle == 41) {
3780 Int_t im2 =
Int_t(2.0*MarkerSizeReduced + 0.5);
3781 shape[0].x = 0; shape[0].y = 0;
3782 shape[1].x = im2; shape[1].y = im;
3783 shape[2].x = im; shape[2].y = im2;
3784 shape[3].x = 0; shape[3].y = 0;
3785 shape[4].x = im; shape[4].y = -im2;
3786 shape[5].x = im2; shape[5].y = -im;
3787 shape[6].x = 0; shape[6].y = 0;
3788 shape[7].x = -im2; shape[7].y = -im;
3789 shape[8].x = -im; shape[8].y = -im2;
3790 shape[9].x = 0; shape[9].y = 0;
3791 shape[10].x = -im; shape[10].y = im2;
3792 shape[11].x = -im2; shape[11].y = im;
3793 shape[12].x = 0; shape[12].y = 0;
3795 }
else if (markerstyle == 42) {
3798 shape[0].x= 0; shape[0].y= im;
3799 shape[1].x= -imx; shape[1].y= imx;
3800 shape[2].x = -im; shape[2].y = 0;
3801 shape[3].x = -imx; shape[3].y = -imx;
3802 shape[4].x = 0; shape[4].y = -im;
3803 shape[5].x = imx; shape[5].y = -imx;
3804 shape[6].x = im; shape[6].y = 0;
3805 shape[7].x= imx; shape[7].y= imx;
3806 shape[8].x= 0; shape[8].y= im;
3808 }
else if (markerstyle == 43) {
3811 shape[0].x = 0; shape[0].y = im;
3812 shape[1].x = -imx; shape[1].y = imx;
3813 shape[2].x = -im; shape[2].y = 0;
3814 shape[3].x = -imx; shape[3].y = -imx;
3815 shape[4].x = 0; shape[4].y = -im;
3816 shape[5].x = imx; shape[5].y = -imx;
3817 shape[6].x = im; shape[6].y = 0;
3818 shape[7].x = imx; shape[7].y = imx;
3819 shape[8].x = 0; shape[8].y = im;
3821 }
else if (markerstyle == 44) {
3823 Int_t im2 =
Int_t(2.0*MarkerSizeReduced + 0.5);
3824 shape[0].x = 0; shape[0].y = 0;
3825 shape[1].x = im2; shape[1].y = im;
3826 shape[2].x = -im2; shape[2].y = im;
3827 shape[3].x = im2; shape[3].y = -im;
3828 shape[4].x = -im2; shape[4].y = -im;
3829 shape[5].x = 0; shape[5].y = 0;
3830 shape[6].x = im; shape[6].y = im2;
3831 shape[7].x = im; shape[7].y = -im2;
3832 shape[8].x = -im; shape[8].y = im2;
3833 shape[9].x = -im; shape[9].y = -im2;
3834 shape[10].x = 0; shape[10].y = 0;
3836 }
else if (markerstyle == 45) {
3838 Int_t im0 =
Int_t(0.4*MarkerSizeReduced + 0.5);
3839 Int_t im2 =
Int_t(2.0*MarkerSizeReduced + 0.5);
3840 shape[0].x = im0; shape[0].y = im0;
3841 shape[1].x = im2; shape[1].y = im;
3842 shape[2].x = -im2; shape[2].y = im;
3843 shape[3].x = -im0; shape[3].y = im0;
3844 shape[4].x = -im; shape[4].y = im2;
3845 shape[5].x = -im; shape[5].y = -im2;
3846 shape[6].x = -im0; shape[6].y = -im0;
3847 shape[7].x = -im2; shape[7].y = -im;
3848 shape[8].x = im2; shape[8].y = -im;
3849 shape[9].x = im0; shape[9].y = -im0;
3850 shape[10].x = im; shape[10].y = -im2;
3851 shape[11].x = im; shape[11].y = im2;
3852 shape[12].x = im0; shape[12].y = im0;
3854 }
else if (markerstyle == 46) {
3856 Int_t im2 =
Int_t(2.0*MarkerSizeReduced + 0.5);
3857 shape[0].x = 0; shape[0].y = im2;
3858 shape[1].x = -im2; shape[1].y = im;
3859 shape[2].x = -im; shape[2].y = im2;
3860 shape[3].x = -im2; shape[3].y = 0;
3861 shape[4].x = -im; shape[4].y = -im2;
3862 shape[5].x = -im2; shape[5].y = -im;
3863 shape[6].x = 0; shape[6].y = -im2;
3864 shape[7].x = im2; shape[7].y = -im;
3865 shape[8].x = im; shape[8].y = -im2;
3866 shape[9].x = im2; shape[9].y = 0;
3867 shape[10].x = im; shape[10].y = im2;
3868 shape[11].x = im2; shape[11].y = im;
3869 shape[12].x = 0; shape[12].y = im2;
3871 }
else if (markerstyle == 47) {
3873 Int_t im2 =
Int_t(2.0*MarkerSizeReduced + 0.5);
3874 shape[0].x = 0; shape[0].y = im2;
3875 shape[1].x = -im2; shape[1].y = im;
3876 shape[2].x = -im; shape[2].y = im2;
3877 shape[3].x = -im2; shape[3].y = 0;
3878 shape[4].x = -im; shape[4].y = -im2;
3879 shape[5].x = -im2; shape[5].y = -im;
3880 shape[6].x = 0; shape[6].y = -im2;
3881 shape[7].x = im2; shape[7].y = -im;
3882 shape[8].x = im; shape[8].y = -im2;
3883 shape[9].x = im2; shape[9].y = 0;
3884 shape[10].x = im; shape[10].y = im2;
3885 shape[11].x = im2; shape[11].y = im;
3886 shape[12].x = 0; shape[12].y = im2;
3888 }
else if (markerstyle == 48) {
3890 Int_t im2 =
Int_t(2.0*MarkerSizeReduced + 0.5);
3891 shape[0].x = 0; shape[0].y = im2*1.005;
3892 shape[1].x = -im2; shape[1].y = im;
3893 shape[2].x = -im; shape[2].y = im2;
3894 shape[3].x = -im2; shape[3].y = 0;
3895 shape[4].x = -im; shape[4].y = -im2;
3896 shape[5].x = -im2; shape[5].y = -im;
3897 shape[6].x = 0; shape[6].y = -im2;
3898 shape[7].x = im2; shape[7].y = -im;
3899 shape[8].x = im; shape[8].y = -im2;
3900 shape[9].x = im2; shape[9].y = 0;
3901 shape[10].x = im; shape[10].y = im2;
3902 shape[11].x = im2; shape[11].y = im;
3903 shape[12].x = 0; shape[12].y = im2*0.995;
3904 shape[13].x = im2*0.995; shape[13].y = 0;
3905 shape[14].x = 0; shape[14].y = -im2*0.995;
3906 shape[15].x = -im2*0.995; shape[15].y = 0;
3907 shape[16].x = 0; shape[16].y = im2*0.995;
3909 }
else if (markerstyle == 49) {
3911 Int_t imx =
Int_t(1.33*MarkerSizeReduced + 0.5);
3912 shape[0].x =-imx; shape[0].y =-imx*1.005;
3913 shape[1].x =-imx; shape[1].y = -im;
3914 shape[2].x = imx; shape[2].y = -im;
3915 shape[3].x = imx; shape[3].y =-imx;
3916 shape[4].x = im; shape[4].y =-imx;
3917 shape[5].x = im; shape[5].y = imx;
3918 shape[6].x = imx; shape[6].y = imx;
3919 shape[7].x = imx; shape[7].y = im;
3920 shape[8].x =-imx; shape[8].y = im;
3921 shape[9].x =-imx; shape[9].y = imx;
3922 shape[10].x = -im; shape[10].y = imx;
3923 shape[11].x = -im; shape[11].y =-imx;
3924 shape[12].x =-imx; shape[12].y =-imx*0.995;
3925 shape[13].x =-imx; shape[13].y = imx;
3926 shape[14].x = imx; shape[14].y = imx;
3927 shape[15].x = imx; shape[15].y =-imx;
3928 shape[16].x =-imx; shape[16].y =-imx*1.005;
3946 Int_t depth = gdk_visual_get_best_depth();
3948 if (depth <= 8)
return;
3949 if (percent == 0)
return;
3952 ULong_t *orgcolors = 0, *tmpc = 0;
3953 Int_t maxcolors = 0, ncolors, ntmpc = 0;
3956 if (
gCws->new_colors) {
3957 tmpc =
gCws->new_colors;
3958 ntmpc =
gCws->ncolors;
3961 GdkImage *image = gdk_image_get((GdkDrawable*)
gCws->drawing, 0, 0,
3969 CollectImageColors(pixel, orgcolors, ncolors, maxcolors);
3973 gdk_image_unref(image);
3974 ::operator
delete(orgcolors);
3990 gdk_draw_image(
gCws->drawing,
gGCpxmp, (GdkImage *)image,
3991 0, 0, 0, 0,
gCws->width,
gCws->height);
3996 gdk_colors_free((GdkColormap *)
fColormap, tmpc, ntmpc, 0);
3999 gdk_image_unref(image);
4000 ::operator
delete(orgcolors);
4010 if (ncolors <= 0)
return;
4011 GdkColor *xcol =
new GdkColor[ncolors];
4014 for (i = 0; i < ncolors; i++) {
4015 xcol[i].pixel = orgcolors[i];
4016 xcol[i].red = xcol[i].green = xcol[i].blue = 0;
4019 GdkColorContext *cc;
4020 cc = gdk_color_context_new(gdk_visual_get_system(), (GdkColormap *)
fColormap);
4021 gdk_color_context_query_colors(cc, xcol, ncolors);
4022 gdk_color_context_free(cc);
4027 for (i = 0; i < ncolors; i++) {
4028 val = xcol[i].red + add;
4033 val = xcol[i].green + add;
4038 val = xcol[i].blue + add;
4044 ret = gdk_color_alloc((GdkColormap *)
fColormap, &xcol[i]);
4048 "failed to allocate color %hd, %hd, %hd", xcol[i].red,
4049 xcol[i].green, xcol[i].blue);
4055 gCws->ncolors = ncolors;
4057 for (i = 0; i < ncolors; i++) {
4058 gCws->new_colors[i] = xcol[i].pixel;
4069 for (
int i = 0; i < ncolors; i++) {
4070 if (pixel == orgcolors[i])
return i;
4072 Error(
"FindColor",
"did not find color, should never happen!");
4090 xcol.pixel = RGB(xcol.red, xcol.green, xcol.blue);
4095 if (col.
color.red == xcol.red && col.
color.green == xcol.green &&
4096 col.
color.blue == xcol.blue)
4099 gdk_colormap_free_colors((GdkColormap *)
fColormap,
4100 (GdkColor *)&col, 1);
4106 col.
color.pixel = xcol.pixel;
4107 col.
color.red = xcol.red;
4108 col.
color.green = xcol.green;
4109 col.
color.blue = xcol.blue;
4122 if (talign==current)
return;
4125 Int_t txalh = talign / 10;
4126 Int_t txalv = talign % 10;
4181 static Int_t current = 0;
4183 if ((cindex < 0) || (
Int_t(cindex)==current))
return;
4188 gdk_gc_get_values(
gGCtext, &values);
4189 gdk_gc_set_foreground(
gGCinvt, &values.background);
4190 gdk_gc_set_background(
gGCinvt, &values.foreground);
4192 current =
Int_t(cindex);
4233 dw = (HWND) GDK_DRAWABLE_XID((GdkWindow *)
gCws->window);
4235 dw = (HWND) GDK_DRAWABLE_XID((GdkWindow *)
id);
4237 tmp.x = ix > 0 ? ix : cpt.x;
4238 tmp.y = iy > 0 ? iy : cpt.y;
4239 ClientToScreen(dw, &tmp);
4240 SetCursorPos(tmp.x, tmp.y);
4276 void (*get_scline) (
int,
int,
Byte_t *),
4280 int GIFinfo(
Byte_t * GIFarr,
int *Width,
int *Height,
int *Ncols);
4289 for (
int i = 0; i <
width; i++) {
4315 Int_t maxcolors = 0, ncolors;
4322 CollectImageColors(pixel, orgcolors, ncolors, maxcolors);
4327 GdkColor *xcol =
new GdkColor[ncolors];
4330 for (i = 0; i < ncolors; i++) {
4331 xcol[i].pixel = orgcolors[i];
4333 xcol[i].red = GetRValue(xcol[i].pixel);
4334 xcol[i].green = GetGValue(xcol[i].pixel);
4335 xcol[i].blue = GetBValue(xcol[i].pixel);
4338 GdkColorContext *cc;
4339 cc = gdk_color_context_new(gdk_visual_get_system(), (GdkColormap *)
fColormap);
4340 gdk_color_context_query_colors(cc, xcol, ncolors);
4341 gdk_color_context_free(cc);
4349 for (i = 0; i < ncolors; i++) {
4351 G[i] = xcol[i].green;
4352 B[i] = xcol[i].blue;
4367 ::operator
delete(orgcolors);
4375 Byte_t scline[2000],
r[256],
b[256],
g[256];
4377 Int_t ncol, maxcol, i;
4383 gGifImage = gdk_image_get((GdkDrawable*)
gCws->drawing, 0, 0,
4391 "can not create GIF of image containing more than 256 colors");
4399 for (i = 0; i < ncol; i++) {
4400 if (maxcol <
R[i]) maxcol =
R[i];
4401 if (maxcol <
G[i]) maxcol =
G[i];
4402 if (maxcol <
B[i]) maxcol =
B[i];
4408 for (i = 0; i < ncol; i++) {
4409 r[i] =
R[i] * 255 / maxcol;
4410 g[i] =
G[i] * 255 / maxcol;
4411 b[i] =
B[i] * 255 / maxcol;
4423 Error(
"WriteGIF",
"cannot write file: %s",
name);
4440 const int MAX_SEGMENT = 20;
4441 int i,
n,
x,
y, xcur,
x1,
x2, y1, y2;
4442 unsigned char *jimg, *jbase, icol;
4444 GdkSegment lines[256][MAX_SEGMENT];
4448 id = (GdkDrawable*)wid;
4453 for (i = 0; i < 256; i++) nlines[i] = 0;
4456 y1 = y0 + ny -
ymax - 1;
4458 y2 = y0 + ny -
ymin - 1;
4459 jbase = image + (
ymin - 1) * nx +
xmin;
4461 for (
y = y2;
y >= y1;
y--) {
4464 for (jimg = jbase, icol = *jimg++,
x =
x1 + 1;
x <=
x2; jimg++,
x++) {
4465 if (icol != *jimg) {
4466 if (icol != itran) {
4468 lines[icol][
n].x1 = xcur;
4469 lines[icol][
n].y1 =
y;
4470 lines[icol][
n].x2 =
x - 1;
4471 lines[icol][
n].y2 =
y;
4472 if (nlines[icol] == MAX_SEGMENT) {
4475 (GdkSegment *) &lines[icol][0], MAX_SEGMENT);
4483 if (icol != itran) {
4485 lines[icol][
n].x1 = xcur;
4486 lines[icol][
n].y1 =
y;
4487 lines[icol][
n].x2 =
x - 1;
4488 lines[icol][
n].y2 =
y;
4489 if (nlines[icol] == MAX_SEGMENT) {
4492 (GdkSegment *)&lines[icol][0], MAX_SEGMENT);
4498 for (i = 0; i < 256; i++) {
4499 if (nlines[i] != 0) {
4502 (GdkSegment *)&lines[icol][0], nlines[i]);
4515 unsigned char *GIFarr, *PIXarr,
R[256],
G[256],
B[256], *j1, *j2, icol;
4516 int i, j, k,
width, height, ncolor, irep, offset;
4520 fd = fopen(
file,
"r+b");
4522 Error(
"ReadGIF",
"unable to open GIF file");
4527 filesize =
Seek_t(ftell(fd));
4530 if (!(GIFarr = (
unsigned char *)
calloc(filesize + 256, 1))) {
4532 Error(
"ReadGIF",
"unable to allocate array for gif");
4536 if (fread(GIFarr, filesize, 1, fd) != 1) {
4538 Error(
"ReadGIF",
"GIF file read failed");
4549 if (!(PIXarr = (
unsigned char *)
calloc((
width * height), 1))) {
4550 Error(
"ReadGIF",
"unable to allocate array for image");
4562 for (i = 0; i < ncolor; i++) {
4572 for (i = 1; i <= height / 2; i++) {
4573 j1 = PIXarr + (i - 1) *
width;
4574 j2 = PIXarr + (height - i) *
width;
4575 for (k = 0; k <
width; k++) {
4583 PutImage(offset, -1, x0, y0,
width, height, 0, 0,
width-1, height-1, PIXarr, pic);
4585 if (pic)
return pic;
4598 gdk_window_show((GdkWindow *)
id);
4599 if ((GDK_DRAWABLE_TYPE((GdkWindow *)
id) != GDK_WINDOW_TEMP) &&
4601 HWND window = (HWND)GDK_DRAWABLE_XID((GdkWindow *)
id);
4602 ::SetForegroundWindow(window);
4613 EnumChildWindows((HWND)GDK_DRAWABLE_XID((GdkWindow *)
id),
4614 EnumChildProc, (LPARAM) NULL);
4624 HWND hwnd = ::GetForegroundWindow();
4625 HWND window = (HWND)GDK_DRAWABLE_XID((GdkWindow *)
id);
4626 gdk_window_show((GdkWindow *)
id);
4627 if (GDK_DRAWABLE_TYPE((GdkWindow *)
id) != GDK_WINDOW_TEMP) {
4628 ::BringWindowToTop(window);
4629 if (GDK_DRAWABLE_TYPE((GdkWindow *)
id) != GDK_WINDOW_CHILD)
4630 ::SetForegroundWindow(window);
4636 HWND fore = ::GetForegroundWindow();
4637 ::GetWindowRect(fore, &r2);
4638 if (!::IntersectRect(&r3, &r2, &r1)) {
4651 gdk_window_hide((GdkWindow *)
id);
4663 gdk_window_hide((GdkWindow *)
id);
4664 gdk_window_destroy((GdkDrawable *)
id,
kTRUE);
4674 gdk_window_destroy((GdkDrawable *)
id,
kFALSE);
4684 HWND window = (HWND)GDK_DRAWABLE_XID((GdkWindow *)
id);
4685 if (GDK_DRAWABLE_TYPE((GdkWindow *)
id) == GDK_WINDOW_TEMP) {
4686 ::SetWindowPos(window, HWND_TOPMOST, 0, 0, 0, 0,
4687 SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
4690 ::BringWindowToTop(window);
4691 if (GDK_DRAWABLE_TYPE((GdkWindow *)
id) != GDK_WINDOW_CHILD)
4692 ::SetForegroundWindow(window);
4703 HWND window = (HWND)GDK_DRAWABLE_XID((GdkWindow *)
id);
4704 ::SetWindowPos(window, HWND_BOTTOM, 0, 0, 0, 0,
4705 SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
4715 gdk_window_move((GdkDrawable *)
id,
x,
y);
4726 gdk_window_move_resize((GdkWindow *)
id,
x,
y, w,
h);
4739 gdk_window_resize((GdkWindow *)
id, w,
h);
4749 gdk_window_lower((GdkWindow *)
id);
4761 gdk_window_reparent((GdkWindow *)
id, (GdkWindow *)pid,
x,
y);
4773 back.red = GetRValue(color);
4774 back.green = GetGValue(color);
4775 back.blue = GetBValue(color);
4777 gdk_window_set_background((GdkWindow *)
id, &back);
4787 gdk_window_set_back_pixmap((GdkWindow *)
id, (GdkPixmap *) pxm, 0);
4799 GdkWindowAttr xattr;
4801 GdkColor background_color;
4806 xattr.window_type = GDK_WINDOW_CHILD;
4808 xattr.window_type = GDK_WINDOW_TOPLEVEL;
4811 xattr.window_type = GDK_WINDOW_DIALOG;
4814 xattr.window_type = GDK_WINDOW_TEMP;
4816 newWin = gdk_window_new((GdkWindow *) parent, &xattr, xmask);
4820 xattr.wclass = GDK_INPUT_OUTPUT;
4821 xattr.event_mask = 0
L;
4822 xattr.event_mask |= GDK_EXPOSURE_MASK | GDK_STRUCTURE_MASK |
4823 GDK_PROPERTY_CHANGE_MASK;
4835 xattr.colormap = gdk_colormap_get_system();
4836 xattr.cursor = NULL;
4837 xattr.override_redirect =
TRUE;
4838 if ((xattr.y > 0) && (xattr.x > 0)) {
4839 xmask = GDK_WA_X | GDK_WA_Y | GDK_WA_COLORMAP |
4840 GDK_WA_WMCLASS | GDK_WA_NOREDIR;
4842 xmask = GDK_WA_COLORMAP | GDK_WA_WMCLASS | GDK_WA_NOREDIR;
4844 if (visual != NULL) {
4845 xattr.visual = (GdkVisual *) visual;
4846 xmask |= GDK_WA_VISUAL;
4848 xattr.visual = gdk_visual_get_system();
4849 xmask |= GDK_WA_VISUAL;
4851 xattr.window_type = GDK_WINDOW_CHILD;
4853 xattr.window_type = GDK_WINDOW_TOPLEVEL;
4856 xattr.window_type = GDK_WINDOW_DIALOG;
4859 xattr.window_type = GDK_WINDOW_TEMP;
4861 newWin = gdk_window_new((GdkWindow *) parent, &xattr, xmask);
4862 gdk_window_set_events(newWin, (GdkEventMask) 0
L);
4865 gdk_window_set_decorations(newWin,
4866 (GdkWMDecoration) GDK_DECOR_BORDER);
4871 gdk_window_set_back_pixmap(newWin, (GdkPixmap *) GDK_NONE, 0);
4873 gdk_window_set_back_pixmap(newWin, (GdkPixmap *) GDK_NONE, 1);
4875 gdk_window_set_back_pixmap(newWin,
4876 (GdkPixmap *) attr->
4877 fBackgroundPixmap, 0);
4885 gdk_window_set_background(newWin, &background_color);
4889 ::SetClassLong((HWND)GDK_DRAWABLE_XID(newWin), GCL_HCURSOR,
4903 lxemask |= GDK_KEY_PRESS_MASK;
4906 lxemask |= GDK_KEY_RELEASE_MASK;
4909 lxemask |= GDK_BUTTON_PRESS_MASK;
4912 lxemask |= GDK_BUTTON_RELEASE_MASK;
4915 lxemask |= GDK_POINTER_MOTION_MASK;
4918 lxemask |= GDK_BUTTON_MOTION_MASK;
4921 lxemask |= GDK_EXPOSURE_MASK;
4924 lxemask |= GDK_STRUCTURE_MASK;
4927 lxemask |= GDK_ENTER_NOTIFY_MASK;
4930 lxemask |= GDK_LEAVE_NOTIFY_MASK;
4933 lxemask |= GDK_FOCUS_CHANGE_MASK;
4935 xemask = (
UInt_t) lxemask;
4938 if ((xemask & GDK_KEY_PRESS_MASK)) {
4941 if ((xemask & GDK_KEY_RELEASE_MASK)) {
4944 if ((xemask & GDK_BUTTON_PRESS_MASK)) {
4947 if ((xemask & GDK_BUTTON_RELEASE_MASK)) {
4950 if ((xemask & GDK_POINTER_MOTION_MASK)) {
4953 if ((xemask & GDK_BUTTON_MOTION_MASK)) {
4956 if ((xemask & GDK_EXPOSURE_MASK)) {
4959 if ((xemask & GDK_STRUCTURE_MASK)) {
4962 if ((xemask & GDK_ENTER_NOTIFY_MASK)) {
4965 if ((xemask & GDK_LEAVE_NOTIFY_MASK)) {
4968 if ((xemask & GDK_FOCUS_CHANGE_MASK)) {
4979 GdkWindowAttr & xattr)
4985 xmask |= GDK_WA_NOREDIR;
4991 xattr.event_mask = xmsk;
4994 xmask |= GDK_WA_COLORMAP;
4995 xattr.colormap = (GdkColormap *) attr->
fColormap;
4998 xmask |= GDK_WA_CURSOR;
5000 xattr.cursor = (GdkCursor *) attr->
fCursor;
5003 xattr.wclass = GDK_INPUT_OUTPUT;
5019 xmask |= GDK_GC_FUNCTION;
5022 xgval.function = GDK_CLEAR;
5025 xgval.function = GDK_AND;
5028 xgval.function = GDK_AND_REVERSE;
5031 xgval.function = GDK_COPY;
5034 xgval.function = GDK_AND_INVERT;
5037 xgval.function = GDK_NOOP;
5040 xgval.function = GDK_XOR;
5043 xgval.function = GDK_OR;
5046 xgval.function = GDK_EQUIV;
5049 xgval.function = GDK_INVERT;
5052 xgval.function = GDK_OR_REVERSE;
5055 xgval.function = GDK_COPY_INVERT;
5058 xgval.function = GDK_OR_INVERT;
5061 xgval.function = GDK_NAND;
5064 xgval.function = GDK_SET;
5069 xmask |= GDK_GC_SUBWINDOW;
5071 xgval.subwindow_mode = GDK_INCLUDE_INFERIORS;
5073 xgval.subwindow_mode = GDK_CLIP_BY_CHILDREN;
5077 xmask |= GDK_GC_FOREGROUND;
5079 xgval.foreground.red = GetRValue(gval.
fForeground);
5080 xgval.foreground.green = GetGValue(gval.
fForeground);
5081 xgval.foreground.blue = GetBValue(gval.
fForeground);
5084 xmask |= GDK_GC_BACKGROUND;
5086 xgval.background.red = GetRValue(gval.
fBackground);
5087 xgval.background.green = GetGValue(gval.
fBackground);
5088 xgval.background.blue = GetBValue(gval.
fBackground);
5091 xmask |= GDK_GC_LINE_WIDTH;
5095 xmask |= GDK_GC_LINE_STYLE;
5096 xgval.line_style = (GdkLineStyle) gval.
fLineStyle;
5099 xmask |= GDK_GC_CAP_STYLE;
5100 xgval.cap_style = (GdkCapStyle) gval.
fCapStyle;
5103 xmask |= GDK_GC_JOIN_STYLE;
5104 xgval.join_style = (GdkJoinStyle) gval.
fJoinStyle;
5107 xmask |= GDK_GC_FILL;
5111 xmask |= GDK_GC_TILE;
5112 xgval.tile = (GdkPixmap *) gval.
fTile;
5115 xmask |= GDK_GC_STIPPLE;
5116 xgval.stipple = (GdkPixmap *) gval.
fStipple;
5119 xmask |= GDK_GC_TS_X_ORIGIN;
5123 xmask |= GDK_GC_TS_Y_ORIGIN;
5127 xmask |= GDK_GC_FONT;
5128 xgval.font = (GdkFont *) gval.
fFont;
5131 xmask |= GDK_GC_EXPOSURES;
5135 xmask |= GDK_GC_CLIP_X_ORIGIN;
5139 xmask |= GDK_GC_CLIP_Y_ORIGIN;
5143 xmask |= GDK_GC_CLIP_MASK;
5144 xgval.clip_mask = (GdkPixmap *) gval.
fClipMask;
5150 if ((xmask & GDK_GC_FUNCTION)) {
5153 switch (xgval.function) {
5160 case GDK_AND_REVERSE:
5166 case GDK_AND_INVERT:
5184 case GDK_OR_REVERSE:
5187 case GDK_COPY_INVERT:
5201 if (xmask & GDK_GC_SUBWINDOW) {
5203 if (xgval.subwindow_mode == GDK_INCLUDE_INFERIORS)
5208 if ((xmask & GDK_GC_FOREGROUND)) {
5212 if ((xmask & GDK_GC_BACKGROUND)) {
5216 if ((xmask & GDK_GC_LINE_WIDTH)) {
5220 if ((xmask & GDK_GC_LINE_STYLE)) {
5224 if ((xmask & GDK_GC_CAP_STYLE)) {
5228 if ((xmask & GDK_GC_JOIN_STYLE)) {
5232 if ((xmask & GDK_GC_FILL)) {
5236 if ((xmask & GDK_GC_TILE)) {
5240 if ((xmask & GDK_GC_STIPPLE)) {
5244 if ((xmask & GDK_GC_TS_X_ORIGIN)) {
5248 if ((xmask & GDK_GC_TS_Y_ORIGIN)) {
5252 if ((xmask & GDK_GC_FONT)) {
5256 if ((xmask & GDK_GC_EXPOSURES)) {
5260 if ((xmask & GDK_GC_CLIP_X_ORIGIN)) {
5264 if ((xmask & GDK_GC_CLIP_Y_ORIGIN)) {
5268 if ((xmask & GDK_GC_CLIP_MASK)) {
5283 RECT rcClient, rcWind;
5284 ::GetClientRect((HWND)GDK_DRAWABLE_XID((GdkWindow *)
id), &rcClient);
5285 ::GetWindowRect((HWND)GDK_DRAWABLE_XID((GdkWindow *)
id), &rcWind);
5287 gdk_window_get_geometry((GdkWindow *)
id, &attr.
fX, &attr.
fY,
5289 attr.
fX = ((rcWind.right - rcWind.left) - rcClient.right) / 2;
5290 attr.
fY = ((rcWind.bottom - rcWind.top) - rcClient.bottom) - attr.
fX;
5295 attr.
fVisual = gdk_window_get_visual((GdkWindow *)
id);
5302 if (!gdk_window_is_visible((GdkWindow *)
id)) {
5304 }
else if (!gdk_window_is_viewable((GdkWindow *)
id)) {
5310 UInt_t tmp_mask = (
UInt_t)gdk_window_get_events((GdkWindow *)
id);
5330 return gdk_visual_get_best_depth();
5340 GdkAtom
a = gdk_atom_intern((
const gchar *) atom_name, only_if_exist);
5342 if (
a == None)
return kNone;
5352 return (
Window_t) GDK_ROOT_PARENT();
5362 return (
Window_t)gdk_window_get_parent((GdkWindow *)
id);
5372 char family[100], weight[32], slant[32], fontname[256];
5373 Int_t n1, pixel, numfields;
5375 numfields = sscanf(font_name,
"%s -%d%n", family, &pixel, &n1);
5376 if (numfields == 2) {
5377 sprintf(weight,
"medium");
5378 if (strstr(font_name,
"bold"))
5379 sprintf(weight,
"bold");
5381 if (strstr(font_name,
"italic"))
5383 sprintf(fontname,
"-*-%s-%s-%s-*-*-%d-*-*-*-*-*-iso8859-1",
5384 family, weight, slant, pixel);
5387 sprintf(fontname,
"%s", font_name);
5397 return (
FontH_t)gdk_font_ref((GdkFont *) fs);
5407 gdk_font_unref((GdkFont *) fs);
5423 xgval.subwindow_mode = GDK_CLIP_BY_CHILDREN;
5425 GdkGC *gc = gdk_gc_new_with_values((GdkDrawable *)
id,
5426 &xgval, (GdkGCValuesMask)xmask);
5444 gdk_gc_set_foreground((GdkGC *) gc, &xgval.foreground);
5447 gdk_gc_set_background((GdkGC *) gc, &xgval.background);
5450 gdk_gc_set_font((GdkGC *) gc, xgval.font);
5453 gdk_gc_set_function((GdkGC *) gc, xgval.function);
5456 gdk_gc_set_fill((GdkGC *) gc, xgval.fill);
5459 gdk_gc_set_tile((GdkGC *) gc, xgval.tile);
5462 gdk_gc_set_stipple((GdkGC *) gc, xgval.stipple);
5465 gdk_gc_set_ts_origin((GdkGC *) gc, xgval.ts_x_origin,
5469 gdk_gc_set_clip_origin((GdkGC *) gc, xgval.clip_x_origin,
5470 xgval.clip_y_origin);
5473 gdk_gc_set_clip_mask((GdkGC *) gc, xgval.clip_mask);
5476 gdk_gc_set_exposures((GdkGC *) gc, xgval.graphics_exposures);
5479 gdk_gc_set_values((GdkGC *) gc, &xgval, GDK_GC_LINE_WIDTH);
5482 gdk_gc_set_values((GdkGC *) gc, &xgval, GDK_GC_LINE_STYLE);
5485 gdk_gc_set_values((GdkGC *) gc, &xgval, GDK_GC_CAP_STYLE);
5488 gdk_gc_set_values((GdkGC *) gc, &xgval, GDK_GC_JOIN_STYLE);
5491 gdk_gc_set_subwindow((GdkGC *) gc, xgval.subwindow_mode);
5513 gdk_gc_copy((GdkGC *)
dest, (GdkGC *)
org);
5521 gdk_gc_unref((GdkGC *) gc);
5538 GdkWindow *wid = (GdkWindow *)
id;
5539 if (!
id) wid = GDK_ROOT_PARENT();
5541 return (
Pixmap_t) gdk_pixmap_new(wid, w,
h, gdk_visual_get_best_depth());
5553 GdkColor fore, back;
5554 fore.pixel = forecolor;
5555 fore.red = GetRValue(forecolor);
5556 fore.green = GetGValue(forecolor);
5557 fore.blue = GetBValue(forecolor);
5559 back.pixel = backcolor;
5560 back.red = GetRValue(backcolor);
5561 back.green = GetGValue(backcolor);
5562 back.blue = GetBValue(backcolor);
5564 GdkWindow *wid = (GdkWindow *)
id;
5565 if (!
id) wid = GDK_ROOT_PARENT();
5567 return (
Pixmap_t) gdk_pixmap_create_from_data(wid, (
char *) bitmap,
width,
5568 height, depth, &fore, &back);
5577 GdkWindow *wid = (GdkWindow *)
id;
5578 if (!
id) wid = GDK_ROOT_PARENT();
5581 (
char *)bitmap,
width, height);
5590 gdk_pixmap_unref((GdkPixmap *) pmap);
5603 GdkBitmap *gdk_pixmap_mask;
5604 if (strstr(filename,
".xpm") || strstr(filename,
".XPM")) {
5605 GdkWindow *wid = (GdkWindow *)
id;
5606 if (!
id) wid = GDK_ROOT_PARENT();
5608 pict = (
Pixmap_t) gdk_pixmap_create_from_xpm(wid, &gdk_pixmap_mask, 0,
5610 pict_mask = (
Pixmap_t) gdk_pixmap_mask;
5611 }
else if (strstr(filename,
".gif") || strstr(filename,
".GIF")) {
5612 pict =
ReadGIF(0, 0, filename,
id);
5616 gdk_drawable_get_size((GdkPixmap *) pict, (
int *) &attr.
fWidth,
5637 GdkBitmap *gdk_pixmap_mask;
5638 GdkWindow *wid = (GdkWindow *)
id;
5639 if (!
id) wid = GDK_ROOT_PARENT();
5641 pict = (
Pixmap_t) gdk_pixmap_create_from_xpm_d(wid, &gdk_pixmap_mask, 0,
5643 pict_mask = (
Pixmap_t) gdk_pixmap_mask;
5661 GdkPixmap *pxm = gdk_pixmap_create_from_xpm(NULL, NULL, NULL, filename);
5664 if (pxm==NULL)
return kFALSE;
5666 HBITMAP hbm = (HBITMAP)GDK_DRAWABLE_XID(pxm);
5669 ret = ::GetObject(hbm,
sizeof(HBITMAP), (LPVOID)&bitmap);
5670 ret_data = (
char ***)&bitmap.bmBits;
5671 gdk_pixmap_unref(pxm);
5693 for (i = 0; i <
n; i++) {
5694 dashes[i] = (gint8) dash_list[i];
5696 for (i =
n; i < 32; i++) {
5697 dashes[i] = (gint8) 0;
5700 gdk_gc_set_dashes((GdkGC *) gc, offset, dashes,
n);
5708 xcolor.pixel = color->
fPixel;
5709 xcolor.red = color->
fRed;
5710 xcolor.green = color->
fGreen;
5711 xcolor.blue = color->
fBlue;
5726 if (gdk_color_parse((
char *)cname, &xc)) {
5727 color.
fPixel = xc.pixel = RGB(xc.red, xc.green, xc.blue);
5728 color.
fRed = xc.red;
5730 color.
fBlue = xc.blue;
5746 xc.red = color.
fRed;
5748 xc.blue = color.
fBlue;
5750 status = gdk_colormap_alloc_color((GdkColormap *) cmap, &xc,
FALSE,
TRUE);
5766 GdkColorContext *cc = gdk_color_context_new(gdk_visual_get_system(),
fColormap);
5767 gdk_color_context_query_color(cc, &xc);
5768 gdk_color_context_free(cc);
5771 color.
fRed = xc.red;
5773 color.
fBlue = xc.blue;
5799 tev.
fX = tev.
fY = 0;
5810 TGWin32MainThread::LockMSG();
5812 Bool_t r = gdk_check_typed_window_event((GdkWindow *)
id, xev.type, &xev);
5815 TGWin32MainThread::UnlockMSG();
5825 if (!ev || !
id)
return;
5827 TGWin32MainThread::LockMSG();
5830 gdk_event_put(&xev);
5831 TGWin32MainThread::UnlockMSG();
5841 TGWin32MainThread::LockMSG();
5842 ret = (
Int_t)gdk_event_queue_find_first();
5843 TGWin32MainThread::UnlockMSG();
5855 TGWin32MainThread::LockMSG();
5856 GdkEvent *xev = gdk_event_unqueue();
5861 TGWin32MainThread::UnlockMSG();
5865 gdk_event_free (xev);
5866 TGWin32MainThread::UnlockMSG();
5877 xstate = GDK_MODIFIER_MASK;
5888 switch (event.type) {
5889 case GDK_MOTION_NOTIFY:
5890 event.motion.time = time;
5891 case GDK_BUTTON_PRESS:
5892 case GDK_2BUTTON_PRESS:
5893 case GDK_3BUTTON_PRESS:
5894 case GDK_BUTTON_RELEASE:
5896 event.button.time = time;
5898 case GDK_KEY_RELEASE:
5899 event.key.time = time;
5900 case GDK_ENTER_NOTIFY:
5901 case GDK_LEAVE_NOTIFY:
5902 event.crossing.time = time;
5903 case GDK_PROPERTY_NOTIFY:
5904 event.property.time = time;
5905 case GDK_SELECTION_CLEAR:
5906 case GDK_SELECTION_REQUEST:
5907 case GDK_SELECTION_NOTIFY:
5908 event.selection.time = time;
5909 case GDK_PROXIMITY_IN:
5910 case GDK_PROXIMITY_OUT:
5911 event.proximity.time = time;
5912 case GDK_DRAG_ENTER:
5913 case GDK_DRAG_LEAVE:
5914 case GDK_DRAG_MOTION:
5915 case GDK_DRAG_STATUS:
5916 case GDK_DROP_START:
5917 case GDK_DROP_FINISHED:
5918 event.dnd.time = time;
5932 xev.type = GDK_NOTHING;
5934 xev.type = GDK_KEY_PRESS;
5936 xev.type = GDK_KEY_RELEASE;
5938 xev.type = GDK_BUTTON_PRESS;
5940 xev.type = GDK_BUTTON_RELEASE;
5942 xev.type = GDK_MOTION_NOTIFY;
5944 xev.type = GDK_ENTER_NOTIFY;
5946 xev.type = GDK_LEAVE_NOTIFY;
5948 xev.type = GDK_EXPOSE;
5950 xev.type = GDK_CONFIGURE;
5954 xev.type = GDK_UNMAP;
5956 xev.type = GDK_DESTROY;
5958 xev.type = GDK_CLIENT_EVENT;
5960 xev.type = GDK_SELECTION_CLEAR;
5962 xev.type = GDK_SELECTION_REQUEST;
5964 xev.type = GDK_SELECTION_NOTIFY;
5966 xev.any.type = xev.type;
5969 xev.any.window = (GdkWindow *) ev.
fWindow;
5972 xev.type = GDK_FOCUS_CHANGE;
5973 xev.focus_change.type = xev.type;
5974 xev.focus_change.window = (GdkWindow *) ev.
fWindow;
5975 xev.focus_change.in =
TRUE;
5978 xev.type = GDK_FOCUS_CHANGE;
5979 xev.focus_change.type = xev.type;
5980 xev.focus_change.window = (GdkWindow *) ev.
fWindow;
5981 xev.focus_change.in =
FALSE;
5984 xev.key.window = (GdkWindow *) ev.
fWindow;
5985 xev.key.type = xev.type;
5987 xev.key.keyval = ev.
fCode;
5990 xev.button.window = (GdkWindow *) ev.
fWindow;
5991 xev.button.type = xev.type;
5992 xev.button.x = ev.
fX;
5993 xev.button.y = ev.
fY;
5994 xev.button.x_root = ev.
fXRoot;
5995 xev.button.y_root = ev.
fYRoot;
5997 xev.button.button = ev.
fCode;
6000 xev.selection.window = (GdkWindow *) ev.
fUser[0];
6001 xev.selection.requestor = (guint32) ev.
fUser[0];
6002 xev.selection.selection = (GdkAtom) ev.
fUser[1];
6003 xev.selection.target = (GdkAtom) ev.
fUser[2];
6004 xev.selection.property = (GdkAtom) ev.
fUser[3];
6005 xev.selection.type = xev.type;
6009 xev.type = GDK_DELETE;
6010 xev.any.type = xev.type;
6011 xev.any.window = (GdkWindow *) ev.
fWindow;
6013 xev.client.window = (GdkWindow *) ev.
fWindow;
6014 xev.client.type = xev.type;
6015 xev.client.message_type = (GdkAtom) ev.
fHandle;
6016 xev.client.data_format = ev.
fFormat;
6017 xev.client.data.l[0] = ev.
fUser[0];
6018 if (
sizeof(ev.
fUser[0]) > 4) {
6020 xev.client.data.l[3]);
6022 xev.client.data.l[4]);
6024 xev.client.data.l[1] = ev.
fUser[1];
6025 xev.client.data.l[2] = ev.
fUser[2];
6026 xev.client.data.l[3] = ev.
fUser[3];
6027 xev.client.data.l[4] = ev.
fUser[4];
6032 xev.motion.window = (GdkWindow *) ev.
fWindow;
6033 xev.motion.type = xev.type;
6034 xev.motion.x = ev.
fX;
6035 xev.motion.y = ev.
fY;
6036 xev.motion.x_root = ev.
fXRoot;
6037 xev.motion.y_root = ev.
fYRoot;
6040 xev.crossing.window = (GdkWindow *) ev.
fWindow;
6041 xev.crossing.type = xev.type;
6042 xev.crossing.x = ev.
fX;
6043 xev.crossing.y = ev.
fY;
6044 xev.crossing.x_root = ev.
fXRoot;
6045 xev.crossing.y_root = ev.
fYRoot;
6046 xev.crossing.mode = (GdkCrossingMode) ev.
fCode;
6050 xev.expose.window = (GdkWindow *) ev.
fWindow;
6051 xev.expose.type = xev.type;
6052 xev.expose.area.x = ev.
fX;
6053 xev.expose.area.y = ev.
fY;
6054 xev.expose.area.width = ev.
fWidth;
6055 xev.expose.area.height = ev.
fHeight;
6056 xev.expose.count = ev.
fCount;
6059 xev.configure.window = (GdkWindow *) ev.
fWindow;
6060 xev.configure.type = xev.type;
6061 xev.configure.x = ev.
fX;
6062 xev.configure.y = ev.
fY;
6063 xev.configure.width = ev.
fWidth;
6064 xev.configure.height = ev.
fHeight;
6067 xev.selection.window = (GdkWindow *) ev.
fWindow;
6068 xev.selection.type = xev.type;
6069 xev.selection.selection = ev.
fUser[0];
6072 xev.selection.window = (GdkWindow *) ev.
fUser[0];
6073 xev.selection.type = xev.type;
6074 xev.selection.selection = ev.
fUser[1];
6075 xev.selection.target = ev.
fUser[2];
6076 xev.selection.property = ev.
fUser[3];
6079 xev.any.window = (GdkWindow *) ev.
fWindow;
6081 if (xev.type != GDK_CLIENT_EVENT)
6086 if (xev.type == GDK_KEY_PRESS)
6088 if (xev.type == GDK_KEY_RELEASE)
6090 if (xev.type == GDK_BUTTON_PRESS)
6092 if (xev.type == GDK_BUTTON_RELEASE)
6094 if (xev.type == GDK_MOTION_NOTIFY)
6096 if (xev.type == GDK_ENTER_NOTIFY)
6098 if (xev.type == GDK_LEAVE_NOTIFY)
6100 if (xev.type == GDK_EXPOSE)
6102 if (xev.type == GDK_CONFIGURE)
6104 if (xev.type == GDK_MAP)
6106 if (xev.type == GDK_UNMAP)
6108 if (xev.type == GDK_DESTROY)
6110 if (xev.type == GDK_SELECTION_CLEAR)
6112 if (xev.type == GDK_SELECTION_REQUEST)
6114 if (xev.type == GDK_SELECTION_NOTIFY)
6118 ev.
fTime = gdk_event_get_time((GdkEvent *)&xev);
6121 if ((xev.type == GDK_MAP) || (xev.type == GDK_UNMAP)) {
6124 if (xev.type == GDK_DELETE) {
6130 if (
sizeof(ev.
fUser[0]) > 4) {
6131 AsmLong(xev.client.data.l[1], xev.client.data.l[3],
6133 AsmLong(xev.client.data.l[2], xev.client.data.l[4],
6142 if (xev.type == GDK_DESTROY) {
6147 if (xev.type == GDK_FOCUS_CHANGE) {
6151 if (xev.focus_change.in ==
TRUE) {
6160 ev.
fCode = xev.key.keyval;
6161 ev.
fUser[1] = xev.key.length;
6162 if (xev.key.length > 0) ev.
fUser[2] = xev.key.string[0];
6163 if (xev.key.length > 1) ev.
fUser[3] = xev.key.string[1];
6164 if (xev.key.length > 2) ev.
fUser[4] = xev.key.string[2];
6165 HWND tmpwin = (HWND) GetWindow((HWND) GDK_DRAWABLE_XID((GdkWindow *)xev.key.window), GW_CHILD);
6167 ev.
fUser[0] = (
ULong_t) gdk_xid_table_lookup((HANDLE)tmpwin);
6174 ev.
fX = xev.button.x;
6175 ev.
fY = xev.button.y;
6176 ev.
fXRoot = xev.button.x_root;
6177 ev.
fYRoot = xev.button.y_root;
6179 ev.
fCode = xev.button.button;
6181 tpoint.x = xev.button.x;
6182 tpoint.y = xev.button.y;
6183 HWND tmpwin = ChildWindowFromPoint((HWND) GDK_DRAWABLE_XID((GdkWindow *)xev.button.window), tpoint);
6185 ev.
fUser[0] = (
ULong_t) gdk_xid_table_lookup((HANDLE)tmpwin);
6192 ev.
fX = xev.motion.x;
6193 ev.
fY = xev.motion.y;
6194 ev.
fXRoot = xev.motion.x_root;
6195 ev.
fYRoot = xev.motion.y_root;
6199 tpoint.x = xev.button.x;
6200 tpoint.y = xev.button.y;
6201 HWND tmpwin = ChildWindowFromPoint((HWND) GDK_DRAWABLE_XID((GdkWindow *)xev.motion.window), tpoint);
6203 ev.
fUser[0] = (
ULong_t)gdk_xid_table_lookup((HANDLE)tmpwin);
6210 ev.
fX = xev.crossing.x;
6211 ev.
fY = xev.crossing.y;
6212 ev.
fXRoot = xev.crossing.x_root;
6213 ev.
fYRoot = xev.crossing.y_root;
6214 ev.
fCode = xev.crossing.mode;
6219 ev.
fX = xev.expose.area.x;
6220 ev.
fY = xev.expose.area.y;
6221 ev.
fWidth = xev.expose.area.width;
6222 ev.
fHeight = xev.expose.area.height;
6223 ev.
fCount = xev.expose.count;
6227 ev.
fX = xev.configure.x;
6228 ev.
fY = xev.configure.y;
6229 ev.
fWidth = xev.configure.width;
6230 ev.
fHeight = xev.configure.height;
6232 if (xev.type == GDK_CLIENT_EVENT) {
6235 ev.
fHandle = xev.client.message_type;
6236 ev.
fFormat = xev.client.data_format;
6237 ev.
fUser[0] = xev.client.data.l[0];
6238 if (
sizeof(ev.
fUser[0]) > 4) {
6239 AsmLong(xev.client.data.l[1], xev.client.data.l[3],
6241 AsmLong(xev.client.data.l[2], xev.client.data.l[4],
6244 ev.
fUser[1] = xev.client.data.l[1];
6245 ev.
fUser[2] = xev.client.data.l[2];
6246 ev.
fUser[3] = xev.client.data.l[3];
6247 ev.
fUser[4] = xev.client.data.l[4];
6252 ev.
fUser[0] = xev.selection.selection;
6257 ev.
fUser[1] = xev.selection.selection;
6258 ev.
fUser[2] = xev.selection.target;
6259 ev.
fUser[3] = xev.selection.property;
6264 ev.
fUser[1] = xev.selection.selection;
6265 ev.
fUser[2] = xev.selection.target;
6266 ev.
fUser[3] = xev.selection.property;
6268 if (xev.type == GDK_SCROLL) {
6270 if (xev.scroll.direction == GDK_SCROLL_UP) {
6272 }
else if (xev.scroll.direction == GDK_SCROLL_DOWN) {
6276 ev.
fX = xev.scroll.x;
6277 ev.
fY = xev.scroll.y;
6278 ev.
fXRoot = xev.scroll.x_root;
6279 ev.
fYRoot = xev.scroll.y_root;
6281 tpoint.x = xev.scroll.x;
6282 tpoint.y = xev.scroll.y;
6283 HWND tmpwin = ChildWindowFromPoint((HWND) GDK_DRAWABLE_XID((GdkWindow *)xev.scroll.window), tpoint);
6285 ev.
fUser[0] = (
ULong_t)gdk_xid_table_lookup((HANDLE)tmpwin);
6310 if (!src || !
dest)
return;
6312 gdk_window_copy_area((GdkDrawable *)
dest, (GdkGC *) gc, dest_x, dest_y,
6313 (GdkDrawable *) src, src_x, src_y,
width, height);
6330 gdk_window_set_events((GdkWindow *)
id, (GdkEventMask) xevmask);
6337 gdk_window_set_background((GdkWindow *)
id, &color);
6342 gdk_window_set_back_pixmap((GdkWindow *)
id,
6346 gdk_window_set_cursor((GdkWindow *)
id, (GdkCursor *) attr->
fCursor);
6349 gdk_window_set_colormap((GdkWindow *)
id,(GdkColormap *) attr->
fColormap);
6353 gdk_window_set_decorations((GdkWindow *)
id,
6354 (GdkWMDecoration) GDK_DECOR_BORDER);
6369 gdk_property_change((GdkWindow *)
id, (GdkAtom) property,
6370 (GdkAtom)
type, 8, GDK_PROP_MODE_REPLACE, data,len);
6381 gdk_draw_line((GdkDrawable *)
id, (GdkGC *) gc,
x1, y1,
x2, y2);
6391 gdk_window_clear_area((GdkWindow *)
id,
x,
y, w,
h);
6402 prop = (
Atom_t) gdk_atom_intern(
"WM_DELETE_WINDOW",
FALSE);
6404 W32ChangeProperty((HWND) GDK_DRAWABLE_XID((GdkWindow *)
id),
6405 prop,
XA_ATOM, 32, GDK_PROP_MODE_REPLACE,
6415 gdk_key_repeat_restore();
6417 gdk_key_repeat_disable();
6434 gdk_key_grab(keycode, (GdkEventMask)xmod, (GdkWindow *)
id);
6436 gdk_key_ungrab(keycode, (GdkEventMask)xmod, (GdkWindow *)
id);
6459 gdk_button_grab(button, xmod, ( GdkWindow *)
id, 1, (GdkEventMask)xevmask,
6460 (GdkWindow*)confine, (GdkCursor*)cursor);
6462 gdk_button_ungrab(button, xmod, ( GdkWindow *)
id);
6478 if(!::IsWindowVisible((HWND)GDK_DRAWABLE_XID(
id)))
return;
6479 gdk_pointer_grab((GdkWindow *)
id, owner_events, (GdkEventMask) xevmask,
6480 (GdkWindow *) confine, (GdkCursor *) cursor,
6483 gdk_pointer_ungrab(GDK_CURRENT_TIME);
6495 gdk_window_set_title((GdkWindow *)
id,
name);
6505 gdk_window_set_icon_name((GdkWindow *)
id,
name);
6515 gdk_window_set_icon((GdkWindow *)
id, NULL, (GdkPixmap *)pic, (GdkPixmap *)pic);
6518#define safestrlen(s) ((s) ? strlen(s) : 0)
6532 prop = gdk_atom_intern(
"WM_CLASS",
kFALSE);
6537 if ((class_string =
s =
6538 (
char *)
malloc((
unsigned) (len_nm + len_cl + 2)))) {
6540 strcpy(
s, resourceName);
6545 strcpy(
s, className);
6550 W32ChangeProperty((HWND) GDK_DRAWABLE_XID((GdkWindow *)
id),
6552 GDK_PROP_MODE_REPLACE,
6553 (
unsigned char *) class_string,
6554 len_nm + len_cl + 2);
6567 gdk_window_set_decorations((GdkDrawable *)
id, (GdkWMDecoration) value);
6568 gdk_window_set_functions((GdkDrawable *)
id, (GdkWMFunction) funcs);
6578 gdk_window_move((GdkDrawable *)
id,
x,
y);
6588 gdk_window_resize((GdkWindow *)
id, w,
h);
6602 GdkWindowHints flags;
6604 flags = (GdkWindowHints) (GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE |
6605 GDK_HINT_RESIZE_INC);
6606 hints.min_width = (
Int_t) wmin;
6607 hints.max_width = (
Int_t) wmax;
6608 hints.min_height = (
Int_t) hmin;
6609 hints.max_height = (
Int_t) hmax;
6610 hints.width_inc = (
Int_t) winc;
6611 hints.height_inc = (
Int_t) hinc;
6613 gdk_window_set_geometry_hints((GdkWindow *)
id, (GdkGeometry *) &hints,
6614 (GdkWindowHints) flags);
6626 Int_t xstate = NormalState;
6629 xstate = NormalState;
6631 xstate = IconicState;
6633 hints.flags = StateHint;
6634 hints.initial_state = xstate;
6636 XSetWMHints((GdkWindow *)
id, &hints);
6647 gdk_window_set_transient_for((GdkWindow *)
id, (GdkWindow *) main_id);
6654 const char *
s,
Int_t len)
6659 gdk_gc_get_values((GdkGC *) gc, &values);
6661 (GdkGC *) gc,
x,
y, (
const gchar *)
s, len);
6669 return gdk_text_width((GdkFont *)font,
s, len);
6676 Int_t & max_descent)
6678 GdkFont *
f = (GdkFont *) font;
6679 max_ascent =
f->ascent;
6680 max_descent =
f->descent;
6693 gdk_gc_get_values((GdkGC *) gc, &xgval);
6711 gdk_font_unref((GdkFont *) fs);
6721 gdk_window_clear((GdkDrawable *)
id);
6781 gdk_window_set_events((GdkWindow *)
id, (GdkEventMask)xevmask);
6789 HWND hwnd = ::GetFocus();
6790 return (
Window_t) gdk_xid_table_lookup(hwnd);
6800 HWND hwnd = (HWND)GDK_DRAWABLE_XID((GdkWindow *)
id);
6810 return (
Window_t)gdk_selection_owner_get(gClipboardAtom);
6821 gdk_selection_owner_set((GdkWindow *)
id, gClipboardAtom, GDK_CURRENT_TIME, 0);
6839 gdk_selection_convert((GdkWindow *)
id, clipboard,
6840 gdk_atom_intern(
"GDK_TARGET_STRING", 0), when);
6852 _lookup_string(event, buf, buflen);
6855 keysym = (
Int_t) ks;
6865 xkeysym = GDK_VoidSymbol;
6871 for (
int i = 0;
gKeyMap[i].fKeySym; i++) {
6881 if (xkeysym < 127) {
6883 }
else if (xkeysym >= GDK_F1 && xkeysym <= GDK_F35) {
6884 keysym =
kKey_F1 + (xkeysym - GDK_F1);
6885 }
else if (xkeysym >= GDK_KP_0 && xkeysym <= GDK_KP_9) {
6886 keysym =
kKey_0 + (xkeysym - GDK_KP_0);
6888 for (
int i = 0;
gKeyMap[i].fXKeySym; i++) {
6889 if (xkeysym ==
gKeyMap[i].fXKeySym) {
6908 int nread, actual_format;
6910 nread = gdk_selection_property_get((GdkWindow *)
id,
6911 (
unsigned char **) &data,
6912 (GdkAtom *) & atom, &actual_format);
6914 if ((nread == 0) || (data == NULL)) {
6919 text.Insert(0, (
const char *) data);
6924 gdk_property_delete((GdkWindow *)
id,
6925 gdk_atom_intern(
"GDK_SELECTION",
FALSE));
6939 if (!src || !
dest)
return;
6941 HWND sw, dw, ch = NULL;
6943 sw = (HWND)GDK_DRAWABLE_XID((GdkWindow *)src);
6944 dw = (HWND)GDK_DRAWABLE_XID((GdkWindow *)
dest);
6947 ::MapWindowPoints(sw,
6951 ch = ::ChildWindowFromPointEx(dw, point, CWP_SKIPDISABLED | CWP_SKIPINVISIBLE);
6952 child = (
Window_t)gdk_xid_table_lookup(ch);
6971 if (GDK_DRAWABLE_TYPE(
id) == GDK_DRAWABLE_PIXMAP) {
6973 gdk_drawable_get_size((GdkDrawable *)
id, (
int*)&w, (
int*)&
h);
6976 gdk_window_get_geometry((GdkDrawable *)
id, &
x, &
y, (
int*)&w,
7018 window = (HWND)GDK_DRAWABLE_XID((GdkWindow *)
id);
7019 rootw = (
Window_t)GDK_ROOT_PARENT();
7020 ::GetCursorPos(&currPt);
7021 chw = ::WindowFromPoint(currPt);
7022 childw = (
Window_t)gdk_xid_table_lookup(chw);
7026 ::ScreenToClient(window, &currPt);
7030 ::GetKeyboardState (kbd);
7032 if (kbd[VK_SHIFT] & 0x80) {
7033 umask |= GDK_SHIFT_MASK;
7035 if (kbd[VK_CAPITAL] & 0x80) {
7036 umask |= GDK_LOCK_MASK;
7038 if (kbd[VK_CONTROL] & 0x80) {
7039 umask |= GDK_CONTROL_MASK;
7041 if (kbd[VK_MENU] & 0x80) {
7042 umask |= GDK_MOD1_MASK;
7044 if (kbd[VK_LBUTTON] & 0x80) {
7045 umask |= GDK_BUTTON1_MASK;
7047 if (kbd[VK_MBUTTON] & 0x80) {
7048 umask |= GDK_BUTTON2_MASK;
7050 if (kbd[VK_RBUTTON] & 0x80) {
7051 umask |= GDK_BUTTON3_MASK;
7064 fore.pixel = foreground;
7065 fore.red = GetRValue(foreground);
7066 fore.green = GetGValue(foreground);
7067 fore.blue = GetBValue(foreground);
7068 gdk_gc_set_foreground((GdkGC *) gc, &fore);
7080 GdkRectangle *grects =
new GdkRectangle[
n];
7082 for (i = 0; i <
n; i++) {
7083 grects[i].x =
x+recs[i].
fX;
7084 grects[i].y =
y+recs[i].
fY;
7085 grects[i].width = recs[i].
fWidth;
7086 grects[i].height = recs[i].
fHeight;
7089 for (i = 0; i <
n; i++) {
7090 gdk_gc_set_clip_rectangle((GdkGC *)gc, (GdkRectangle*)recs);
7110 return (
Region_t) gdk_region_new();
7118 gdk_region_destroy((GdkRegion *) reg);
7131 dest = (
Region_t) gdk_region_union_with_rect((GdkRegion *) src, &
r);
7141 winding ? GDK_WINDING_RULE : GDK_EVEN_ODD_RULE);
7150 result = (
Region_t) gdk_regions_union((GdkRegion *) rega, (GdkRegion *) regb);
7160 result = (
Region_t) gdk_regions_intersect((GdkRegion *) rega,(GdkRegion *) regb);
7168 result = (
Region_t)gdk_regions_subtract((GdkRegion *) rega,(GdkRegion *) regb);
7177 result = (
Region_t) gdk_regions_xor((GdkRegion *) rega, (GdkRegion *) regb);
7185 return (
Bool_t) gdk_region_empty((GdkRegion *) reg);
7193 return (
Bool_t) gdk_region_point_in((GdkRegion *) reg,
x,
y);
7201 return (
Bool_t) gdk_region_equal((GdkRegion *) rega, (GdkRegion *) regb);
7210 gdk_region_get_clipbox((GdkRegion *) reg, &
r);
7222 char foundry[32], family[100], weight[32], slant[32], font_name[256];
7224 Int_t n1, fontcount = 0;
7226 sscanf(fontname,
"-%30[^-]-%100[^-]-%30[^-]-%30[^-]-%n",
7227 foundry, family, weight, slant, &n1);
7229 if(!stricmp(weight,
"medium")) {
7230 sprintf(weight,
"normal");
7233 sprintf(font_name,
"-%s-%s-%s-%s-*", foundry, family, weight, slant);
7234 fontlist = gdk_font_list_new(font_name, &fontcount);
7237 if (fontcount > 0)
return fontlist;
7246 gdk_font_list_free(fontlist);
7254 return (
Drawable_t) gdk_image_new(GDK_IMAGE_SHARED, gdk_visual_get_best(),
7263 width = ((GdkImage*)
id)->width;
7264 height = ((GdkImage*)
id)->height;
7274 GdkImage *image = (GdkImage *)
id;
7275 if (image->depth == 1) {
7277 ((
UChar_t *) image->mem)[
y * image->bpl + (
x >> 3)] |= (1 << (7 - (
x & 0x7)));
7279 ((
UChar_t *) image->mem)[
y * image->bpl + (
x >> 3)] &= ~(1 << (7 - (
x & 0x7)));
7282 UChar_t *pixelp = (
UChar_t *) image->mem +
y * image->bpl +
x * image->bpp;
7284 switch (image->bpp) {
7288 pixelp[2] = ((pixel >> 16) & 0xFF);
7290 pixelp[1] = ((pixel >> 8) & 0xFF);
7292 pixelp[0] = (pixel & 0xFF);
7305 gdk_draw_image((GdkDrawable *)
id, (GdkGC *)gc, (GdkImage *)img,
7306 x,
y, dx, dy, w,
h);
7315 gdk_image_unref((GdkImage *)img);
7333 HGDIOBJ oldbitmap1, oldbitmap2;
7337 unsigned char *ret = 0;
7339 if (GDK_DRAWABLE_TYPE(wid) == GDK_DRAWABLE_PIXMAP) {
7340 hdc = ::CreateCompatibleDC(NULL);
7341 oldbitmap1 = ::SelectObject(hdc, GDK_DRAWABLE_XID(wid));
7342 ::GetObject(GDK_DRAWABLE_XID(wid),
sizeof(BITMAP), &bm);
7344 hdc = ::GetDC((HWND)GDK_DRAWABLE_XID(wid));
7346 memdc = ::CreateCompatibleDC(hdc);
7348 bmi.bmiHeader.biSize =
sizeof(BITMAPINFOHEADER);
7349 bmi.bmiHeader.biWidth =
width;
7350 bmi.bmiHeader.biHeight = -1 * (
int)(height);
7351 bmi.bmiHeader.biPlanes = 1;
7352 bmi.bmiHeader.biBitCount = 32;
7353 bmi.bmiHeader.biCompression = BI_RGB;
7354 bmi.bmiHeader.biSizeImage = 0;
7355 bmi.bmiHeader.biXPelsPerMeter = bmi.bmiHeader.biYPelsPerMeter = 0;
7356 bmi.bmiHeader.biClrUsed = 0;
7357 bmi.bmiHeader.biClrImportant = 0;
7359 ximage = ::CreateDIBSection(hdc, (BITMAPINFO *) &bmi, DIB_RGB_COLORS, &bmbits, NULL, 0);
7361 if (ximage && bmbits) {
7362 oldbitmap2 = ::SelectObject(memdc, ximage);
7363 ::BitBlt(memdc,
x,
y,
width, height, hdc, 0, 0, SRCCOPY);
7364 ::SelectObject(memdc, oldbitmap2);
7367 if (GDK_DRAWABLE_TYPE(wid) == GDK_DRAWABLE_PIXMAP) {
7368 ::SelectObject(hdc, oldbitmap1);
7371 ::ReleaseDC((HWND)GDK_DRAWABLE_XID(wid), hdc);
7373 if (ximage && bmbits) {
7375 ret =
new unsigned char[sz];
7376 memcpy(ret, bmbits, sz);
7377 ::DeleteObject(ximage);
7391 BITMAPINFO bmp_info;
7392 bmp_info.bmiHeader.biSize =
sizeof(BITMAPINFOHEADER);
7393 bmp_info.bmiHeader.biWidth =
width;
7394 bmp_info.bmiHeader.biHeight = -1 * (
int)(height);
7395 bmp_info.bmiHeader.biPlanes = 1;
7396 bmp_info.bmiHeader.biBitCount = 32;
7397 bmp_info.bmiHeader.biCompression = BI_RGB;
7398 bmp_info.bmiHeader.biSizeImage = 0;
7399 bmp_info.bmiHeader.biClrUsed = 0;
7400 bmp_info.bmiHeader.biXPelsPerMeter = 0
L;
7401 bmp_info.bmiHeader.biYPelsPerMeter = 0
L;
7402 bmp_info.bmiHeader.biClrImportant = 0;
7403 bmp_info.bmiColors[0].rgbRed = 0;
7404 bmp_info.bmiColors[0].rgbGreen = 0;
7405 bmp_info.bmiColors[0].rgbBlue = 0;
7406 bmp_info.bmiColors[0].rgbReserved = 0;
7408 HDC hdc = ::GetDC(NULL);
7409 HBITMAP hbitmap = ::CreateDIBitmap(hdc, &bmp_info.bmiHeader, CBM_INIT,
7410 (
void *)bits, &bmp_info, DIB_RGB_COLORS);
7411 ::ReleaseDC(NULL, hdc);
7417 ::SetBitmapDimensionEx(hbitmap,
width, height, &size);
7419 return (
Pixmap_t)gdk_pixmap_foreign_new((guint32)hbitmap);
7427 HBITMAP hBmp =
reinterpret_cast<HBITMAP
>(pix);
7430 SetBitmapDimensionEx(hBmp, w,
h, &sz);
7431 GdkPixmap *newPix = gdk_pixmap_foreign_new(
reinterpret_cast<guint32
>(hBmp));
7452 gCws->window = newPix;
7455 gCws->double_buffer = 0;
7460 gCws->new_colors = 0;
7487 newsize *
sizeof(XWindow_t),
7499 gCws->window = gdk_window_foreign_new((guint32)qwid);
7503 gCws->double_buffer = 0;
7508 gCws->new_colors = 0;
7523 gdk_pixmap_unref(
gCws->buffer);
7525 if (
gCws->new_colors) {
7526 gdk_colormap_free_colors((GdkColormap *)
fColormap,
7527 (GdkColor *)
gCws->new_colors,
gCws->ncolors);
7529 delete []
gCws->new_colors;
7530 gCws->new_colors = 0;
7555 gdk_window_shape_combine_mask((GdkWindow *)
id, (GdkBitmap *) mask,
x,
y);
7563 return (
UInt_t)gdk_screen_width_mm();
7573 HWND hWnd = (HWND)GDK_DRAWABLE_XID((GdkWindow *)win);
7574 Atom_t atom = (
Atom_t)GetProp(hWnd,(LPCTSTR)MAKELONG(prop,0));
7576 GlobalDeleteAtom(atom);
7578 RemoveProp(hWnd,(LPCTSTR)MAKELONG(prop,0));
7588 unsigned char **prop_list)
7594 HWND hWnd = (HWND)GDK_DRAWABLE_XID((GdkWindow *)win);
7601 if (prop == dndproxy)
7603 if (prop == dndtypelist) {
7605 *prop_list = (
unsigned char *)GetProp(hWnd, (LPCTSTR)MAKELONG(prop,0));
7606 for (
n = 0; prop_list[
n];
n++);
7611 if (!OpenClipboard((HWND)GDK_DRAWABLE_XID((GdkWindow *)win))) {
7614 hdata = GetClipboardData(CF_PRIVATEFIRST);
7615 ptr = (
UChar_t *)GlobalLock(hdata);
7616 length = GlobalSize(hdata);
7618 for (i = 0; i < length; i++) {
7621 GlobalUnlock(hdata);
7624 *bytes = *nitems = length;
7640 gdk_window_set_cursor((GdkWindow *) win, (GdkCursor *)cur);
7651 static UINT gdk_selection_notify_msg =
7652 RegisterWindowMessage(
"gdk-selection-notify");
7653 HWND hWnd = (HWND)GDK_DRAWABLE_XID((GdkWindow *)win);
7654 if (!OpenClipboard((HWND)GDK_DRAWABLE_XID((GdkWindow *)win))) {
7657 hdata = GetClipboardData(CF_PRIVATEFIRST);
7664 PostMessage(hWnd, gdk_selection_notify_msg, sel, target);
7672 static UINT gdk_selection_request_msg =
7673 RegisterWindowMessage(
"gdk-selection-request");
7674 HWND hWnd = (HWND)GDK_DRAWABLE_XID((GdkWindow *)owner);
7675 OpenClipboard(hWnd);
7679 ::PostMessage(hWnd, gdk_selection_request_msg, sel, 0);
7694 if (data == 0 || len == 0)
7696 if (!OpenClipboard((HWND)GDK_DRAWABLE_XID((GdkWindow *)
id))) {
7699 hdata = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, len + 1);
7700 ptr = (
UChar_t *)GlobalLock(hdata);
7701 for (i = 0; i < len; i++) {
7704 GlobalUnlock(hdata);
7705 SetClipboardData(CF_PRIVATEFIRST, hdata);
7714 SetProp((HWND)GDK_DRAWABLE_XID((GdkWindow *)win),
7715 (LPCTSTR)MAKELONG(prop,0),
7725 int x,
int y,
int maxd)
7738 hwnd = ::ChildWindowFromPointEx((HWND)GDK_DRAWABLE_XID((GdkWindow *)root),
7741 GetWindowRect(hwnd, &rect);
7742 if (PtInRect(&rect, cpt)) {
7743 if (GetProp(hwnd,(LPCTSTR)MAKELONG(dndaware,0))) {
7744 win = (
Window_t) gdk_xid_table_lookup(hwnd);
7745 if (win && win != dragwin && win != input)
7752 ::MapWindowPoints(NULL, hwndt, &point, 1);
7753 hwndc = ChildWindowFromPoint (hwndt, point);
7754 if (GetProp(hwnd,(LPCTSTR)MAKELONG(dndaware,0))) {
7755 win = (
Window_t) gdk_xid_table_lookup(hwndc);
7756 if (win && win != dragwin && win != input)
7761 else if (hwndc == hwndt)
7765 if (GetProp(hwndt,(LPCTSTR)MAKELONG(dndaware,0))) {
7766 win = (
Window_t) gdk_xid_table_lookup(hwndt);
7767 if (win && win != dragwin && win != input)
7772 hwnd = GetNextWindow(hwnd, GW_HWNDNEXT);
7787 HWND window = (HWND)GDK_DRAWABLE_XID((GdkWindow *)win);
7789 version = (
Atom_t)GetProp(window,(LPCTSTR)MAKELONG(dndaware,0));
7790 if (version)
return kTRUE;
7805 DWORD dwStyle = GetWindowLong((HWND)GDK_DRAWABLE_XID((GdkWindow *)
id),
7807 SetWindowLong((HWND)GDK_DRAWABLE_XID((GdkWindow *)
id), GWL_EXSTYLE,
7808 dwStyle | WS_EX_ACCEPTFILES);
7810 SetProp((HWND)GDK_DRAWABLE_XID((GdkWindow *)
id),
7811 (LPCTSTR)MAKELONG(dndaware,0),
7816 for (
n = 0; typelist[
n];
n++);
7818 SetProp((HWND)GDK_DRAWABLE_XID((GdkWindow *)
id),
7819 (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 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 int gMarkerJoinStyle
static int gMarkerLineStyle
static ULong_t gKeybdMask
static struct @55 gMarker
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 int gMarkerLineWidth
static int gMarkerCapStyle
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.
static Width_t GetMarkerLineWidth(Style_t style)
Internal helper function that returns the line width of the given marker style (0 = filled marker)
Size_t fMarkerSize
Marker size.
Style_t fMarkerStyle
Marker style.
static Style_t GetMarkerStyleBase(Style_t style)
Internal helper function that returns the corresponding marker style with line width 1 for the given ...
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.
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 Floor(Double_t x)
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)