Bassix GTK3 webkit browser Wiki
A very small gtk3-webkit browser that runs well on the raspberry pi3
Brought to you by:
big-bass
All of these bassix demos were tested on linux mint 20.1 64 bit xfce in 2021





compile with
bacon dialog.bac
** Example code:dialog.bac**
'--- demo dialogs and enter button change color
OPTION PARSE FALSE
PRAGMA INCLUDE <gtk-3.0/gtk/gtk.h>
PRAGMA OPTIONS `pkg-config --cflags gtk+-3.0`
PRAGMA LDFLAGS `pkg-config --libs gtk+-3.0`
PRAGMA OPTIONS -Wno-deprecated-declarations
'--- new signal handlers to simplify the callbacks
DEF FN CONNECT( widget, event,cb) = g_signal_connect_data(widget,event,cb, 0, 0, 0)
DEF FN CONNECT_DATA( widget, event,cb,t) = g_signal_connect_data(G_OBJECT (widget),event,G_CALLBACK (cb),(gpointer) t, 0, 0)
DEF FN NEW(widget,...) = g_object_new(widget, __VA_ARGS__,NULL)
DEF FN PLACE( widget, name,wid,high) = gtk_fixed_put(GTK_FIXED(widget), GTK_WIDGET(name),wid,high)
DEF FN ADD_FIXED( widget, name) = gtk_container_add(GTK_CONTAINER(widget), GTK_WIDGET(name))
DEF FN SET(widget, name, ...) = g_object_set(GTK_WIDGET(widget), name, __VA_ARGS__, NULL)
DEF FN GET( widget, name, ...) = g_object_get(widget, name, __VA_ARGS__, NULL)
DEF FN SHOW( widget) = gtk_widget_show_all(GTK_WIDGET(widget))
DEF FN HIDE( widget) = gtk_widget_hide(GTK_WIDGET(widget))
DEF FN INIT() = gtk_init(0,0)
DEF FN LABEL(t) = gtk_label_new(t)
DEF FN BUTTON_ADD(t) = gtk_button_new_with_label(t)
DEF FN TEXT_VIEW() = gtk_text_view_new ()
DEF FN FIXED() = gtk_fixed_new()
DEF FN DISPLAY() = gtk_main()
DEF FN ATTACH() = gtk_container_add()
DEF FN SCROLLED_WINDOW() = gtk_scrolled_window_new (NULL, NULL)
'--- May 27 2021
DEF FN CHANGE_BG(widget,cl) = gtk_widget_modify_bg(widget, GTK_STATE_PRELIGHT, &cl)
'---DIALOG May 27 2021 shortened the dialog code with macros
DEF FN DIALOG_WARNING(widget,mes) = gtk_message_dialog_new(GTK_WINDOW(widget), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, mes)
DEF FN DIALOG_INFO(widget,mes) = gtk_message_dialog_new(GTK_WINDOW(widget), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, mes)
DEF FN DIALOG_QUESTION(widget,mes) = gtk_message_dialog_new(GTK_WINDOW(widget), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_OK, mes)
DEF FN DIALOG_ERR(widget,mes) = gtk_message_dialog_new(GTK_WINDOW(widget), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, mes)
'---DIALOG May 27 2021
DEF FN DIALOG_TITLE(widget,mes) = gtk_window_set_title(GTK_WINDOW(widget), mes)
DEF FN DIALOG_RUN(widget) = gtk_dialog_run(GTK_DIALOG(widget))
DEF FN DESTROY(widget) = gtk_widget_destroy(widget)
ALIAS GTK_TYPE_WINDOW TO WINDOW
ALIAS GTK_TYPE_BUTTON TO BUTTON
ALIAS GTK_WIDGET TO WIDGET
ALIAS GTK_CONTAINER TO CONTAINER
DECLARE window,scrolled_win ,exit_btn TYPE GtkWidget*
DECLARE fixed TYPE GtkWidget*
DECLARE label TYPE GtkWidget*
DECLARE info ,err_dialog ,que ,warn TYPE GtkWidget*
DECLARE dialog TYPE GtkWidget*
' ------------------
SUB SHOW_INFO(GtkWidget *new_widget, gpointer window)
' ------------------
dialog = DIALOG_INFO(window,"Download Completed")
DIALOG_TITLE(dialog,"Information" )
DIALOG_RUN(dialog)
DESTROY(dialog)
END SUB
' ------------------
SUB SHOW_ERROR(GtkWidget *new_widget, gpointer window)
' ------------------
dialog = DIALOG_ERR(window,"Error loading file")
DIALOG_TITLE(dialog,"Error" )
DIALOG_RUN(dialog)
DESTROY(dialog)
END SUB
' ------------------
SUB SHOW_QUESTION(GtkWidget *new_widget, gpointer window)
' ------------------
dialog = DIALOG_QUESTION(window,"Are you sure to quit?")
DIALOG_TITLE(dialog,"Question" )
DIALOG_RUN(dialog)
DESTROY(dialog)
END SUB
' ------------------
SUB SHOW_WARN(GtkWidget *new_widget, gpointer window)
' ------------------
dialog = DIALOG_WARNING(window,"Unallowed operation")
DIALOG_TITLE(dialog,"Warning" )
DIALOG_RUN(dialog)
DESTROY(dialog)
END SUB
'--- this gives a color change when you enter into the exit_btn
' ------------------
SUB ENTER_BUTTON(GtkWidget *new_widget, gpointer data)
' ------------------
'--- this works together with CHANGE_BG(widget) macro
'--- so that we can use more than one color and keep the syntax simple
'--- here I used two different colors to show it is possible with RGBA
DECLARE col = {0, 27000, 30000, 35000} TYPE GdkColor
DECLARE col2 = {0, 17000, 30000, 35000} TYPE GdkColor
CHANGE_BG(exit_btn,col)
'---dialog buttons get a different color when you enter
CHANGE_BG(info,col2)
CHANGE_BG(err_dialog,col2)
CHANGE_BG(que,col2)
CHANGE_BG(warn,col2)
END SUB
' ------------------
SUB EXIT_PROG
' ------------------
END
END SUB
' ------------------
SUB EXIT_CLICKED()
' ------------------
END
END SUB
INIT
window = NEW(WINDOW, "icon-name","gtk-about")
SET(window, "title", "Dialogs and enter color change ", "border-width", 10, "default-width", 320, "default-height", 130)
SET(window, "resizable", FALSE)
fixed = FIXED()
ADD_FIXED(window, fixed)
exit_btn = BUTTON_ADD ("Exit")
SET(exit_btn, "width_request", 90 ,"height_request",30)
SET(exit_btn, "label","gtk-quit","use_stock",TRUE,"always_show_image",TRUE)
SET(exit_btn, "tooltip-text", "Close app")
'--- dialog messages
info = BUTTON_ADD("Info")
err_dialog = BUTTON_ADD("Error")
que = BUTTON_ADD("Question")
warn = BUTTON_ADD("Warning")
PLACE (fixed, info, 40,20)
PLACE (fixed, err_dialog, 100,20)
PLACE (fixed, que, 160,20)
PLACE (fixed, warn, 250,20)
PLACE (fixed, exit_btn, 310, 220)
CONNECT_DATA(window, "delete-event", EXIT_PROG,NULL)
CONNECT(exit_btn, "clicked" , EXIT_CLICKED )
'---change color on entry of the button
CONNECT_DATA(exit_btn, "enter", ENTER_BUTTON, NULL)
CONNECT_DATA(info, "enter", ENTER_BUTTON, NULL)
CONNECT_DATA(err_dialog, "enter", ENTER_BUTTON, NULL)
CONNECT_DATA(que, "enter", ENTER_BUTTON, NULL)
CONNECT_DATA(warn, "enter", ENTER_BUTTON, window)
'---dialog callbacks
CONNECT_DATA(info, "clicked", SHOW_INFO, window)
CONNECT_DATA(err_dialog, "clicked", SHOW_ERROR, window)
CONNECT_DATA(que, "clicked", SHOW_QUESTION, window)
CONNECT_DATA(warn, "clicked", SHOW_WARN, window)
SHOW(window)
DISPLAY