static char* iBaseGetScreenPositionAttrib(Ihandle *ih) { int x = 0, y = 0; iupdrvClientToScreen(ih, &x, &y); iupdrvAddScreenOffset(&x, &y, -1); return iupStrReturnIntInt(x, y, ','); }
void iupdrvGetCursorPos(int *x, int *y) { POINT CursorPoint; GetCursorPos(&CursorPoint); *x = (int)CursorPoint.x; *y = (int)CursorPoint.y; iupdrvAddScreenOffset(x, y, -1); }
void iupdrvDialogGetPosition(Ihandle *ih, InativeHandle* handle, int *x, int *y) { RECT rect; if (!handle) handle = ih->handle; GetWindowRect(handle, &rect); if (x) *x = rect.left; if (y) *y = rect.top; iupdrvAddScreenOffset(x, y, -1); }
static void iMenuAdjustPos(int *x, int *y) { int cursor_x = 0, cursor_y = 0; int screen_width = 0, screen_height = 0; if (*x == IUP_CENTER || *y == IUP_CENTER || *x == IUP_RIGHT || *y == IUP_RIGHT || *x == IUP_CENTERPARENT || *y == IUP_CENTERPARENT) iupdrvGetScreenSize(&screen_width, &screen_height); if (*x == IUP_MOUSEPOS || *y == IUP_MOUSEPOS) iupdrvGetCursorPos(&cursor_x, &cursor_y); switch (*x) { case IUP_CENTER: *x = screen_width/2; break; case IUP_LEFT: *x = 0; break; case IUP_RIGHT: *x = screen_width; break; case IUP_MOUSEPOS: *x = cursor_x; break; } switch (*y) { case IUP_CENTER: *y = screen_height/2; break; case IUP_LEFT: *y = 0; break; case IUP_RIGHT: *y = screen_height; break; case IUP_MOUSEPOS: *y = cursor_y; break; } iupdrvAddScreenOffset(x, y, 1); }
static void iDialogAdjustPos(Ihandle *ih, int *x, int *y) { int cursor_x = 0, cursor_y = 0; int screen_width = 0, screen_height = 0; int current_x = 0, current_y = 0; int parent_x = 0, parent_y = 0; /* the dialog is already mapped here */ if (*x == IUP_CURRENT || *y == IUP_CURRENT) { /* if first time, there is no current position */ if (!ih->data->first_show) { int center = IUP_CENTER; InativeHandle* parent = iupDialogGetNativeParent(ih); if (parent) center = IUP_CENTERPARENT; if (*x == IUP_CURRENT) *x = center; if (*y == IUP_CURRENT) *y = center; } else iupdrvDialogGetPosition(ih, NULL, ¤t_x, ¤t_y); } if (*x == IUP_CENTER || *y == IUP_CENTER || *x == IUP_RIGHT || *y == IUP_RIGHT || *x == IUP_CENTERPARENT || *y == IUP_CENTERPARENT) iupdrvGetScreenSize(&screen_width, &screen_height); if (*x == IUP_CENTERPARENT || *y == IUP_CENTERPARENT) { InativeHandle* parent = iupDialogGetNativeParent(ih); if (parent) { Ihandle* ih_parent = IupGetAttributeHandle(ih, "PARENTDIALOG"); iupdrvDialogGetPosition(ih_parent, parent, &parent_x, &parent_y); if (*x == IUP_CENTERPARENT && *y == IUP_CENTERPARENT) iupdrvDialogGetSize(ih_parent, parent, &screen_width, &screen_height); else if (*x == IUP_CENTERPARENT) iupdrvDialogGetSize(ih_parent, parent, &screen_width, NULL); else if (*y == IUP_CENTERPARENT) iupdrvDialogGetSize(ih_parent, parent, NULL, &screen_height); } } if (*x == IUP_MOUSEPOS || *y == IUP_MOUSEPOS) iupdrvGetCursorPos(&cursor_x, &cursor_y); if (iupAttribGetBoolean(ih, "MDICHILD")) { Ihandle* client = (Ihandle*)iupAttribGet(ih, "MDICLIENT_HANDLE"); if (client) { /* position is relative to mdi client */ parent_x = 0; parent_y = 0; /* screen size is now the size of the mdi client */ screen_width = client->currentwidth; screen_height = client->currentheight; iupdrvScreenToClient(client, ¤t_x, ¤t_y); iupdrvScreenToClient(client, &cursor_x, &cursor_y); } } switch (*x) { case IUP_CENTERPARENT: *x = (screen_width - ih->currentwidth)/2 + parent_x; break; case IUP_CENTER: *x = (screen_width - ih->currentwidth)/2; break; case IUP_LEFT: *x = 0; break; case IUP_RIGHT: *x = screen_width - ih->currentwidth; break; case IUP_MOUSEPOS: *x = cursor_x; break; case IUP_CURRENT: *x = current_x; break; } switch (*y) { case IUP_CENTERPARENT: *y = (screen_height - ih->currentheight)/2 + parent_y; break; case IUP_CENTER: *y = (screen_height - ih->currentheight)/2; break; case IUP_LEFT: *y = 0; break; case IUP_RIGHT: *y = screen_height - ih->currentheight; break; case IUP_MOUSEPOS: *y = cursor_y; break; case IUP_CURRENT: *y = current_y; break; } iupdrvAddScreenOffset(x, y, 1); }
void iupdrvWarpPointer(int x, int y) { iupdrvAddScreenOffset(&x, &y, 1); SetCursorPos(x, y); }