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