static int gtkDialogSetBackgroundAttrib(Ihandle* ih, const char* value) { if (iupdrvBaseSetBgColorAttrib(ih, value)) { GtkStyle *style = gtk_widget_get_style(ih->handle); if (style->bg_pixmap[GTK_STATE_NORMAL]) { style = gtk_style_copy(style); style->bg_pixmap[GTK_STATE_NORMAL] = NULL; gtk_widget_set_style(ih->handle, style); } return 1; } else { GdkPixbuf* pixbuf = iupImageGetImage(value, ih, 0); if (pixbuf) { GdkPixmap* pixmap; GtkStyle *style; gdk_pixbuf_render_pixmap_and_mask(pixbuf, &pixmap, NULL, 255); style = gtk_style_copy(gtk_widget_get_style(ih->handle)); style->bg_pixmap[GTK_STATE_NORMAL] = pixmap; gtk_widget_set_style(ih->handle, style); return 1; } } return 0; }
static int motToggleSetBackgroundAttrib(Ihandle* ih, const char* value) { if (ih->data->type == IUP_TOGGLE_TEXT) { Pixel color; /* ignore given value, must use only from parent */ value = iupAttribGetStrNativeParent(ih, "BACKGROUND"); color = iupmotColorGetPixelStr(value); if (color != (Pixel)-1) { XtVaSetValues(ih->handle, XmNbackground, color, NULL); return 1; } else { Pixmap pixmap = (Pixmap)iupImageGetImage(value, ih, 0, "BACKGROUND"); if (pixmap) { XtVaSetValues(ih->handle, XmNbackgroundPixmap, pixmap, NULL); return 1; } } } return 0; }
static int motClipboardSetImageAttrib(Ihandle *ih, const char *value) { Pixmap pixmap; long item_id = 0; Window window = motClipboardGetWindow(); XmString clip_label; if (!value) { XmClipboardUndoCopy(iupmot_display, window); return 0; } clip_label = XmStringCreateLocalized ("IupClipboard"); if (XmClipboardStartCopy(iupmot_display, window, clip_label, CurrentTime, NULL, NULL, &item_id)!=ClipboardSuccess) { XmStringFree(clip_label); return 0; } pixmap = (Pixmap)iupImageGetImage(value, ih, 0); XmClipboardCopy(iupmot_display, window, item_id, "PIXMAP", (char*)&pixmap, sizeof(Pixmap), 0, NULL); XmClipboardEndCopy(iupmot_display, window, item_id); XmStringFree(clip_label); (void)ih; return 0; }
static int winDialogSetOpacityImageAttrib(Ihandle *ih, const char *value) { HBITMAP hBitmap = (HBITMAP)iupImageGetImage(value, ih, 0); if (!hBitmap) return 0; else { BLENDFUNCTION blend = { AC_SRC_OVER, 0, 255, AC_SRC_ALPHA }; POINT ptSrc = { 0, 0 }; HDC hDC = GetDC(NULL); HDC hMemDC = CreateCompatibleDC(hDC); HBITMAP oldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap); int img_w, img_h, bpp; SIZE size; iupdrvImageGetInfo(hBitmap, &img_w, &img_h, &bpp); size.cx = img_w; size.cy = img_h; UpdateLayeredWindow(ih->handle, hDC, NULL, &size, hMemDC, &ptSrc, RGB(0, 0, 0), &blend, ULW_ALPHA); SelectObject(hMemDC, oldBitmap); DeleteDC(hMemDC); ReleaseDC(NULL, hDC); return 1; } }
static int iTabsGetMaxHeight(Ihandle* ih) { int max_height = 0, h, pos; char *tabimage; Ihandle* child; for (pos = 0, child = ih->firstchild; child; child = child->brother, pos++) { tabimage = iupAttribGet(child, "TABIMAGE"); if (!tabimage) tabimage = iupTabsAttribGetStrId(ih, "TABIMAGE", pos); if (tabimage) { void* img = iupImageGetImage(tabimage, ih, 0); if (img) { iupdrvImageGetInfo(img, NULL, &h, NULL); if (h > max_height) max_height = h; } } } iupdrvFontGetCharSize(ih, NULL, &h); if (h > max_height) max_height = h; return max_height; }
static int iTabsGetMaxWidth(Ihandle* ih) { int max_width = 0, width, pos; char *tabtitle, *tabimage; Ihandle* child; for (pos = 0, child = ih->firstchild; child; child = child->brother, pos++) { tabtitle = iupAttribGet(child, "TABTITLE"); if (!tabtitle) tabtitle = iupTabsAttribGetStrId(ih, "TABTITLE", pos); tabimage = iupAttribGet(child, "TABIMAGE"); if (!tabimage) tabimage = iupTabsAttribGetStrId(ih, "TABIMAGE", pos); if (!tabtitle && !tabimage) tabtitle = " "; width = 0; if (tabtitle) width += iupdrvFontGetStringWidth(ih, tabtitle); if (tabimage) { void* img = iupImageGetImage(tabimage, ih, 0); if (img) { int w; iupdrvImageGetInfo(img, &w, NULL, NULL); width += w; } } if (width > max_width) max_width = width; } return max_width; }
static int winItemSetImpressAttrib(Ihandle* ih, const char* value) { HBITMAP hBitmapUnchecked, hBitmapChecked; char *image = iupAttribGet(ih, "IMPRESS"); hBitmapUnchecked = iupImageGetImage(image, ih, 0); if (value) hBitmapChecked = iupImageGetImage(value, ih, 0); else hBitmapChecked = hBitmapUnchecked; SetMenuItemBitmaps((HMENU)ih->handle, (UINT)ih->serial, MF_BYCOMMAND, hBitmapUnchecked, hBitmapChecked); winMenuUpdateBar(ih); return 1; }
static void winToggleSetBitmap(Ihandle* ih, const char* name, int make_inactive) { if (name) { HBITMAP bitmap = iupImageGetImage(name, ih, make_inactive); SendMessage(ih->handle, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)bitmap); } else SendMessage(ih->handle, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)NULL); /* if not defined */ }
static void winToggleSetBitmap(Ihandle* ih, const char* name, int make_inactive) { /* called only when (ih->data->type==IUP_TOGGLE_IMAGE && !iupwin_comctl32ver6 && !ih->data->flat) */ if (name) { HBITMAP bitmap = iupImageGetImage(name, ih, make_inactive); SendMessage(ih->handle, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)bitmap); } else SendMessage(ih->handle, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)NULL); /* if not defined */ }
static void winLabelDrawImage(Ihandle* ih, HDC hDC, int rect_width, int rect_height) { int xpad = ih->data->horiz_padding, ypad = ih->data->vert_padding; int x, y, width, height, bpp; HBITMAP hBitmap, hMask = NULL; char *name; int make_inactive = 0; if (iupdrvIsActive(ih)) name = iupAttribGet(ih, "IMAGE"); else { name = iupAttribGet(ih, "IMINACTIVE"); if (!name) { name = iupAttribGet(ih, "IMAGE"); make_inactive = 1; } } hBitmap = iupImageGetImage(name, ih, make_inactive); if (!hBitmap) return; /* must use this info, since image can be a driver image loaded from resources */ iupdrvImageGetInfo(hBitmap, &width, &height, &bpp); if (ih->data->horiz_alignment == IUP_ALIGN_ARIGHT) x = rect_width - (width + 2*xpad); else if (ih->data->horiz_alignment == IUP_ALIGN_ACENTER) x = (rect_width - (width + 2*xpad))/2; else /* ALEFT */ x = 0; if (ih->data->vert_alignment == IUP_ALIGN_ABOTTOM) y = rect_height - (height + 2*ypad); else if (ih->data->vert_alignment == IUP_ALIGN_ATOP) y = 0; else /* ACENTER */ y = (rect_height - (height + 2*ypad))/2; x += xpad; y += ypad; if (bpp == 8) hMask = iupdrvImageCreateMask(IupGetHandle(name)); iupwinDrawBitmap(hDC, hBitmap, hMask, x, y, width, height, bpp); if (hMask) DeleteObject(hMask); }
void iupDrawImage(IdrawCanvas* dc, const char* name, int make_inactive, int x, int y, int *img_w, int *img_h) { int bpp; Pixmap pixmap = (Pixmap)iupImageGetImage(name, dc->ih, make_inactive); if (!pixmap) return; /* must use this info, since image can be a driver image loaded from resources */ iupdrvImageGetInfo((void*)pixmap, img_w, img_h, &bpp); XCopyArea(iupmot_display, pixmap, dc->pixmap, dc->pixmap_gc, 0, 0, *img_w, *img_h, x, y); }
void iupDrawImage(IdrawCanvas* dc, const char* name, int make_inactive, int x, int y, int *img_w, int *img_h) { int bpp; GdkPixbuf* pixbuf = iupImageGetImage(name, dc->ih, make_inactive); if (!pixbuf) return; /* must use this info, since image can be a driver image loaded from resources */ iupdrvImageGetInfo(pixbuf, img_w, img_h, &bpp); gdk_draw_pixbuf(dc->pixmap, dc->pixmap_gc, pixbuf, 0, 0, x, y, *img_w, *img_h, GDK_RGB_DITHER_NORMAL, 0, 0); }
static int winItemSetImageAttrib(Ihandle* ih, const char* value) { HBITMAP hBitmapUnchecked, hBitmapChecked; char* impress; if (ih->handle == (InativeHandle*)-1) /* check if submenu is actually created */ return 1; hBitmapUnchecked = iupImageGetImage(value, ih, 0); impress = iupAttribGet(ih, "IMPRESS"); if (impress) hBitmapChecked = iupImageGetImage(impress, ih, 0); else hBitmapChecked = hBitmapUnchecked; SetMenuItemBitmaps((HMENU)ih->handle, (UINT)ih->serial, MF_BYCOMMAND, hBitmapUnchecked, hBitmapChecked); winMenuUpdateBar(ih); return 1; }
static int winItemSetImageAttrib(Ihandle* ih, const char* value) { HBITMAP hBitmapUnchecked, hBitmapChecked; char* impress; /* check if the submenu handle was created in winSubmenuAddToParent */ if (ih->handle == (InativeHandle*)-1) return 1; hBitmapUnchecked = iupImageGetImage(value, ih, 0, NULL); impress = iupAttribGet(ih, "IMPRESS"); if (impress) hBitmapChecked = iupImageGetImage(impress, ih, 0, NULL); else hBitmapChecked = hBitmapUnchecked; SetMenuItemBitmaps((HMENU)ih->handle, (UINT)ih->serial, MF_BYCOMMAND, hBitmapUnchecked, hBitmapChecked); winMenuUpdateBar(ih); return 1; }
static void gtkItemUpdateImage(Ihandle* ih, const char* value, const char* image, const char* impress) { GdkPixbuf* pixbuf; if (!impress || !iupStrBoolean(value)) pixbuf = iupImageGetImage(image, ih, 0); else pixbuf = iupImageGetImage(impress, ih, 0); if (pixbuf) { GtkWidget* image_label = gtk_image_menu_item_get_image((GtkImageMenuItem*)ih->handle); if (!image_label) { image_label = gtk_image_new(); gtk_image_menu_item_set_image((GtkImageMenuItem*)ih->handle, image_label); } if (pixbuf != gtk_image_get_pixbuf((GtkImage*)image_label)) gtk_image_set_from_pixbuf((GtkImage*)image_label, pixbuf); } else gtk_image_menu_item_set_image((GtkImageMenuItem*)ih->handle, NULL); }
static int gtkTabsSetTabImageAttrib(Ihandle* ih, int pos, const char* value) { if (value) { Ihandle* child = IupGetChild(ih, pos); GtkWidget* tab_image = (GtkWidget*)iupAttribGet(child, "_IUPGTK_TABIMAGE"); if (tab_image) { GdkPixbuf* pixbuf = iupImageGetImage(value, ih, 0); if (pixbuf) gtk_image_set_from_pixbuf((GtkImage*)tab_image, pixbuf); } } return 1; }
static int motTabsSetTabImageAttrib(Ihandle* ih, const char* name_id, const char* value) { int pos; if (value && iupStrToInt(name_id, &pos)==1) { Ihandle* child = IupGetChild(ih, pos); Widget tab_button = (Widget)iupAttribGet(child, "_IUPMOT_TABBUTTON"); if (tab_button) { Pixmap pixmap = (Pixmap)iupImageGetImage(value, ih, 0, "TABIMAGE"); if (pixmap) XtVaSetValues(tab_button, XmNlabelPixmap, pixmap, NULL); } } return 1; }
void iupdrvDrawImage(IdrawCanvas* dc, const char* name, int make_inactive, const char* bgcolor, int x, int y, int w, int h) { int bpp, img_w, img_h; GdkPixbuf* pixbuf = iupImageGetImage(name, dc->ih, make_inactive, bgcolor); if (!pixbuf) return; /* must use this info, since image can be a driver image loaded from resources */ iupdrvImageGetInfo(pixbuf, &img_w, &img_h, &bpp); gdk_draw_pixbuf(dc->pixmap, dc->pixmap_gc, pixbuf, 0, 0, x, y, img_w, img_h, GDK_RGB_DITHER_NORMAL, 0, 0); /* zoom not supported */ (void)w; (void)h; }
static int motDialogSetBackgroundAttrib(Ihandle* ih, const char* value) { if (motDialogSetBgColorAttrib(ih, value)) return 1; else { Pixmap pixmap = (Pixmap)iupImageGetImage(value, ih, 0); if (pixmap) { Widget dialog_manager = XtNameToWidget(ih->handle, "*dialog_manager"); XtVaSetValues(dialog_manager, XmNbackgroundPixmap, pixmap, NULL); return 1; } } return 0; }
void iupmotSetPixmap(Ihandle* ih, const char* name, const char* prop, int make_inactive) { if (name) { Pixmap old_pixmap; Pixmap pixmap = (Pixmap)iupImageGetImage(name, ih, make_inactive); if (!pixmap) pixmap = XmUNSPECIFIED_PIXMAP; XtVaGetValues(ih->handle, prop, &old_pixmap, NULL); if (pixmap != old_pixmap) XtVaSetValues(ih->handle, prop, pixmap, NULL); return; } /* if not defined */ XtVaSetValues(ih->handle, prop, XmUNSPECIFIED_PIXMAP, NULL); }
static int motLabelSetBackgroundAttrib(Ihandle* ih, const char* value) { /* ignore given value, must use only from parent */ value = iupAttribGetInheritNativeParent(ih, "BACKGROUND"); if (iupdrvBaseSetBgColorAttrib(ih, value)) return 1; else { Pixmap pixmap = (Pixmap)iupImageGetImage(value, ih, 0); if (pixmap) { XtVaSetValues(ih->handle, XmNbackgroundPixmap, pixmap, NULL); return 1; } } return 0; }
static int winDialogSetBackgroundAttrib(Ihandle* ih, const char* value) { if (winDialogSetBgColorAttrib(ih, value)) return 1; else { HBITMAP hBitmap = iupImageGetImage(value, ih, 0); if (hBitmap) { iupAttribSetStr(ih, "_IUPWIN_BACKGROUND_COLOR", NULL); iupAttribSetStr(ih, "_IUPWIN_BACKGROUND_BITMAP", (char*)hBitmap); RedrawWindow(ih->handle, NULL, NULL, RDW_INVALIDATE|RDW_ERASE|RDW_ALLCHILDREN); /* post WM_ERASEBKGND and WM_PAINT */ return 1; } } return 0; }
void iupDrawImage(IdrawCanvas* dc, const char* name, int make_inactive, int x, int y, int *img_w, int *img_h) { int bpp; HBITMAP hMask = NULL; HBITMAP hBitmap = (HBITMAP)iupImageGetImage(name, dc->ih, make_inactive); if (!hBitmap) return; /* must use this info, since image can be a driver image loaded from resources */ iupdrvImageGetInfo(hBitmap, img_w, img_h, &bpp); if (bpp == 8) hMask = iupdrvImageCreateMask(IupGetHandle(name)); iupwinDrawBitmap(dc->hBitmapDC, hBitmap, hMask, x, y, *img_w, *img_h, bpp); if (hMask) DeleteObject(hMask); }
static void gtkToggleSetPixbuf(Ihandle* ih, const char* name, int make_inactive, const char* attrib_name) { GtkButton* button = (GtkButton*)ih->handle; GtkImage* image = (GtkImage*)gtk_button_get_image(button); if (name) { GdkPixbuf* pixbuf = iupImageGetImage(name, ih, make_inactive, attrib_name); GdkPixbuf* old_pixbuf = gtk_image_get_pixbuf(image); if (pixbuf != old_pixbuf) gtk_image_set_from_pixbuf(image, pixbuf); return; } /* if not defined */ #if GTK_CHECK_VERSION(2, 8, 0) gtk_image_clear(image); #endif }
static int gtkDialogSetOpacityImageAttrib(Ihandle *ih, const char *value) { GdkPixbuf* pixbuf = iupImageGetImage(value, ih, 0); if (pixbuf) { #if GTK_CHECK_VERSION(3, 0, 0) GdkWindow* window = iupgtkGetWindow(ih->handle); if (window) { cairo_region_t *shape; #if GTK_CHECK_VERSION(3, 10, 0) cairo_surface_t* surface = gdk_cairo_surface_create_from_pixbuf(pixbuf, 0, window); #else int width = gdk_pixbuf_get_width(pixbuf); int height = gdk_pixbuf_get_height(pixbuf); cairo_surface_t* surface = gdk_window_create_similar_surface(window, CAIRO_CONTENT_COLOR_ALPHA, width, height); cairo_t* cr = cairo_create(surface); gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0); cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); cairo_paint(cr); cairo_destroy(cr); #endif shape = gdk_cairo_region_create_from_surface(surface); cairo_surface_destroy(surface); gtk_widget_shape_combine_region(ih->handle, shape); cairo_region_destroy(shape); } #else GdkBitmap* mask = NULL; gdk_pixbuf_render_pixmap_and_mask(pixbuf, NULL, &mask, 255); if (mask) { gtk_widget_shape_combine_mask(ih->handle, mask, 0, 0); g_object_unref(mask); } #endif return 1; } return 0; }
static int winItemSetTitleImageAttrib(Ihandle* ih, const char* value) { HBITMAP hBitmap; MENUITEMINFO menuiteminfo; if (ih->handle == (InativeHandle*)-1) /* check if submenu is actually created */ return 1; hBitmap = iupImageGetImage(value, ih, 0); menuiteminfo.cbSize = sizeof(MENUITEMINFO); menuiteminfo.fMask = MIIM_BITMAP; menuiteminfo.hbmpItem = hBitmap; SetMenuItemInfo((HMENU)ih->handle, (UINT)ih->serial, FALSE, &menuiteminfo); winMenuUpdateBar(ih); return 1; }
void iupDrawImage(IdrawCanvas* dc, const char* name, int make_inactive, int x, int y, int *img_w, int *img_h) { int bpp; GdkPixbuf* pixbuf = iupImageGetImage(name, dc->ih, make_inactive); if (!pixbuf) return; /* must use this info, since image can be a driver image loaded from resources */ iupdrvImageGetInfo(pixbuf, img_w, img_h, &bpp); cairo_save (dc->image_cr); cairo_rectangle(dc->image_cr, x, y, *img_w, *img_h); cairo_clip(dc->image_cr); gdk_cairo_set_source_pixbuf(dc->image_cr, pixbuf, x, y); cairo_paint(dc->image_cr); /* paints the current source everywhere within the current clip region. */ /* must restore clipping */ cairo_restore (dc->image_cr); }
static int motFrameSetBackgroundAttrib(Ihandle* ih, const char* value) { Pixel color; /* ignore given value, must use only from parent */ value = iupAttribGetInheritNativeParent(ih, "BACKGROUND"); color = iupmotColorGetPixelStr(value); if (color != (Pixel)-1) { Widget title_label, child_manager; iupmotSetBgColor(ih->handle, color); child_manager = (Widget)iupAttribGet(ih, "_IUPMOT_FRAMECONTAINER"); iupmotSetBgColor(child_manager, color); title_label = (Widget)iupAttribGet(ih, "_IUPMOT_FRAMELABEL"); if (!title_label) return 1; iupmotSetBgColor(title_label, color); return 1; } else { Pixmap pixmap = (Pixmap)iupImageGetImage(value, ih, 0); if (pixmap) { Widget child_manager = (Widget)iupAttribGet(ih, "_IUPMOT_FRAMECONTAINER"); Widget title_label = (Widget)iupAttribGet(ih, "_IUPMOT_FRAMELABEL"); XtVaSetValues(child_manager, XmNbackgroundPixmap, pixmap, NULL); if (title_label) XtVaSetValues(title_label, XmNbackgroundPixmap, pixmap, NULL); return 1; } } return 0; }
static int winItemSetTitleImageAttrib(Ihandle* ih, const char* value) { HBITMAP hBitmap; /* check if the submenu handle was created in winSubmenuAddToParent */ if (ih->handle == (InativeHandle*)-1) return 1; hBitmap = iupImageGetImage(value, ih, 0, NULL); { MENUITEMINFO menuiteminfo; menuiteminfo.cbSize = sizeof(MENUITEMINFO); menuiteminfo.fMask = MIIM_BITMAP; menuiteminfo.hbmpItem = hBitmap; SetMenuItemInfo((HMENU)ih->handle, (UINT)ih->serial, FALSE, &menuiteminfo); } winMenuUpdateBar(ih); return 1; }
static HBITMAP winButtonGetBitmap(Ihandle* ih, UINT itemState, int *shift, int *w, int *h, int *bpp, HBITMAP *hMask) { char *name; int make_inactive = 0; HBITMAP hBitmap; *hMask = NULL; if (itemState & ODS_DISABLED) { name = iupAttribGet(ih, "IMINACTIVE"); if (!name) { name = iupAttribGet(ih, "IMAGE"); make_inactive = 1; } } else { name = iupAttribGet(ih, "IMPRESS"); if (itemState & ODS_SELECTED && name) { if (shift && !iupAttribGetBoolean(ih, "IMPRESSBORDER")) *shift = 0; } else name = iupAttribGet(ih, "IMAGE"); } hBitmap = iupImageGetImage(name, ih, make_inactive); /* must use this info, since image can be a driver image loaded from resources */ iupdrvImageGetInfo(hBitmap, w, h, bpp); if (*bpp == 8) *hMask = iupdrvImageCreateMask(IupGetHandle(name)); return hBitmap; }