static GdkCursor* gtkGetCursor(Ihandle* ih, const char* name) { static struct { const char* iupname; int sysname; } table[] = { { "NONE", 0}, { "NULL", 0}, { "ARROW", GDK_LEFT_PTR}, { "BUSY", GDK_WATCH}, { "CROSS", GDK_CROSSHAIR}, { "HAND", GDK_HAND2}, { "HELP", GDK_QUESTION_ARROW}, { "IUP", GDK_QUESTION_ARROW}, { "MOVE", GDK_FLEUR}, { "PEN", GDK_PENCIL}, { "RESIZE_N", GDK_TOP_SIDE}, { "RESIZE_S", GDK_BOTTOM_SIDE}, { "RESIZE_NS", GDK_SB_V_DOUBLE_ARROW}, { "RESIZE_W", GDK_LEFT_SIDE}, { "RESIZE_E", GDK_RIGHT_SIDE}, { "RESIZE_WE", GDK_SB_H_DOUBLE_ARROW}, { "RESIZE_NE", GDK_TOP_RIGHT_CORNER}, { "RESIZE_SE", GDK_BOTTOM_RIGHT_CORNER}, { "RESIZE_NW", GDK_TOP_LEFT_CORNER}, { "RESIZE_SW", GDK_BOTTOM_LEFT_CORNER}, { "TEXT", GDK_XTERM}, { "UPARROW", GDK_CENTER_PTR} }; GdkCursor* cur; char str[50]; int i, count = sizeof(table)/sizeof(table[0]); /* check the cursor cache first (per control)*/ sprintf(str, "_IUPGTK_CURSOR_%s", name); cur = (GdkCursor*)iupAttribGet(ih, str); if (cur) return cur; /* check the pre-defined IUP names first */ for (i = 0; i < count; i++) { if (iupStrEqualNoCase(name, table[i].iupname)) { if (table[i].sysname) cur = gdk_cursor_new(table[i].sysname); else cur = gtkEmptyCursor(ih); break; } } if (i == count) { /* check for a name defined cursor */ cur = iupImageGetCursor(name); } /* save the cursor in cache */ iupAttribSetStr(ih, str, (char*)cur); return cur; }
static Cursor motGetCursor(Ihandle* ih, const char* name) { static struct { const char* iupname; int sysname; } table[] = { { "NONE", 0}, { "NULL", 0}, { "ARROW", XC_left_ptr}, { "BUSY", XC_watch}, { "CROSS", XC_crosshair}, { "HAND", XC_hand2}, { "HELP", XC_question_arrow}, { "IUP", XC_question_arrow}, { "MOVE", XC_fleur}, { "PEN", XC_pencil}, { "RESIZE_N", XC_top_side}, { "RESIZE_S", XC_bottom_side}, { "RESIZE_NS", XC_sb_v_double_arrow}, { "SPLITTER_HORIZ", XC_sb_v_double_arrow}, { "RESIZE_W", XC_left_side}, { "RESIZE_E", XC_right_side}, { "RESIZE_WE", XC_sb_h_double_arrow}, { "SPLITTER_VERT", XC_sb_h_double_arrow}, { "RESIZE_NE", XC_top_right_corner}, { "RESIZE_SE", XC_bottom_right_corner}, { "RESIZE_NW", XC_top_left_corner}, { "RESIZE_SW", XC_bottom_left_corner}, { "TEXT", XC_xterm}, { "UPARROW", XC_center_ptr} }; Cursor cur; char str[200]; int i, count = sizeof(table)/sizeof(table[0]); /* check the cursor cache first (per control)*/ sprintf(str, "_IUPMOT_CURSOR_%s", name); cur = (Cursor)iupAttribGet(ih, str); if (cur) return cur; /* check the pre-defined IUP names first */ for (i = 0; i < count; i++) { if (iupStrEqualNoCase(name, table[i].iupname)) { if (table[i].sysname) cur = XCreateFontCursor(iupmot_display, table[i].sysname); else cur = motEmptyCursor(ih); break; } } if (i == count) { /* check for a name defined cursor */ cur = (Cursor)iupImageGetCursor(name); } iupAttribSetStr(ih, str, (char*)cur); return cur; }
HCURSOR iupwinGetCursor(Ihandle* ih, const char* name) { static struct { const char* iupname; const TCHAR* sysname; } table[] = { {"NONE", NULL}, {"NULL", NULL}, {"ARROW", IDC_ARROW}, {"BUSY", IDC_WAIT}, {"CROSS", IDC_CROSS}, {"HAND", IDC_HAND}, {"MOVE", IDC_SIZEALL}, {"RESIZE_N", IDC_SIZENS}, {"RESIZE_S", IDC_SIZENS}, {"RESIZE_NS", IDC_SIZENS}, {"RESIZE_W", IDC_SIZEWE}, {"RESIZE_E", IDC_SIZEWE}, {"RESIZE_WE", IDC_SIZEWE}, {"RESIZE_NE", IDC_SIZENESW}, {"RESIZE_SE", IDC_SIZENWSE}, {"RESIZE_NW", IDC_SIZENWSE}, {"RESIZE_SW", IDC_SIZENESW}, {"TEXT", IDC_IBEAM}, {"HELP", IDC_HELP}, {"IUP", IDC_HELP}, {"NO", IDC_NO}, {"UPARROW", IDC_UPARROW}, {"APPSTARTING", IDC_APPSTARTING} }; HCURSOR cur; char str[200]; int i, count = sizeof(table)/sizeof(table[0]); /* check the cursor cache first (per control)*/ sprintf(str, "_IUPWIN_CURSOR_%s", name); cur = (HCURSOR)iupAttribGet(ih, str); if (cur) return cur; /* check the pre-defined IUP names first */ for (i = 0; i < count; i++) { if (iupStrEqualNoCase(name, table[i].iupname)) { if (table[i].sysname) cur = LoadCursor(NULL, table[i].sysname); else cur = NULL; break; } } if (i == count) { /* check other system cursors */ if (iupStrEqualNoCase(name, "PEN")) name = "CURSOR_PEN"; /* name in "iup.rc" */ /* check for an name defined cursor */ cur = iupImageGetCursor(name); } if (!cur) { if (iupStrEqualNoCase(name, "SPLITTER_VERT")) cur = winLoadComCtlCursor(MAKEINTRESOURCE(107)); else if (iupStrEqualNoCase(name, "SPLITTER_HORIZ")) cur = winLoadComCtlCursor(MAKEINTRESOURCE(135)); } iupAttribSet(ih, str, (char*)cur); return cur; }