; Module/File: Button_ImageWithArrow_gtk3_.pb ; Function: Add a Image-Button + Arrow combi - Linux gtk3 ; Author: Omi ; Date: Sep. 16, 2017 ; Version: 0.1 ; Target Compiler: PureBasic 5.22/5.31/5.40/5.5/5.6 ; Target OS: Linux: (X/K/L)ubuntu, Mint, 32/64, Ascii/Uni ;-------------------------------------------------------------- ;Demo with action see: Button_ImageWithArrowFullDemo_gtk3.pb EnableExplicit ImportC "" g_signal_connect(*instance, detailed_signal.p-utf8, *c_handler, *data, destroy= 0, flags= 0) As "g_signal_connect_data" gtk_arrow_new(arrow_type, shadow_type) gtk_box_pack_start(*box.GtkBox, *child.GtkWidget, expand, fill, padding) gtk_button_new_from_icon_name(icon_name.p-utf8, size) gtk_widget_set_state_flags(*widget.GtkWidget, flags, clear) EndImport Enumeration GtkStateFlags #GTK_STATE_FLAG_NORMAL = 0 ; #GTK_STATE_FLAG_ACTIVE = 1 << 0 #GTK_STATE_FLAG_PRELIGHT = 1 << 1 ; #GTK_STATE_FLAG_SELECTED = 1 << 2 ; #GTK_STATE_FLAG_INSENSITIVE = 1 << 3 ; #GTK_STATE_FLAG_INCONSISTENT= 1 << 4 ; #GTK_STATE_FLAG_FOCUSED = 1 << 5 ; #GTK_STATE_FLAG_BACKDROP = 1 << 6 ; #GTK_STATE_FLAG_DIR_LTR = 1 << 7 ; #GTK_STATE_FLAG_DIR_RTL = 1 << 8 ; #GTK_STATE_FLAG_LINK = 1 << 9 ; #GTK_STATE_FLAG_VISITED = 1 << 10 ; #GTK_STATE_FLAG_CHECKED = 1 << 11 ; #GTK_STATE_FLAG_DROP_ACTIVE = 1 << 12 EndEnumeration ; Object constants #Win_Main= 0 #Txt1 = 0 Global.i gEvent, gQuit Global.GtkButton *Mainbutton1, *Arrowbutton1 ProcedureC Callback_ButtonWithArrowNotify(*widget.GtkWidget, *event.GdkEventCrossing, user_data) If *widget = *Mainbutton1 If user_data gtk_widget_set_state_flags(*Arrowbutton1, #GTK_STATE_FLAG_PRELIGHT, #False) Else gtk_widget_set_state_flags(*Arrowbutton1, #GTK_STATE_FLAG_NORMAL, #True) EndIf ElseIf *widget = *Arrowbutton1 If user_data gtk_widget_set_state_flags(*Mainbutton1, #GTK_STATE_FLAG_PRELIGHT, #False) Else gtk_widget_set_state_flags(*Mainbutton1, #GTK_STATE_FLAG_NORMAL, #True) EndIf EndIf EndProcedure Procedure.i CombiArrowImageButton(Gadget, x, y, w, h, IconName.s, ArrowType) Protected.i Container= ContainerGadget(Gadget, x, y, w, h, #PB_Container_BorderLess) Protected.GtkBox *box = gtk_hbox_new_(#False, 0) Protected.GtkArrow *arrow gtk_container_add_(GadgetID(Container), *box) *Mainbutton1= gtk_button_new_from_icon_name(IconName, #GTK_ICON_SIZE_MENU) gtk_box_pack_start (*box, *Mainbutton1, #False, #False, 0) *Arrowbutton1= gtk_button_new_() *arrow= gtk_arrow_new (ArrowType, #GTK_SHADOW_OUT) gtk_container_add_(*Arrowbutton1, *arrow) gtk_box_pack_start (*box, *Arrowbutton1, #False, #False, 0) gtk_widget_show_all_(GadgetID(Container)) gtk_button_set_focus_on_click_(*Mainbutton1, #False) gtk_button_set_focus_on_click_(*Arrowbutton1, #False) gtk_button_set_relief_(*Mainbutton1, #GTK_RELIEF_NONE); frame only on hover gtk_button_set_relief_(*Arrowbutton1, #GTK_RELIEF_NONE); frame only on hover g_signal_connect(*Mainbutton1, "enter-notify-event", @Callback_ButtonWithArrowNotify(), 1) g_signal_connect(*Mainbutton1, "leave-notify-event", @Callback_ButtonWithArrowNotify(), 0) g_signal_connect(*Arrowbutton1, "enter-notify-event", @Callback_ButtonWithArrowNotify(), 1) g_signal_connect(*Arrowbutton1, "leave-notify-event", @Callback_ButtonWithArrowNotify(), 0) CloseGadgetList() ProcedureReturn *Mainbutton1 EndProcedure If OpenWindow(#Win_Main, 300, 200, 400, 200, "Add ImageButton+Arrow combi gtk3", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) TextGadget(#Txt1, 5, 14, 210, 22, "ImageButton w. ArrowButton") CombiArrowImageButton(#PB_Any, 220, 10, 170, 40, "format-justify-left", #GTK_ARROW_DOWN) Repeat gEvent= WaitWindowEvent() Select gEvent Case #PB_Event_CloseWindow gQuit= #True EndSelect Until gQuit EndIf ; IDE Options = PureBasic 5.46 LTS Beta 1 (Linux - x86) ; CursorPosition = 9 ; Folding = - ; EnableUnicode ; EnableXP