; Module/File: Gadget_LoadedImageWoDecoder.pb ; Function: Add any system-supported loaded image to pb-Button, -images or -window without ImageDecoder - Linux (gtk2/gtk3) ; Author: Omi/Keya ; Date: Sep. 20, 2015 ; Version: 0.1 ; Target Compiler: PureBasic 5.22/5.31/5.40 ; Target OS: Linux: (X/K/L)ubuntu, Mint, 32/64, Ascii/Uni ; Link to topic: http://www.purebasic.fr/english/viewtopic.php?f=15&t=63192 ;-------------------------------------------------------------- EnableExplicit ; UsePNGImageDecoder() ; additional use of all system supported image types as svg, gif, ... ImportC "" gtk_button_set_image(*button.GtkButton, *image.GtkWidget) gtk_button_set_image_position(*button.GtkButton, position) gtk_button_set_label(*button.GtkButton, label.p-utf8) gtk_image_clear(*image.GtkWidget) gtk_button_set_alignment(*button.GtkButton, xalign.f, yalign.f) g_object_set(*object.GObject, property_name.p-utf8, *data, v= 0) gdk_pixbuf_loader_write(*loader, *buf, count, *error) gdk_pixbuf_loader_get_pixbuf(*loader) gdk_pixbuf_loader_new() gdk_pixbuf_loader_close(*loader, *error) g_signal_connect(*instance, detailed_signal.p-utf8, *c_handler, *pdata, destroy= 0, flags= 0) As "g_signal_connect_data" EndImport #Win_Main= 0 Enumeration #But1 #But2 #Dummy #ImG1 #BIG1 #Txt1 #LIG EndEnumeration Global.i gEvent, gQuit Global *gPixbuf Global *gImage1, *gImage2 Procedure GetGadgetPixbufLoaded(PicFile.s) Protected fSize= FileSize(PicFile), fId Protected loader = gdk_pixbuf_loader_new() Protected *pixbuf, *err.GError, *pMem If fSize > 0 fId= ReadFile(#PB_Any, PicFile) If fId *pMem = AllocateMemory(fSize + 16) If *pMem ReadData(fId, *pMem, fSize) CloseFile(fId) EndIf EndIf EndIf If *pMem *err= 0 : gdk_pixbuf_loader_write(loader, *pMem, fSize, @*err) If *err : Debug "Error: " + PeekS(*err\message, -1, #PB_UTF8) : EndIf *err= 0 : gdk_pixbuf_loader_close(loader, @*err); Important to get the things going, else: Do you know 'Sankt Nimmerleinstag'?! If *err : Debug "Error: " + PeekS(*err\message, -1, #PB_UTF8) : EndIf FreeMemory(*pMem) *pixbuf = gdk_pixbuf_loader_get_pixbuf(loader) EndIf ProcedureReturn *pixbuf EndProcedure ; ----- Procedure ButtonGadget_AddImage(Gadget, *Pic, Label.s, Alignment) gtk_button_set_image(GadgetID(Gadget), *Pic) gtk_button_set_label(GadgetID(Gadget), Label) gtk_button_set_image_position(GadgetID(Gadget), Alignment) EndProcedure Procedure ButtonImages_Activate(Show) g_object_set(gtk_settings_get_default_(), "gtk-button-images", Show, #Null) ;https://developer.gnome.org/gtk3/stable/GtkSettings.html EndProcedure gtk_window_set_default_icon_(GetGadgetPixbufLoaded("/usr/share/icons/default.kde4/48x48/apps/preferences-desktop-screensaver.png")); If gtk_window_set_default_icon_() is used, comment gtk_window_set_icon_() call below. If OpenWindow(#Win_Main, #PB_Ignore, #PB_Ignore, 500, 300, "Use loaded images w/o ImageDecoder", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) ;if icons are not shown, uncomment the following line ... ButtonImages_Activate(#True) ButtonGadget(#But1, 5, 5, 290, 30, " ", #PB_Button_Toggle) ButtonGadget(#But2, 5, 40, 290, 30, " ", #PB_Button_Toggle) TextGadget (#Txt1, 5, 80, 240, 30, "Look at window-/taskbar-/dock- icon") TextGadget (#PB_Any, 5, 115, 190, 22, "A PB ImageGadget()") TextGadget (#PB_Any, 5, 145, 190, 22, "A PB ButtonImageGadget()") ListIconGadget(#LIG, 5, 175, 490, 120, "Col1 with embedded pixbufs w/o ImageDecoder", 350, #PB_ListIcon_GridLines) AddGadgetColumn(#LIG, 1, "Col 2", 90) ;Further Gadgets with embedded, decoderless images are created here ... *gImage1= gtk_image_new_from_pixbuf_(GetGadgetPixbufLoaded("/usr/share/icons/default.kde4/16x16/actions/arrow-left.png")); Needs Ptr to free it ButtonGadget_AddImage(#But1, *gImage1, "1. ButtonGadget with left image", #GTK_POS_LEFT); add pixbuf to #But1 *gImage2= gtk_image_new_from_pixbuf_(GetGadgetPixbufLoaded("/usr/share/icons/default.kde4/16x16/actions/arrow-right.png")) ButtonGadget_AddImage(#But2, *gImage2, "2. ButtonGadget with right image", #GTK_POS_RIGHT); add pixbuf to #But2 ImageGadget(#ImG1, 200, 110, 16, 16, GetGadgetPixbufLoaded("/usr/share/icons/Humanity/mimes/16/svg.svg")) ButtonImageGadget(#BIG1, 200, 140, 28, 28, GetGadgetPixbufLoaded("/usr/share/icons/default.kde4/16x16/actions/arrow-up.png")) AddGadgetItem(#LIG, -1, "1-1" + #LF$ + "1-2", GetGadgetPixbufLoaded("/usr/share/icons/Humanity/mimes/16/svg.svg")) AddGadgetItem(#LIG, -1, "2-1" + #LF$ + "2-2", GetGadgetPixbufLoaded("/usr/share/icons/default.kde4/16x16/actions/arrow-up.png")) ; gtk_window_set_icon_(WindowID(#Win_Main), GetGadgetPixbuf(?Img3, ?Img4-?Img3)); if used, comment gtk_window_set_default_icon_() above Else End EndIf Repeat gEvent= WaitWindowEvent() If EventWindow() = #Win_Main Select gEvent Case #PB_Event_CloseWindow gQuit= #True EndSelect EndIf Until gQuit ;free global image-memory... gtk_image_clear(*gImage1) gtk_image_clear(*gImage2) ; IDE Options = PureBasic 5.44 LTS (Linux - x86) ; CursorPosition = 26 ; Folding = - ; EnableUnicode ; EnableXP