gtk_paradise 0.9.120 → 0.12.25

Sign up to get free protection for your applications and to get access to all the features.
Files changed (516) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +15184 -5758
  3. data/bin/genity +26 -0
  4. data/bin/gtk_editor +7 -0
  5. data/doc/README.gen +15128 -5736
  6. data/doc/todo/TODO_FOR_THE_GTK_EDITOR.md +16 -0
  7. data/doc/todo/TODO_FOR_THE_GTK_PARADISE_PROJECT.md +300 -221
  8. data/doc/todo/recurring_todo_tasks.md +4 -3
  9. data/gtk_paradise.gemspec +28 -17
  10. data/lib/gtk_paradise/app/app.rb +82 -51
  11. data/lib/gtk_paradise/app/{app_module.rb → app_module/app_module.rb} +1149 -921
  12. data/lib/gtk_paradise/base_module/base_module.rb +6992 -33
  13. data/lib/gtk_paradise/base_module/class_methods/class_methods.rb +0 -0
  14. data/lib/gtk_paradise/base_module/colours.rb +52 -8
  15. data/lib/gtk_paradise/base_module/css.rb +327 -238
  16. data/lib/gtk_paradise/base_module/experimental.rb +119 -0
  17. data/lib/gtk_paradise/base_module/html_support.rb +40 -15
  18. data/lib/gtk_paradise/base_module/these_methods_work_for_gtk3_and_gtk4.rb +171 -0
  19. data/lib/gtk_paradise/base_module/widgets/widgets.rb +69 -0
  20. data/lib/gtk_paradise/base_module_and_app_module/base_module_and_app_module.rb +1 -1
  21. data/lib/gtk_paradise/colours/colour_palette/material_design.rb +239 -0
  22. data/lib/gtk_paradise/colours/gtk_colour_constants.rb +8 -2
  23. data/lib/gtk_paradise/colours/parse.rb +8 -1
  24. data/lib/gtk_paradise/commandline/commandline.rb +20 -19
  25. data/lib/gtk_paradise/constants/constants.rb +237 -7
  26. data/lib/gtk_paradise/css_files/borders.css +81 -0
  27. data/lib/gtk_paradise/css_files/colours.css +332 -328
  28. data/lib/gtk_paradise/css_files/css_accordion.css +6 -2
  29. data/lib/gtk_paradise/css_files/hover_effects.css +588 -0
  30. data/lib/gtk_paradise/css_files/project.css +152 -188
  31. data/lib/gtk_paradise/drawing/README.md +3 -0
  32. data/lib/gtk_paradise/drawing/drawing.rb +68 -0
  33. data/lib/gtk_paradise/drawing/event.rb +73 -0
  34. data/lib/gtk_paradise/drawing/star.rb +96 -0
  35. data/lib/gtk_paradise/drawing/tool.rb +268 -0
  36. data/lib/gtk_paradise/drawing/turtle.rb +138 -0
  37. data/lib/gtk_paradise/emojis/emojis.rb +14 -13
  38. data/lib/gtk_paradise/examples/advanced/001_5x5_grid_example.rb +35 -50
  39. data/lib/gtk_paradise/examples/advanced/002_advanced_drag_and_drop_example.rb +21 -13
  40. data/lib/gtk_paradise/examples/advanced/003_html_like_support.rb +4 -25
  41. data/lib/gtk_paradise/examples/advanced/004_on_hover_example_on_gtk_entry.rb +4 -4
  42. data/lib/gtk_paradise/examples/advanced/005_csv_example.rb +6 -2
  43. data/lib/gtk_paradise/examples/advanced/007_label_responding_to_events_example.rb +1 -10
  44. data/lib/gtk_paradise/examples/advanced/008_options_example.rb +6 -3
  45. data/lib/gtk_paradise/examples/advanced/009_key_events.rb +1 -1
  46. data/lib/gtk_paradise/examples/advanced/010_extensive_text_view_example.rb +18 -17
  47. data/lib/gtk_paradise/examples/advanced/011_moving_blocks_example.rb +3 -3
  48. data/lib/gtk_paradise/examples/advanced/012_cell_data_sorting_example.rb +3 -4
  49. data/lib/gtk_paradise/examples/advanced/013_advanced_css_example.rb +86 -49
  50. data/lib/gtk_paradise/examples/advanced/014_popup_example.rb +9 -9
  51. data/lib/gtk_paradise/examples/advanced/015_advanced_button_example.rb +7 -19
  52. data/lib/gtk_paradise/examples/advanced/017_lean_CSS_example.rb +10 -13
  53. data/lib/gtk_paradise/examples/advanced/018_coloured_text_example.rb +7 -13
  54. data/lib/gtk_paradise/examples/advanced/019_gtk_entry_showing_the_cursor_position.rb +1 -1
  55. data/lib/gtk_paradise/examples/advanced/020_scale_this_image.rb +2 -14
  56. data/lib/gtk_paradise/examples/advanced/021_scroll_events_on_gtk_entry.rb +4 -0
  57. data/lib/gtk_paradise/examples/advanced/022_autogenerated_CSS_rounded_borders.rb +142 -0
  58. data/lib/gtk_paradise/examples/advanced/023_append_image_to_buffer.rb +145 -0
  59. data/lib/gtk_paradise/examples/advanced/024_notebook_with_tab_example.rb +204 -0
  60. data/lib/gtk_paradise/examples/advanced/025_showing_a_gold_caret_on_black_background.rb +144 -0
  61. data/lib/gtk_paradise/examples/advanced/026_status_bar_example.rb +153 -0
  62. data/lib/gtk_paradise/examples/advanced/027_customized_frame_example.rb +161 -0
  63. data/lib/gtk_paradise/examples/advanced/028_widgets_described_in_a_yaml_file.rb +240 -0
  64. data/lib/gtk_paradise/examples/advanced/029_entry_completion_example.rb +141 -0
  65. data/lib/gtk_paradise/examples/cairo/basic_cairo_shapes.rb +1 -1
  66. data/lib/gtk_paradise/examples/cairo/cairo_transparent_rectangles.rb +9 -5
  67. data/lib/gtk_paradise/examples/cairo/cairo_write_via_custom_font.rb +81 -0
  68. data/lib/gtk_paradise/examples/cairo/donut_shape.rb +19 -6
  69. data/lib/gtk_paradise/examples/cairo/ping_pong_game.rb +2 -3
  70. data/lib/gtk_paradise/examples/controller/README.md +4 -0
  71. data/lib/gtk_paradise/examples/controller/controller.rb +2 -0
  72. data/lib/gtk_paradise/examples/css/001_border_examples.rb +30 -13
  73. data/lib/gtk_paradise/examples/css/002_import_CSS_file.rb +10 -5
  74. data/lib/gtk_paradise/examples/drawing/001_example.rb +61 -0
  75. data/lib/gtk_paradise/examples/drawing/002_example.rb +51 -0
  76. data/lib/gtk_paradise/examples/drawing/003_example.rb +38 -0
  77. data/lib/gtk_paradise/examples/drawing/004_example.rb +36 -0
  78. data/lib/gtk_paradise/examples/drawing/005_example.rb +92 -0
  79. data/lib/gtk_paradise/examples/drawing/006_example.rb +58 -0
  80. data/lib/gtk_paradise/examples/drawing/007_example.rb +22 -0
  81. data/lib/gtk_paradise/examples/drawing/008_example.rb +43 -0
  82. data/lib/gtk_paradise/examples/drawing/009_example.rb +43 -0
  83. data/lib/gtk_paradise/examples/drawing/010_example.rb +25 -0
  84. data/lib/gtk_paradise/examples/drawing/011_example.rb +72 -0
  85. data/lib/gtk_paradise/examples/drawing/012_example.rb +59 -0
  86. data/lib/gtk_paradise/examples/drawing/README.md +3 -0
  87. data/lib/gtk_paradise/examples/drawing/moving_turtle_example.rb +43 -0
  88. data/lib/gtk_paradise/examples/gdk/001_gdk_screen_properties.rb +58 -0
  89. data/lib/gtk_paradise/examples/gdk_pixbuf/save_image_example.rb +1 -1
  90. data/lib/gtk_paradise/examples/gir_ffi/001_hello_world.rb +29 -0
  91. data/lib/gtk_paradise/examples/gir_ffi/002_upgraded_hello_world.rb +40 -0
  92. data/lib/gtk_paradise/examples/gir_ffi/003_gtk_application_example.rb +30 -0
  93. data/lib/gtk_paradise/examples/gir_ffi/004_treeview_example.rb +64 -0
  94. data/lib/gtk_paradise/examples/gir_ffi/005_complex_example.rb +104 -0
  95. data/lib/gtk_paradise/examples/gir_ffi/README.md +5 -0
  96. data/lib/gtk_paradise/examples/gir_ffi/advanced/001_advanced_treeview_example.rb +75 -0
  97. data/lib/gtk_paradise/examples/gir_ffi/advanced/README.md +2 -0
  98. data/lib/gtk_paradise/examples/glib/parse_glib_settings.rb +1 -1
  99. data/lib/gtk_paradise/examples/gtk2/008_list_store_example.rb +1 -1
  100. data/lib/gtk_paradise/examples/gtk3/{061_gtk_entry.rb → 001_gtk_entry.rb} +11 -6
  101. data/lib/gtk_paradise/examples/gtk3/{009_scrolled_window_example.rb → 002_scrolled_window_example.rb} +6 -4
  102. data/lib/gtk_paradise/examples/gtk3/{062_toggle_button_example.rb → 003_toggle_button_example.rb} +3 -2
  103. data/lib/gtk_paradise/examples/gtk3/{081_simple_dialog_example.rb → 004_simple_dialog_example.rb} +19 -12
  104. data/lib/gtk_paradise/examples/gtk3/005_spinner_example.rb +30 -10
  105. data/lib/gtk_paradise/examples/gtk3/006_text_view_example.rb +78 -0
  106. data/lib/gtk_paradise/examples/gtk3/{079_two_windows_example.rb → 007_two_windows_example.rb} +3 -1
  107. data/lib/gtk_paradise/examples/gtk3/008_search_bar_example.rb +91 -0
  108. data/lib/gtk_paradise/examples/gtk3/{002_simple_window.rb → 009_simple_window.rb} +14 -6
  109. data/lib/gtk_paradise/examples/gtk3/{025_switch_example.rb → 010_switch_example.rb} +6 -7
  110. data/lib/gtk_paradise/examples/gtk3/011_colour_chooser_example.rb +71 -0
  111. data/lib/gtk_paradise/examples/gtk3/012_show_the_xid_example.rb +18 -0
  112. data/lib/gtk_paradise/examples/gtk3/013_grab_pointer_forcefully.rb +31 -0
  113. data/lib/gtk_paradise/examples/gtk3/{083_bottom_left_placement.rb → 015_bottom_left_placement.rb} +3 -1
  114. data/lib/gtk_paradise/examples/gtk3/{082_scrolling_example.rb → 016_scrolling_example.rb} +2 -2
  115. data/lib/gtk_paradise/examples/gtk3/{080_extensive_markup_example.rb → 017_extensive_markup_example.rb} +8 -7
  116. data/lib/gtk_paradise/examples/gtk3/{078_message_dialog_example.rb → 018_message_dialog_example.rb} +3 -5
  117. data/lib/gtk_paradise/examples/gtk3/{075_tiny_button_via_css.rb → 021_tiny_button_via_css.rb} +1 -0
  118. data/lib/gtk_paradise/examples/gtk3/{001_font_related_information.rb → 022_font_related_information.rb} +1 -1
  119. data/lib/gtk_paradise/examples/gtk3/023_sorted_tree.rb +166 -0
  120. data/lib/gtk_paradise/examples/gtk3/{004_small_paned_example.rb → 024_small_paned_example.rb} +4 -3
  121. data/lib/gtk_paradise/examples/gtk3/{007_progress_bar_example.rb → 026_progress_bar_example.rb} +1 -2
  122. data/lib/gtk_paradise/examples/gtk3/{008_menubar_example.rb → 027_menubar_example.rb} +1 -1
  123. data/lib/gtk_paradise/examples/gtk3/{010_paned_widget_example.rb → 028_paned_widget_example.rb} +31 -1
  124. data/lib/gtk_paradise/examples/gtk3/{011_sockets.rb → 029_sockets.rb} +1 -0
  125. data/lib/gtk_paradise/examples/gtk3/{012_notebook_example.rb → 030_notebook_example.rb} +12 -4
  126. data/lib/gtk_paradise/examples/gtk3/{013_icon_theme_example.rb → 031_icon_theme_example.rb} +6 -0
  127. data/lib/gtk_paradise/examples/gtk3/{014_switcher_window.rb → 032_switcher_window.rb} +16 -10
  128. data/lib/gtk_paradise/examples/gtk3/{016_hello_world_in_gtk3_and_bold_font.rb → 034_hello_world_in_gtk3_and_bold_font.rb} +1 -1
  129. data/lib/gtk_paradise/examples/gtk3/{017_grid_example.rb → 035_grid_example.rb} +5 -1
  130. data/lib/gtk_paradise/examples/gtk3/{018_buttons_showcasing_the_relief.rb → 036_buttons_showcasing_the_relief.rb} +1 -0
  131. data/lib/gtk_paradise/examples/gtk3/{019_text_buffer_example.rb → 037_text_buffer_example.rb} +12 -10
  132. data/lib/gtk_paradise/examples/gtk3/{020_radio_button_window.rb → 038_radio_button_window.rb} +9 -9
  133. data/lib/gtk_paradise/examples/gtk3/{022_popup_example.rb → 040_popup_example.rb} +2 -2
  134. data/lib/gtk_paradise/examples/gtk3/{023_horizontal_and_vertical_scale.rb → 041_horizontal_and_vertical_scale.rb} +1 -1
  135. data/lib/gtk_paradise/examples/gtk3/{026_hover_button_example_via_css.rb → 043_hover_button_example_via_css.rb} +3 -1
  136. data/lib/gtk_paradise/examples/gtk3/{027_spin_button_example.rb → 044_spin_button_example.rb} +4 -3
  137. data/lib/gtk_paradise/examples/gtk3/{028_radio_menu_item_example.rb → 045_radio_menu_item_example.rb} +4 -1
  138. data/lib/gtk_paradise/examples/gtk3/{029_gtk_dialog_sample.rb → 046_gtk_dialog_sample.rb} +4 -1
  139. data/lib/gtk_paradise/examples/gtk3/{030_draw_rectangles.rb → 047_draw_rectangles.rb} +1 -1
  140. data/lib/gtk_paradise/examples/gtk3/{031_colour_choose_button.rb → 048_colour_choose_button.rb} +17 -3
  141. data/lib/gtk_paradise/examples/gtk3/{032_drag_and_drop_example.rb → 049_drag_and_drop_example.rb} +13 -5
  142. data/lib/gtk_paradise/examples/gtk3/{033_cell_renderer_pixbuf_example.rb → 050_cell_renderer_pixbuf_example.rb} +17 -6
  143. data/lib/gtk_paradise/examples/gtk3/051_combo_box_example.rb +84 -0
  144. data/lib/gtk_paradise/examples/gtk3/{035_notebook_css_example.rb → 052_notebook_css_example.rb} +3 -2
  145. data/lib/gtk_paradise/examples/gtk3/{037_css_example_of_a_button_changing_the_background_colour_on_click_event.rb → 053_css_example_of_a_button_changing_the_background_colour_on_click_event.rb} +14 -4
  146. data/lib/gtk_paradise/examples/gtk3/{036_revealer_example.rb → 053_revealer_example.rb} +10 -6
  147. data/lib/gtk_paradise/examples/gtk3/{038_ten_labels_in_a_vertical_box_example.rb → 054_ten_labels_in_a_vertical_box_example.rb} +1 -1
  148. data/lib/gtk_paradise/examples/gtk3/{039_threads_example.rb → 055_threads_example.rb} +1 -1
  149. data/lib/gtk_paradise/examples/gtk3/{042_colourized_button_example.rb → 058_colourized_button_example.rb} +1 -2
  150. data/lib/gtk_paradise/examples/gtk3/{043_form_example.rb → 059_form_example.rb} +1 -3
  151. data/lib/gtk_paradise/examples/gtk3/{044_check_button.rb → 060_check_button.rb} +4 -2
  152. data/lib/gtk_paradise/examples/gtk3/{046_event_box_example.rb → 062_event_box_example.rb} +13 -2
  153. data/lib/gtk_paradise/examples/gtk3/{047_examples_with_css.rb → 063_examples_with_css.rb} +91 -3
  154. data/lib/gtk_paradise/examples/gtk3/{048_accel_group_example.rb → 064_accel_group_example.rb} +1 -0
  155. data/lib/gtk_paradise/examples/gtk3/{049_change_the_application_theme.rb → 065_change_the_application_theme.rb} +4 -2
  156. data/lib/gtk_paradise/examples/gtk3/{050_header_bar_example.rb → 066_header_bar_example.rb} +3 -0
  157. data/lib/gtk_paradise/examples/gtk3/{051_gtk_label_example.rb → 067_gtk_label_example.rb} +3 -2
  158. data/lib/gtk_paradise/examples/gtk3/{052_popover_example.rb → 068_popover_example.rb} +2 -2
  159. data/lib/gtk_paradise/examples/gtk3/{053_entry_completion.rb → 069_entry_completion.rb} +2 -0
  160. data/lib/gtk_paradise/examples/gtk3/{055_button_demo.rb → 071_button_demo.rb} +6 -5
  161. data/lib/gtk_paradise/examples/gtk3/{056_text_iterator_example.rb → 072_text_iterator_example.rb} +30 -21
  162. data/lib/gtk_paradise/examples/gtk3/{057_image_example.rb → 073_image_example.rb} +1 -1
  163. data/lib/gtk_paradise/examples/gtk3/{058_frame_example.rb → 074_frame_example.rb} +1 -1
  164. data/lib/gtk_paradise/examples/gtk3/{059_gtk_expander.rb → 075_gtk_expander.rb} +2 -0
  165. data/lib/gtk_paradise/examples/gtk3/{060_ten_vboxes_example.rb → 076_ten_vboxes_example.rb} +21 -3
  166. data/lib/gtk_paradise/examples/gtk3/{063_button_box_example.rb → 077_button_box_example.rb} +11 -1
  167. data/lib/gtk_paradise/examples/gtk3/{064_tree_view_column_example.rb → 078_tree_view_column_example.rb} +2 -1
  168. data/lib/gtk_paradise/examples/gtk3/{065_tooltips_example.rb → 079_tooltips_example.rb} +14 -5
  169. data/lib/gtk_paradise/examples/gtk3/{066_vertical_boxes.rb → 080_vertical_boxes.rb} +2 -1
  170. data/lib/gtk_paradise/examples/gtk3/{067_vbox_with_spacing_and_border_width.rb → 081_vbox_with_spacing_and_border_width.rb} +2 -1
  171. data/lib/gtk_paradise/examples/gtk3/{069_file_chooser_dialog.rb → 082_file_chooser_dialog.rb} +3 -0
  172. data/lib/gtk_paradise/examples/gtk3/{070_bindings.rb → 083_bindings.rb} +15 -8
  173. data/lib/gtk_paradise/examples/gtk3/{072_recent_chooser_dialog.rb → 084_recent_chooser_dialog.rb} +2 -2
  174. data/lib/gtk_paradise/examples/gtk3/{073_showcase_the_cursors.rb → 085_showcase_the_cursors.rb} +30 -5
  175. data/lib/gtk_paradise/examples/gtk3/{074_app_chooser_button_example.rb → 086_app_chooser_button_example.rb} +1 -0
  176. data/lib/gtk_paradise/examples/gtk3/087_calendar_example.rb +41 -0
  177. data/lib/gtk_paradise/examples/gtk4/001_gtk_entry.rb +88 -0
  178. data/lib/gtk_paradise/examples/gtk4/002_scrolled_window_example.rb +62 -0
  179. data/lib/gtk_paradise/examples/gtk4/003_toggle_button_example.rb +23 -0
  180. data/lib/gtk_paradise/examples/gtk4/004_simple_dialog_example.rb +41 -0
  181. data/lib/gtk_paradise/examples/gtk4/005_spinner_example.rb +64 -0
  182. data/lib/gtk_paradise/examples/gtk4/006_text_view_example.rb +77 -0
  183. data/lib/gtk_paradise/examples/gtk4/007_two_windows_example.rb +55 -0
  184. data/lib/gtk_paradise/examples/gtk4/008_search_bar_example.rb +88 -0
  185. data/lib/gtk_paradise/examples/gtk4/009_text_view_example.rb +30 -0
  186. data/lib/gtk_paradise/examples/gtk4/010_switch_example.rb +52 -0
  187. data/lib/gtk_paradise/examples/gtk4/027_menubar_example.rb +35 -0
  188. data/lib/gtk_paradise/examples/gtk4/030_notebook_example.rb +83 -0
  189. data/lib/gtk_paradise/examples/gtk4/074_frame_example.rb +105 -0
  190. data/lib/gtk_paradise/examples/gtk4/076_ten_vboxes_example.rb +35 -0
  191. data/lib/gtk_paradise/examples/gtk4/087_calendar_example.rb +47 -0
  192. data/lib/gtk_paradise/examples/gtk4/100_changed_events_example.rb +77 -0
  193. data/lib/gtk_paradise/examples/gtk4/101_actionbar_example.rb +55 -0
  194. data/lib/gtk_paradise/examples/gtk4/102_picture_example.rb +35 -0
  195. data/lib/gtk_paradise/examples/gtk4/103_drawing_example.rb +101 -0
  196. data/lib/gtk_paradise/examples/gtk4/104_quit_on_keypress_event.rb +64 -0
  197. data/lib/gtk_paradise/examples/pango/pango_power.rb +1 -0
  198. data/lib/gtk_paradise/experimental/experimental.rb +3 -11
  199. data/lib/gtk_paradise/experimental/experimental_for_gtk4.rb +92 -0
  200. data/lib/gtk_paradise/fonts/fonts.rb +5 -1
  201. data/lib/gtk_paradise/gdk/cursor.rb +2 -2
  202. data/lib/gtk_paradise/{base_module/e.rb → gdk/event_crossing.rb} +6 -8
  203. data/lib/gtk_paradise/gdk/gdk.rb +1 -1
  204. data/lib/gtk_paradise/gtk_classes/about.rb +11 -2
  205. data/lib/gtk_paradise/gtk_classes/about_dialog.rb +6 -2
  206. data/lib/gtk_paradise/gtk_classes/alignment.rb +4 -1
  207. data/lib/gtk_paradise/gtk_classes/application.rb +94 -4
  208. data/lib/gtk_paradise/gtk_classes/application_window.rb +25 -0
  209. data/lib/gtk_paradise/gtk_classes/box.rb +131 -277
  210. data/lib/gtk_paradise/gtk_classes/button.rb +61 -40
  211. data/lib/gtk_paradise/gtk_classes/button_box.rb +9 -1
  212. data/lib/gtk_paradise/gtk_classes/cell_renderer_text.rb +5 -3
  213. data/lib/gtk_paradise/gtk_classes/check_button.rb +48 -12
  214. data/lib/gtk_paradise/gtk_classes/combo_box.rb +22 -15
  215. data/lib/gtk_paradise/gtk_classes/combo_box_entry.rb +17 -11
  216. data/lib/gtk_paradise/gtk_classes/combo_box_text.rb +30 -25
  217. data/lib/gtk_paradise/gtk_classes/dialog.rb +2 -2
  218. data/lib/gtk_paradise/gtk_classes/entry.rb +281 -126
  219. data/lib/gtk_paradise/gtk_classes/entry_completion.rb +15 -8
  220. data/lib/gtk_paradise/gtk_classes/event_box.rb +21 -2
  221. data/lib/gtk_paradise/gtk_classes/event_button.rb +1 -1
  222. data/lib/gtk_paradise/gtk_classes/expander.rb +8 -1
  223. data/lib/gtk_paradise/gtk_classes/file_chooser_dialog.rb +1 -1
  224. data/lib/gtk_paradise/gtk_classes/file_filter.rb +4 -2
  225. data/lib/gtk_paradise/gtk_classes/file_selection.rb +4 -3
  226. data/lib/gtk_paradise/gtk_classes/frame.rb +25 -5
  227. data/lib/gtk_paradise/gtk_classes/grid.rb +343 -153
  228. data/lib/gtk_paradise/gtk_classes/hbox.rb +145 -0
  229. data/lib/gtk_paradise/gtk_classes/header_bar.rb +20 -8
  230. data/lib/gtk_paradise/gtk_classes/image.rb +5 -3
  231. data/lib/gtk_paradise/gtk_classes/label.rb +201 -145
  232. data/lib/gtk_paradise/gtk_classes/list_store.rb +13 -0
  233. data/lib/gtk_paradise/gtk_classes/menu.rb +7 -3
  234. data/lib/gtk_paradise/gtk_classes/menu_bar.rb +1 -1
  235. data/lib/gtk_paradise/gtk_classes/menu_item.rb +1 -1
  236. data/lib/gtk_paradise/gtk_classes/notebook.rb +173 -72
  237. data/lib/gtk_paradise/gtk_classes/paned.rb +52 -0
  238. data/lib/gtk_paradise/gtk_classes/radio_menu_item.rb +26 -1
  239. data/lib/gtk_paradise/gtk_classes/scale_button.rb +16 -1
  240. data/lib/gtk_paradise/gtk_classes/scrolled_window.rb +16 -6
  241. data/lib/gtk_paradise/gtk_classes/search_bar.rb +1 -1
  242. data/lib/gtk_paradise/gtk_classes/source_buffer.rb +4 -5
  243. data/lib/gtk_paradise/gtk_classes/spin_button.rb +35 -13
  244. data/lib/gtk_paradise/gtk_classes/spinner.rb +32 -2
  245. data/lib/gtk_paradise/gtk_classes/status_icon.rb +2 -0
  246. data/lib/gtk_paradise/gtk_classes/statusbar.rb +1 -0
  247. data/lib/gtk_paradise/gtk_classes/style_context.rb +71 -0
  248. data/lib/gtk_paradise/gtk_classes/text_buffer.rb +52 -19
  249. data/lib/gtk_paradise/gtk_classes/text_view.rb +54 -11
  250. data/lib/gtk_paradise/gtk_classes/toggle_button.rb +3 -0
  251. data/lib/gtk_paradise/gtk_classes/toolbar.rb +2 -2
  252. data/lib/gtk_paradise/gtk_classes/tree_iter.rb +1 -1
  253. data/lib/gtk_paradise/gtk_classes/tree_view.rb +101 -70
  254. data/lib/gtk_paradise/gtk_classes/tree_view_column.rb +2 -1
  255. data/lib/gtk_paradise/gtk_classes/vbox.rb +71 -10
  256. data/lib/gtk_paradise/gtk_classes/vscale.rb +2 -2
  257. data/lib/gtk_paradise/gtk_classes/widget.rb +1158 -646
  258. data/lib/gtk_paradise/gtk_classes/window.rb +37 -2
  259. data/lib/gtk_paradise/hello_world/README.md +1 -1
  260. data/lib/gtk_paradise/hello_world/hello_world_gtk4.rb +20 -0
  261. data/lib/gtk_paradise/images/icons/close_image.png +0 -0
  262. data/lib/gtk_paradise/images/icons/closed.png +0 -0
  263. data/lib/gtk_paradise/images/icons/directory.png +0 -0
  264. data/lib/gtk_paradise/images/icons/icon_cool.gif +0 -0
  265. data/lib/gtk_paradise/images/icons/icon_lol.gif +0 -0
  266. data/lib/gtk_paradise/images/icons/icon_smile.gif +0 -0
  267. data/lib/gtk_paradise/images/icons/opened.png +0 -0
  268. data/lib/gtk_paradise/images/internal/gtk_label_example.png +0 -0
  269. data/lib/gtk_paradise/images/internal/gtk_tree_view1.png +0 -0
  270. data/lib/gtk_paradise/images/misc/minus_symbol.png +0 -0
  271. data/lib/gtk_paradise/images/misc/plus_symbol.png +0 -0
  272. data/lib/gtk_paradise/images/misc/wiki_logo.png +0 -0
  273. data/lib/gtk_paradise/images/small/GREEN_CIRCLE.png +0 -0
  274. data/lib/gtk_paradise/images/small/README.md +2 -0
  275. data/lib/gtk_paradise/images/small/RED_CIRCLE.png +0 -0
  276. data/lib/gtk_paradise/pango/{pango_fonts.rb → fonts.rb} +2 -2
  277. data/lib/gtk_paradise/pango/{pango.rb → layout.rb} +1 -1
  278. data/lib/gtk_paradise/pango/pango_renderer.rb +9 -2
  279. data/lib/gtk_paradise/project/project.rb +4 -3
  280. data/lib/gtk_paradise/prototypes/README.md +8 -0
  281. data/lib/gtk_paradise/prototypes/gtk3_standalone.rb +8 -21
  282. data/lib/gtk_paradise/prototypes/gtk4_standalone.rb +135 -0
  283. data/lib/gtk_paradise/prototypes/shared_code.rb +9 -17
  284. data/lib/gtk_paradise/prototypes/unified_gtk_prototype.rb +179 -0
  285. data/lib/gtk_paradise/require_gir_ffi_gtk3.rb +3 -0
  286. data/lib/gtk_paradise/require_gtk4.rb +7 -0
  287. data/lib/gtk_paradise/requires/require_base_module.rb +7 -0
  288. data/lib/gtk_paradise/requires/require_files_irrespective_of_the_gtk_version_at_hand.rb +26 -16
  289. data/lib/gtk_paradise/requires/require_gtk2.rb +6 -4
  290. data/lib/gtk_paradise/requires/{require_gtk2_or_gtk3.rb → require_gtk2_or_gtk3_or_gtk4.rb} +33 -12
  291. data/lib/gtk_paradise/requires/require_gtk3.rb +5 -20
  292. data/lib/gtk_paradise/requires/require_gtk4.rb +13 -0
  293. data/lib/gtk_paradise/requires/require_gtk_runner.rb +1 -0
  294. data/lib/gtk_paradise/requires/require_the_base_module_and_gtk_run.rb +1 -1
  295. data/lib/gtk_paradise/requires/require_the_base_module_the_app_module_and_the_toplevel_methods.rb +9 -0
  296. data/lib/gtk_paradise/requires/require_the_classes_files_for_gtk4.rb +11 -0
  297. data/lib/gtk_paradise/requires/require_the_colours_gem.rb +9 -0
  298. data/lib/gtk_paradise/requires/require_the_default_gtk_version.rb +4 -2
  299. data/lib/gtk_paradise/requires/require_the_toplevel_methods.rb +1 -1
  300. data/lib/gtk_paradise/run.rb +1 -0
  301. data/lib/gtk_paradise/run_this_widget/run_this_widget.rb +7 -3
  302. data/lib/gtk_paradise/threads/threads.rb +15 -10
  303. data/lib/gtk_paradise/toplevel_methods/css.rb +183 -35
  304. data/lib/gtk_paradise/toplevel_methods/cursor.rb +17 -3
  305. data/lib/gtk_paradise/toplevel_methods/determine_which_gtk_version_is_in_use.rb +90 -8
  306. data/lib/gtk_paradise/toplevel_methods/events.rb +6 -0
  307. data/lib/gtk_paradise/toplevel_methods/keys.rb +1 -1
  308. data/lib/gtk_paradise/toplevel_methods/screen_resolution.rb +32 -5
  309. data/lib/gtk_paradise/toplevel_methods/text_buffer_tags.rb +13 -4
  310. data/lib/gtk_paradise/toplevel_methods/tokenizer.rb +18 -3
  311. data/lib/gtk_paradise/toplevel_methods/{misc.rb → toplevel_methods.rb} +810 -258
  312. data/lib/gtk_paradise/utility_scripts/commandline_to_automatic_gui.rb +244 -0
  313. data/lib/gtk_paradise/version/version.rb +2 -2
  314. data/lib/gtk_paradise/widgets/gtk2/cat_merge.rb +2 -6
  315. data/lib/gtk_paradise/widgets/gtk2/cell_renderer_progress_example.rb +0 -5
  316. data/lib/gtk_paradise/widgets/gtk2/foto_lister.rb +4 -8
  317. data/lib/gtk_paradise/widgets/gtk2/gidnight_commander/gidnight_commander.rb +3 -3
  318. data/lib/gtk_paradise/widgets/gtk2/hbox_example.rb +1 -5
  319. data/lib/gtk_paradise/widgets/gtk2/multiple_select_in_a_tree_view_widget.rb +2 -6
  320. data/lib/gtk_paradise/widgets/gtk2/paned_example.rb +1 -1
  321. data/lib/gtk_paradise/widgets/gtk2/slider_changing_button.rb +2 -6
  322. data/lib/gtk_paradise/widgets/gtk2/status_icon_example.rb +2 -6
  323. data/lib/gtk_paradise/widgets/gtk2/table2.rb +2 -6
  324. data/lib/gtk_paradise/widgets/gtk2/toolbar_example.rb +2 -6
  325. data/lib/gtk_paradise/widgets/{version_agnostic → gtk3/audio_button}/audio_button.rb +19 -30
  326. data/lib/gtk_paradise/widgets/gtk3/burn_this_iso_file/burn_this_iso_file.rb +2 -6
  327. data/lib/gtk_paradise/widgets/{version_agnostic → gtk3/button_open_remote_webpage}/button_open_remote_webpage.rb +105 -50
  328. data/lib/gtk_paradise/widgets/gtk3/button_with_border/button_with_border.rb +155 -0
  329. data/lib/gtk_paradise/widgets/{version_agnostic → gtk3/button_xorg_buffer}/button_xorg_buffer.rb +76 -18
  330. data/lib/gtk_paradise/widgets/gtk3/calculator/calculator.rb +58 -336
  331. data/lib/gtk_paradise/widgets/gtk3/checkbox_image/checkbox_image.rb +3 -7
  332. data/lib/gtk_paradise/widgets/{version_agnostic → gtk3/coloured_button}/coloured_button.rb +94 -24
  333. data/lib/gtk_paradise/widgets/gtk3/coloured_square/coloured_square.rb +2 -6
  334. data/lib/gtk_paradise/widgets/gtk3/coloured_unit/coloured_unit.rb +151 -0
  335. data/lib/gtk_paradise/widgets/gtk3/cpu_widget/cpu_widget.rb +2 -6
  336. data/lib/gtk_paradise/widgets/gtk3/directory_content_widget/directory_content_widget.rb +937 -7
  337. data/lib/gtk_paradise/widgets/gtk3/editor/connect_skeleton.rb +34 -39
  338. data/lib/gtk_paradise/widgets/gtk3/editor/create.rb +67 -42
  339. data/lib/gtk_paradise/widgets/gtk3/editor/editor.rb +257 -274
  340. data/lib/gtk_paradise/widgets/gtk3/editor/internal_widgets/goto_line_widget.rb +53 -69
  341. data/lib/gtk_paradise/widgets/gtk3/editor/misc.rb +359 -112
  342. data/lib/gtk_paradise/widgets/gtk3/files_in_directory/files_in_directory.rb +2 -7
  343. data/lib/gtk_paradise/widgets/gtk3/flexible_vte/flexible_vte.rb +9 -26
  344. data/lib/gtk_paradise/widgets/gtk3/font_size_widget/action_button.rb +1 -5
  345. data/lib/gtk_paradise/widgets/gtk3/font_size_widget/font_size_widget.rb +2 -6
  346. data/lib/gtk_paradise/widgets/gtk3/four_components_entry/four_components_entry.rb +353 -0
  347. data/lib/gtk_paradise/widgets/{gtk2 → gtk3}/gidnight_commander/gidnight_commander.config +1 -2
  348. data/lib/gtk_paradise/widgets/gtk3/gidnight_commander/gidnight_commander.rb +165 -125
  349. data/lib/gtk_paradise/widgets/gtk3/image_close_on_click_action/image_close_on_click_action.rb +34 -2
  350. data/lib/gtk_paradise/widgets/gtk3/image_viewer/image_viewer.rb +23 -26
  351. data/lib/gtk_paradise/widgets/gtk3/information_about_the_harddisc/harddisc_information.rb +161 -0
  352. data/lib/gtk_paradise/widgets/gtk3/insert_character/insert_character.rb +24 -29
  353. data/lib/gtk_paradise/widgets/gtk3/keyboard/keyboard.rb +378 -0
  354. data/lib/gtk_paradise/widgets/gtk3/linux_users/linux_users.rb +35 -38
  355. data/lib/gtk_paradise/widgets/gtk3/my_calendar/my_calendar.rb +330 -7
  356. data/lib/gtk_paradise/widgets/gtk3/my_image_menu_item/my_image_menu_item.rb +179 -0
  357. data/lib/gtk_paradise/widgets/gtk3/non_numbers_only/non_numbers_only.rb +136 -0
  358. data/lib/gtk_paradise/widgets/gtk3/note_window/note_window.rb +199 -0
  359. data/lib/gtk_paradise/widgets/gtk3/notebook_controller/notebook_controller.rb +325 -7
  360. data/lib/gtk_paradise/widgets/gtk3/notebook_tab_with_icon/notebook_tab_with_icon.rb +469 -7
  361. data/lib/gtk_paradise/widgets/gtk3/notebook_with_storage_functionality/notebook_with_storage_functionality.rb +180 -0
  362. data/lib/gtk_paradise/widgets/gtk3/numbered_lines/numbered_lines.rb +241 -107
  363. data/lib/gtk_paradise/widgets/{version_agnostic → gtk3/numbers_only}/numbers_only.rb +15 -3
  364. data/lib/gtk_paradise/widgets/gtk3/ping_widget/ping_widget.rb +491 -8
  365. data/lib/gtk_paradise/widgets/gtk3/regex_matcher/regex_matcher.rb +363 -47
  366. data/lib/gtk_paradise/widgets/gtk3/rename_widget/rename_widget.rb +8 -25
  367. data/lib/gtk_paradise/widgets/gtk3/show_which_key_was_pressed/show_which_key_was_pressed.rb +190 -0
  368. data/lib/gtk_paradise/widgets/gtk3/stopwatch/stopwatch.rb +318 -7
  369. data/lib/gtk_paradise/widgets/gtk3/sys_message/sys_message.rb +219 -7
  370. data/lib/gtk_paradise/widgets/gtk3/system_information/system_information.rb +58 -34
  371. data/lib/gtk_paradise/widgets/gtk3/tabble/admin_panel.rb +2 -6
  372. data/lib/gtk_paradise/widgets/gtk3/tabble/image_and_button.rb +3 -7
  373. data/lib/gtk_paradise/widgets/gtk3/tabble/tabble.rb +2 -6
  374. data/lib/gtk_paradise/widgets/gtk3/type_trainer/type_trainer.rb +182 -0
  375. data/lib/gtk_paradise/widgets/gtk3/view_webpage/view_webpage.rb +2 -6
  376. data/lib/gtk_paradise/widgets/gtk3/widget_switcher/widget_switcher.rb +240 -0
  377. data/lib/gtk_paradise/widgets/gtk3/wiki/README.md +4 -0
  378. data/lib/gtk_paradise/widgets/gtk3/wiki/wiki.rb +445 -0
  379. data/lib/gtk_paradise/widgets/gtk4/ping_widget/ping_widget.rb +4 -0
  380. data/lib/gtk_paradise/widgets/gtk4/show_icon_theme/show_icon_theme.rb +134 -0
  381. data/lib/gtk_paradise/widgets/gtk4/sys_message/sys_message.rb +269 -0
  382. data/lib/gtk_paradise/widgets/{gtk2/sys_message/sys_message.rb → gtk4/xpm_loader/xpm_loader.rb} +13 -10
  383. data/lib/gtk_paradise/widgets/shared_code/browser/browser_module.rb +4 -16
  384. data/lib/gtk_paradise/widgets/shared_code/calculator/calculator_module.rb +581 -0
  385. data/lib/gtk_paradise/widgets/shared_code/cdripper/cdripper_module.rb +1 -1
  386. data/lib/gtk_paradise/widgets/shared_code/colour_filled_widget/colour_filled_widget_module.rb +25 -28
  387. data/lib/gtk_paradise/widgets/shared_code/colour_palette/colour_palette_module.rb +2 -2
  388. data/lib/gtk_paradise/widgets/shared_code/contacts/contacts_module.rb +62 -64
  389. data/lib/gtk_paradise/widgets/shared_code/file_viewer/file_viewer_module.rb +3 -3
  390. data/lib/gtk_paradise/widgets/shared_code/flip_state_widget/flip_state_widget_module.rb +3 -19
  391. data/lib/gtk_paradise/widgets/shared_code/information_about_the_harddisc/harddisc_information.rb +0 -155
  392. data/lib/gtk_paradise/widgets/shared_code/information_about_the_harddisc/information_about_the_harddisc_module.rb +0 -444
  393. data/lib/gtk_paradise/widgets/shared_code/lsmod/lsmod_module.rb +22 -26
  394. data/lib/gtk_paradise/widgets/shared_code/lspci/lspci_module.rb +24 -36
  395. data/lib/gtk_paradise/widgets/shared_code/maximize_button/maximize_button_module.rb +2 -7
  396. data/lib/gtk_paradise/widgets/shared_code/mini_clock/mini_clock_module.rb +133 -76
  397. data/lib/gtk_paradise/widgets/shared_code/my_calendar/my_calendar_module.rb +0 -327
  398. data/lib/gtk_paradise/widgets/shared_code/pid_displayer/pid_displayer_module.rb +53 -41
  399. data/lib/gtk_paradise/widgets/shared_code/random_image/random_image_module.rb +46 -29
  400. data/lib/gtk_paradise/widgets/shared_code/select_file/select_file_module.rb +1 -1
  401. data/lib/gtk_paradise/widgets/shared_code/show_icon_theme/show_icon_theme_module.rb +59 -46
  402. data/lib/gtk_paradise/widgets/shared_code/simple_clock/simple_clock_module.rb +1 -12
  403. data/lib/gtk_paradise/widgets/shared_code/stopwatch/stopwatch_module.rb +0 -341
  404. data/lib/gtk_paradise/widgets/shared_code/sys_message/sys_message_module.rb +0 -211
  405. data/lib/gtk_paradise/widgets/shared_code/tabby/tabby_module.rb +3 -15
  406. data/lib/gtk_paradise/widgets/shared_code/xpm_loader/xpm_loader_module.rb +15 -23
  407. data/lib/gtk_paradise/www/index.cgi +2 -2
  408. data/lib/gtk_paradise/yaml/browser_URLs.yml +3 -4
  409. data/lib/gtk_paradise/yaml/configuration_options_for_class_gtk_runner.yml +6 -6
  410. data/lib/gtk_paradise/yaml/experimental/README.md +3 -0
  411. data/lib/gtk_paradise/yaml/experimental/all_widgets.yml +37 -0
  412. data/lib/gtk_paradise/yaml/menu.yml +6 -3
  413. data/lib/gtk_paradise/yaml/notebook_controller.yml +62 -29
  414. data/lib/gtk_paradise.rb +1 -1
  415. data/test/gtk2/testing_combo_box.rb +1 -0
  416. data/test/gtk2/testing_display.rb +23 -0
  417. data/test/gtk2/testing_gtk_image.rb +4 -3
  418. data/test/gtk2/testing_hbox_and_vbox.rb +37 -0
  419. data/test/gtk2/testing_label_with_ampersand.rb +5 -2
  420. data/test/gtk2/testing_notebook.rb +11 -5
  421. data/test/gtk3/test_widget.rb +2 -1
  422. data/test/gtk3/testing_app.rb +0 -1
  423. data/test/gtk3/testing_base_module.rb +2 -1
  424. data/test/gtk3/testing_numbered_lines.rb +20 -0
  425. data/test/gtk3/testing_project_base_directory.rb +6 -1
  426. data/test/gtk3/testing_the_html_pseudo_tags.rb +2 -2
  427. data/test/gtk4/testing_gtk_entry.rb +24 -0
  428. data/test/misc/testing_a_gtk_frame.rb +14 -0
  429. data/test/misc/testing_gtk4_simplifications.rb +105 -0
  430. data/test/misc/testing_gtk_paradise_runner.rb +19 -4
  431. data/test/misc/testing_numbered_lines.rb +36 -0
  432. data/test/misc/testing_the_gtk_classes.rb +83 -0
  433. metadata +266 -198
  434. data/lib/gtk_paradise/base_module/change_directory.rb +0 -22
  435. data/lib/gtk_paradise/base_module/combo_box_and_combo_box_entry.rb +0 -113
  436. data/lib/gtk_paradise/base_module/commandline_arguments.rb +0 -36
  437. data/lib/gtk_paradise/base_module/configuration.rb +0 -50
  438. data/lib/gtk_paradise/base_module/constants.rb +0 -23
  439. data/lib/gtk_paradise/base_module/debug.rb +0 -127
  440. data/lib/gtk_paradise/base_module/draggable.rb +0 -95
  441. data/lib/gtk_paradise/base_module/emoji.rb +0 -107
  442. data/lib/gtk_paradise/base_module/esystem.rb +0 -22
  443. data/lib/gtk_paradise/base_module/events.rb +0 -111
  444. data/lib/gtk_paradise/base_module/fonts.rb +0 -119
  445. data/lib/gtk_paradise/base_module/graphics_display.rb +0 -47
  446. data/lib/gtk_paradise/base_module/gtk3.rb +0 -43
  447. data/lib/gtk_paradise/base_module/gtk_buttons.rb +0 -562
  448. data/lib/gtk_paradise/base_module/gtk_entry.rb +0 -126
  449. data/lib/gtk_paradise/base_module/gtk_fixed.rb +0 -18
  450. data/lib/gtk_paradise/base_module/gtk_grid.rb +0 -61
  451. data/lib/gtk_paradise/base_module/gtk_image.rb +0 -501
  452. data/lib/gtk_paradise/base_module/gtk_label.rb +0 -211
  453. data/lib/gtk_paradise/base_module/gtk_notebook.rb +0 -88
  454. data/lib/gtk_paradise/base_module/gtk_scrolled_window.rb +0 -155
  455. data/lib/gtk_paradise/base_module/misc.rb +0 -2949
  456. data/lib/gtk_paradise/base_module/pango.rb +0 -24
  457. data/lib/gtk_paradise/base_module/popover.rb +0 -241
  458. data/lib/gtk_paradise/base_module/register_sigint.rb +0 -20
  459. data/lib/gtk_paradise/base_module/reset.rb +0 -128
  460. data/lib/gtk_paradise/base_module/return_corresponding_gtk_stock_item.rb +0 -92
  461. data/lib/gtk_paradise/base_module/roebe.rb +0 -19
  462. data/lib/gtk_paradise/base_module/table.rb +0 -438
  463. data/lib/gtk_paradise/base_module/time.rb +0 -35
  464. data/lib/gtk_paradise/constants/available_cursors.rb +0 -52
  465. data/lib/gtk_paradise/constants/fonts.rb +0 -38
  466. data/lib/gtk_paradise/constants/misc.rb +0 -56
  467. data/lib/gtk_paradise/constants/newline.rb +0 -14
  468. data/lib/gtk_paradise/constants/xbm_icons.rb +0 -121
  469. data/lib/gtk_paradise/examples/gtk3/003_sorted_tree.rb +0 -141
  470. data/lib/gtk_paradise/examples/gtk3/034_combo_box_example.rb +0 -49
  471. data/lib/gtk_paradise/examples/gtk3/068_text_view_example.rb +0 -34
  472. data/lib/gtk_paradise/examples/gtk3/071_search_bar_example.rb +0 -59
  473. data/lib/gtk_paradise/gtk_classes/colours/colours.rb +0 -158
  474. data/lib/gtk_paradise/requires/require_the_minesweeper_files.rb +0 -11
  475. data/lib/gtk_paradise/toplevel_methods/allow_only_numbers.rb +0 -59
  476. data/lib/gtk_paradise/toplevel_methods/csv.rb +0 -102
  477. data/lib/gtk_paradise/toplevel_methods/e.rb +0 -18
  478. data/lib/gtk_paradise/toplevel_methods/enable_and_disable_warnings.rb +0 -58
  479. data/lib/gtk_paradise/toplevel_methods/keyboard.rb +0 -25
  480. data/lib/gtk_paradise/toplevel_methods/main_file.rb +0 -31
  481. data/lib/gtk_paradise/toplevel_methods/register_sigint.rb +0 -17
  482. data/lib/gtk_paradise/toplevel_methods/roebe.rb +0 -22
  483. data/lib/gtk_paradise/toplevel_methods/select_file.rb +0 -168
  484. data/lib/gtk_paradise/toplevel_methods/spacer.rb +0 -55
  485. data/lib/gtk_paradise/toplevel_methods/tooltips.rb +0 -71
  486. data/lib/gtk_paradise/toplevel_methods/we_use_this_gtk_version.rb +0 -65
  487. data/lib/gtk_paradise/widgets/gtk2/directory_content_widget/directory_content_widget.rb +0 -30
  488. data/lib/gtk_paradise/widgets/gtk2/my_calendar/my_calendar.config +0 -6
  489. data/lib/gtk_paradise/widgets/gtk2/my_calendar/my_calendar.rb +0 -34
  490. data/lib/gtk_paradise/widgets/gtk2/notebook_tab_with_icon/notebook_tab_with_icon.rb +0 -30
  491. data/lib/gtk_paradise/widgets/gtk2/ping_widget/ping_widget.rb +0 -30
  492. data/lib/gtk_paradise/widgets/gtk2/stopwatch/stopwatch.rb +0 -30
  493. data/lib/gtk_paradise/widgets/gtk2/sys_message/sys_message.config +0 -6
  494. data/lib/gtk_paradise/widgets/shared_code/directory_content_widget/constants.rb +0 -53
  495. data/lib/gtk_paradise/widgets/shared_code/directory_content_widget/directory_content_widget_module.rb +0 -777
  496. data/lib/gtk_paradise/widgets/shared_code/directory_content_widget/handle_this_file_or_symlink.rb +0 -83
  497. data/lib/gtk_paradise/widgets/shared_code/notebook_controller/notebook_controller_module.rb +0 -339
  498. data/lib/gtk_paradise/widgets/shared_code/notebook_tab_with_icon/notebook_tab_with_icon_module.rb +0 -297
  499. data/lib/gtk_paradise/widgets/shared_code/ping_widget/ping_widget_module.rb +0 -326
  500. data/lib/gtk_paradise/widgets/version_agnostic/button_with_border.rb +0 -63
  501. data/lib/gtk_paradise/widgets/version_agnostic/coloured_unit.rb +0 -54
  502. data/lib/gtk_paradise/widgets/version_agnostic/my_image_menu_item.rb +0 -103
  503. data/lib/gtk_paradise/widgets/version_agnostic/my_menu_item_separator.rb +0 -31
  504. data/lib/gtk_paradise/widgets/version_agnostic/non_numbers_only.rb +0 -66
  505. data/lib/gtk_paradise/widgets/version_agnostic/note_window.rb +0 -107
  506. /data/lib/gtk_paradise/examples/gtk3/{084_undecorated_window_example.rb → 014_undecorated_window_example.rb} +0 -0
  507. /data/lib/gtk_paradise/examples/gtk3/{077_status_icon_example.rb → 019_status_icon_example.rb} +0 -0
  508. /data/lib/gtk_paradise/examples/gtk3/{076_stack_example.rb → 020_stack_example.rb} +0 -0
  509. /data/lib/gtk_paradise/examples/gtk3/{006_password_example.rb → 025_password_example.rb} +0 -0
  510. /data/lib/gtk_paradise/examples/gtk3/{015_list_box_example.rb → 033_list_box_example.rb} +0 -0
  511. /data/lib/gtk_paradise/examples/gtk3/{021_scale_button_demo.rb → 039_scale_button_demo.rb} +0 -0
  512. /data/lib/gtk_paradise/examples/gtk3/{024_installation_assistant.rb → 042_installation_assistant.rb} +0 -0
  513. /data/lib/gtk_paradise/examples/gtk3/{040_font_chooser_dialog_example.rb → 056_font_chooser_dialog_example.rb} +0 -0
  514. /data/lib/gtk_paradise/examples/gtk3/{041_flowbox.rb → 057_flowbox.rb} +0 -0
  515. /data/lib/gtk_paradise/examples/gtk3/{045_fixed_example.rb → 061_fixed_example.rb} +0 -0
  516. /data/lib/gtk_paradise/examples/gtk3/{054_svg_viewer.rb → 070_svg_viewer.rb} +0 -0
@@ -8,53 +8,66 @@
8
8
  # =========================================================================== #
9
9
  module Gtk
10
10
 
11
- class Widget
11
+ class Widget # === Gtk::Widget
12
12
 
13
- require 'gtk_paradise/gtk_classes/colours/colours.rb'
14
13
  require 'gtk_paradise/toplevel_methods/determine_which_gtk_version_is_in_use.rb'
15
- require 'gtk_paradise/toplevel_methods/spacer.rb'
16
14
 
17
15
  # ========================================================================= #
18
- # === shadow_type_etched_in
16
+ # Next, call in gdk-specific modifications.
19
17
  # ========================================================================= #
20
- def shadow_type_etched_in
21
- set_shadow_type(::Gtk::SHADOW_ETCHED_IN)
22
- end
18
+ require 'gtk_paradise/gdk/event_crossing.rb'
23
19
 
24
20
  # ========================================================================= #
25
- # === add_css_class
21
+ # === width_height
26
22
  #
27
- # This method can be used to quickly add a CSS class to a particular
28
- # gtk-widget.
23
+ # This method is just a little wrapper over .set_size_request().
24
+ # ========================================================================= #
25
+ def width_height(
26
+ width = 560,
27
+ height = 160
28
+ )
29
+ set_size_request(width, height)
30
+ end
31
+
32
+ # ========================================================================= #
33
+ # === same_minimal
29
34
  #
30
- # Example how to use it via the gtk_paradise gem:
35
+ # This method can be used to group together several calls to
36
+ # .minimal(), along with proper padding.
37
+ # ========================================================================= #
38
+ def same_minimal(
39
+ padding_to_use = 0,
40
+ *these_widgets
41
+ )
42
+ these_widgets.flatten.each {|this_widget|
43
+ minimal(this_widget, padding_to_use)
44
+ }
45
+ end
46
+
47
+ # ========================================================================= #
48
+ # === align_to_center
31
49
  #
32
- # label = gtk_label('This is a test')
33
- # label.add_css_class('BG_black')
34
- # label.add_css_class('yellow')
35
- # label.css_class('bblack2')
50
+ # This method will align towards the center. Note that not all widgets
51
+ # respond to this naturally; it is best to use this for gtk-entry
52
+ # widgets and perhaps gtk-label and similar widgets.
36
53
  #
54
+ # Since as of May 2023 another approach is used: if the widget does
55
+ # not respond to .xalign= then another method will be called
56
+ # automatically. Unfortunately this does not work ...
37
57
  # ========================================================================= #
38
- def add_css_class(i)
39
- if respond_to? :style_context
40
- if i.is_a?(String) and i.include? ' '
41
- use_these_css_classes(i)
42
- else
43
- i = i.to_s if i.is_a? Symbol
44
- style_context.add_class(i)
45
- # =================================================================== #
46
- # Always register it after it was added.
47
- # =================================================================== #
48
- ::Gtk.register_this_css_class_is_in_use(i)
49
- end
50
- end
51
- end; alias css_class add_css_class # === css_class
52
- alias css add_css_class # === css
53
- alias set_class add_css_class # === set_class
54
- alias set_css_class add_css_class # === set_css_class
55
- alias add_this_css_class add_css_class # === add_this_css_class
56
- alias add_css add_css_class # === add_this_css_class
57
- alias add_class add_css_class # === add_class
58
+ def align_to_center
59
+ # if respond_to?(:xaling=)
60
+ self.xalign = 0.5
61
+ # else
62
+ # self.halign = ::Gtk::Alignment.new(0.5, 0.5, 1.0, 1.0)
63
+ # end
64
+ end; alias align_to_the_center align_to_center # === align_to_the_center
65
+ alias center align_to_center # === center
66
+ alias do_center align_to_center # === do_center
67
+ alias to_center align_to_center # === to_center
68
+ alias to_the_middle align_to_center # === to_the_middle
69
+ alias align_into_the_middle align_to_center # === align_into_the_middle
70
+ alias center_align align_to_center # === center_align
58
71
 
59
72
  # ========================================================================= #
60
73
  # === scroll_up?
@@ -79,122 +92,871 @@ class Widget
79
92
  end; alias scroll_down_event? scroll_down? # === scroll_down_event?
80
93
 
81
94
  # ========================================================================= #
82
- # === pack_without_expand (minimal tag)
95
+ # === on_scroll_event
96
+ #
97
+ # This is the event that occurs when the mouse-scroll-wheel is clicked.
83
98
  # ========================================================================= #
84
- def pack_without_expand(
85
- widget,
86
- padding_to_use = 0
87
- )
88
- # ======================================================================= #
89
- # The second argument may be a Hash. If this is the case we check for
90
- # it's "type".
91
- # ======================================================================= #
92
- if padding_to_use.is_a? Hash
93
- work_on_a_copy = padding_to_use.dup # To avoid side-effects.
99
+ def on_scroll_event(&block)
100
+ signal_connect(:scroll_event, &block)
101
+ end; alias on_scrolled on_scroll_event # === on_scrolled
102
+ alias on_scrolling on_scroll_event # === on_scrolling
103
+ alias on_scrolling_event on_scroll_event # === on_scrolling_event
104
+ alias on_mouse_scroll_event on_scroll_event # === on_mouse_scroll_event
105
+
106
+ # ========================================================================= #
107
+ # === yellow_background
108
+ #
109
+ # This method can be used to designate a light yellow background
110
+ # colour tone. It depends on support for CSS being available -
111
+ # thus, ruby-gtk2 does not work with this method.
112
+ # ========================================================================= #
113
+ def yellow_background
114
+ css_class('BG_light_yellow')
115
+ end; alias light_yellow_background yellow_background # === light_yellow_background
116
+ alias light_yellowish_background yellow_background # === light_yellowish_background
117
+ alias yellowish_background yellow_background # === yellowish_background
118
+
119
+ # ========================================================================= #
120
+ # === very_light_yellowish_background
121
+ #
122
+ # This is similar to yellow_background() defined above, but the difference
123
+ # will be that the yellow colour here will be very faint - even fainter
124
+ # than on the method defined above.
125
+ #
126
+ # This depends on CSS, so it will not work on ruby-gtk2.
127
+ # ========================================================================= #
128
+ def very_light_yellowish_background
129
+ css_class('BG_very_light_yellowish')
130
+ end; alias yellowish_background2 very_light_yellowish_background # === yellowish_background2
131
+ alias background_yellow2 very_light_yellowish_background # === background_yellow2
132
+ alias very_light_yellow_background_colour very_light_yellowish_background # === very_light_yellow_background_colour
133
+ alias very_light_yellow_background very_light_yellowish_background # === very_light_yellow_background
134
+ alias BG_yellow very_light_yellowish_background # === very_light_yellow_background_colour
135
+ alias yello very_light_yellowish_background # === yello
136
+
137
+ # ========================================================================= #
138
+ # === clear_background
139
+ #
140
+ # This method will clear the background.
141
+ # ========================================================================= #
142
+ def clear_background
143
+ css_class('clear_background')
144
+ end; alias clear_border clear_background # === clear_border
145
+ alias remove_background clear_background # === remove_background
146
+
147
+ # ========================================================================= #
148
+ # === pretty_tooltip
149
+ # ========================================================================= #
150
+ def pretty_tooltip(i)
151
+ if i and i.include?('&')
152
+ i = i.dup if i.frozen?
94
153
  # ===================================================================== #
95
- # === :padding
154
+ # Oddly enough, ruby-gtk2 complains about this character.
155
+ #
156
+ # The warning was: "Gtk-WARNING **: Failed to set text from
157
+ # markup due to error parsing markup" [...] Entity did not
158
+ # end with a semicolon; most likely you used an ampersand
159
+ # character without intending to start an entity - escape
160
+ # ampersand as &"
161
+ # So we do this ^^^.
96
162
  # ===================================================================== #
97
- if work_on_a_copy.has_key? :padding
98
- padding_to_use = work_on_a_copy[:padding]
99
- end
163
+ i.gsub!(/&/, '&')
164
+ end
165
+ set_tooltip_markup(i)
166
+ end; alias pretty_tooltip= pretty_tooltip # === pretty_tooltip=
167
+ alias fancy_tooltip= pretty_tooltip # === fancy_tooltip=
168
+ alias fancy_tooltips= pretty_tooltip # === fancy_tooltips=
169
+ alias hint= pretty_tooltip # === hint=
170
+ alias info pretty_tooltip # === info
171
+ alias popup_hint pretty_tooltip # === popup_hint
172
+ alias fancy_tip pretty_tooltip # === fancy_tip
173
+ alias fancy_hint pretty_tooltip # === fancy_hint
174
+ alias fancy_hint= pretty_tooltip # === fancy_hint=
175
+ alias set_hovertip pretty_tooltip # === set_hovertip
176
+
177
+ # ========================================================================= #
178
+ # === add_or_append
179
+ # ========================================================================= #
180
+ def add_or_append(i)
181
+ if Gtk.do_we_use_gtk3?
182
+ add(i)
183
+ elsif Gtk.do_we_use_gtk4?
184
+ append(i)
100
185
  end
186
+ end
187
+
188
+ # ========================================================================= #
189
+ # === remove_css_class
190
+ #
191
+ # This method can be used to remove a particular CSS class from a
192
+ # widget.
193
+ # ========================================================================= #
194
+ def remove_css_class(this_css_class)
195
+ context = style_context
196
+ context.remove_class(this_css_class)
197
+ end; alias remove_this_css_class remove_css_class # === remove_this_css_class
198
+ alias remove_CSS_class remove_css_class # === remove_CSS_class
199
+
200
+ if Gtk.do_we_use_gtk4?
101
201
  # ======================================================================= #
102
- # === Handle ruby-gtk2 first
202
+ # === set_border_width
103
203
  # ======================================================================= #
104
- if ::Gtk.use_gtk2?
105
- begin
106
- pack_start(
107
- widget,
108
- false,
109
- false,
110
- padding_to_use
111
- )
112
- rescue ArgumentError => error
113
- puts 'An error happened in '+__FILE__+' (method: pack_without_expand())'
114
- pp error
115
- puts 'caller() was:'
116
- pp caller()
117
- exit
118
- end
119
- else # else handle ruby-gtk3
120
- pack_start(
121
- widget,
122
- expand: false,
123
- fill: false,
124
- padding: padding_to_use
125
- )
204
+ def set_border_width(i = 5)
205
+ css_class("pad#{i}px")
126
206
  end
127
- end; alias pack_minimal pack_without_expand # === pack_minimal
128
- alias minimal pack_without_expand # === minimal
129
- alias append pack_without_expand # === append
207
+ end
130
208
 
131
- require 'gtk_paradise/fonts/fonts.rb'
132
209
  # ========================================================================= #
133
- # === use_this_font=
210
+ # === on_hover_steelblue
134
211
  # ========================================================================= #
135
- def use_this_font=(
136
- i = 'EmojiOne Color 22'
137
- )
138
- if i.is_a?(String) or i.is_a?(Symbol)
139
- i = ::Gtk.expand_this_font(i)
140
- i = Pango::FontDescription.new(i.to_s)
141
- end
142
- if ::Gtk.use_gtk2?
143
- modify_font(i)
144
- else
145
- override_font(i)
146
- end
147
- end; alias use_this_font use_this_font= # === use_this_font
148
- alias set_use_this_font use_this_font= # === set_use_this_font
149
- alias try_to_use_this_font use_this_font= # === try_to_use_this_font
150
- alias fonty use_this_font= # === fonty
212
+ def on_hover_steelblue
213
+ on_hover(__method__)
214
+ end
151
215
 
152
216
  # ========================================================================= #
153
- # === align_to_right
217
+ # === limegreen
154
218
  # ========================================================================= #
155
- def align_to_right
156
- set_halign(:end) # halign=Gtk.Align.END
219
+ def limegreen
220
+ on_hover(__method__)
221
+ end; alias mediumaquamarine limegreen # === mediumaquamarine
222
+ alias khaki limegreen # === khaki
223
+
224
+ # ========================================================================= #
225
+ # === lightgreen
226
+ # ========================================================================= #
227
+ def lightgreen
228
+ on_hover(__method__)
229
+ end
230
+
231
+ # ========================================================================= #
232
+ # === paleturquoise
233
+ # ========================================================================= #
234
+ def paleturquoise
235
+ on_hover(__method__)
236
+ end
237
+
238
+ # ========================================================================= #
239
+ # === lightblue
240
+ # ========================================================================= #
241
+ def lightblue
242
+ on_hover(__method__)
243
+ end
244
+
245
+ # ========================================================================= #
246
+ # === skyblue
247
+ # ========================================================================= #
248
+ def skyblue
249
+ on_hover(__method__)
250
+ end
251
+
252
+ # ========================================================================= #
253
+ # === lightpink
254
+ # ========================================================================= #
255
+ def lightpink
256
+ on_hover(__method__)
257
+ end
258
+
259
+ # ========================================================================= #
260
+ # === darkmagenta
261
+ # ========================================================================= #
262
+ def darkmagenta
263
+ on_hover(__method__)
264
+ end
265
+
266
+ # ========================================================================= #
267
+ # === tomato
268
+ # ========================================================================= #
269
+ def tomato
270
+ add_css_class(__method__.to_s)
271
+ end
272
+
273
+ # ========================================================================= #
274
+ # === darkblue
275
+ # ========================================================================= #
276
+ def darkblue
277
+ add_css_class(__method__.to_s)
278
+ end
279
+
280
+ # ========================================================================= #
281
+ # === darkgreen
282
+ # ========================================================================= #
283
+ def darkgreen
284
+ add_css_class(__method__.to_s)
285
+ end
286
+
287
+ # ========================================================================= #
288
+ # === khaki_background
289
+ # ========================================================================= #
290
+ def khaki_background
291
+ css_class('BG_khaki')
292
+ end
293
+
294
+ # ========================================================================= #
295
+ # === light_green_background
296
+ # ========================================================================= #
297
+ def light_green_background
298
+ css_class('BG_light_green')
299
+ end; alias lightgreen_background light_green_background # === lightgreen_background
300
+
301
+ # ========================================================================= #
302
+ # === azure_background
303
+ # ========================================================================= #
304
+ def azure_background
305
+ css_class('BG_azure')
306
+ end; alias bg_azure azure_background # === bg_azure
307
+
308
+ # ========================================================================= #
309
+ # === steelblue
310
+ # ========================================================================= #
311
+ def steelblue
312
+ css_class(__method__.to_s)
313
+ end
314
+
315
+ # ========================================================================= #
316
+ # === royalblue
317
+ # ========================================================================= #
318
+ def royalblue
319
+ css_class(__method__.to_s)
320
+ end
321
+
322
+ # ========================================================================= #
323
+ # === slateblue
324
+ # ========================================================================= #
325
+ def slateblue
326
+ css_class(__method__.to_s)
157
327
  end
158
328
 
159
329
  # ========================================================================= #
160
- # === align_to_center
330
+ # === lightskyblue_background
331
+ # ========================================================================= #
332
+ def lightskyblue_background
333
+ css_class('BG_lightskyblue')
334
+ end; alias bg_lightblue lightskyblue_background # === bg_lightblue
335
+ alias lightblue_background lightskyblue_background # === lightblue_background
336
+ alias light_blue_background lightskyblue_background # === light_blue_background
337
+
338
+ # ========================================================================= #
339
+ # === light_pink_background
340
+ # ========================================================================= #
341
+ def light_pink_background
342
+ css_class('BG_lightpink')
343
+ end; alias lightpink_background light_pink_background # === lightpink_background
344
+
345
+ # ========================================================================= #
346
+ # === modify_to_this_font
347
+ #
348
+ # This will modify the font for that particular widget at hand.
349
+ #
350
+ # Usage example:
351
+ #
352
+ # modify_this_font(:liberation)
353
+ #
354
+ # ========================================================================= #
355
+ def modify_to_this_font(
356
+ this_font = 'Sans 20'
357
+ )
358
+ this_font = ::Gtk.expand_this_font(this_font)
359
+ _ = Pango::FontDescription.new(this_font)
360
+ # if Gtk.are_we_using_gtk2?
361
+ # modify_font(_)
362
+ #else
363
+ override_font(_)
364
+ #end
365
+ end; alias modify_this_font modify_to_this_font # === modify_this_font
366
+ alias font_to_use= modify_to_this_font # === font_to_use=
367
+
368
+ # ========================================================================= #
369
+ # === complex_font
370
+ # ========================================================================= #
371
+ def complex_font(
372
+ this_font = 'Calibre 32'
373
+ )
374
+ this_font = ::Gtk.expand_this_font(this_font)
375
+ _ = Pango::FontDescription.new(this_font)
376
+ override_font(_)
377
+ end
378
+
379
+ # ========================================================================= #
380
+ # === bsteelblue1
381
+ # ========================================================================= #
382
+ def bsteelblue1
383
+ css_class(__method__.to_s)
384
+ end
385
+
386
+ # ========================================================================= #
387
+ # === make_bold_font
388
+ #
389
+ # This makes use of CSS rules, so it will not work for ruby-gtk2 by
390
+ # default.
391
+ # ========================================================================= #
392
+ def make_bold_font
393
+ css_class 'bold_font'
394
+ end
395
+
396
+ # ========================================================================= #
397
+ # === bnavy1
398
+ #
399
+ # This will also have various aliases.
400
+ # ========================================================================= #
401
+ def bnavy1
402
+ css_class(__method__.to_s)
403
+ end
404
+
405
+ # ========================================================================= #
406
+ # === bindigo1
407
+ # ========================================================================= #
408
+ def bindigo1
409
+ css_class(__method__.to_s)
410
+ end
411
+
412
+ # ========================================================================= #
413
+ # === bdarkorchid1
414
+ # ========================================================================= #
415
+ def bdarkorchid1
416
+ css_class(__method__.to_s)
417
+ end
418
+
419
+ # ========================================================================= #
420
+ # === blightgreen1
421
+ # ========================================================================= #
422
+ def blightgreen1
423
+ css_class(__method__.to_s)
424
+ end
425
+
426
+ # ========================================================================= #
427
+ # === bblack1px
428
+ # ========================================================================= #
429
+ def bblack1px
430
+ css_class('bblack1')
431
+ end; alias bblack1 bblack1px # === bblack1
432
+
433
+ # ========================================================================= #
434
+ # === bblack2px
435
+ # ========================================================================= #
436
+ def bblack2px
437
+ css_class('bblack2')
438
+ end; alias bblack2 bblack2px # === bblack2
439
+
440
+ # ========================================================================= #
441
+ # === bblack3px
442
+ # ========================================================================= #
443
+ def bblack3px
444
+ css_class('bblack3')
445
+ end; alias bblack3 bblack3px # === bblack3
446
+
447
+ # ========================================================================= #
448
+ # === bblack4px
449
+ # ========================================================================= #
450
+ def bblack4px
451
+ css_class('bblack4')
452
+ end; alias bblack4 bblack4px # === bblack4
453
+
454
+ # ========================================================================= #
455
+ # === bblack5px
456
+ # ========================================================================= #
457
+ def bblack5px
458
+ css_class('bblack5')
459
+ end; alias bblack5 bblack5px # === bblack5
460
+
461
+ # ========================================================================= #
462
+ # === hcenter
463
+ #
464
+ # The name "hcenter" is an abbreviation for "horizontal center" position.
465
+ #
466
+ # This variant has been confirmed to work for the gtk-hbox widget, in
467
+ # July 2022.
468
+ # ========================================================================= #
469
+ def hcenter(
470
+ i = :center
471
+ )
472
+ case i
473
+ # ======================================================================= #
474
+ # === :center
475
+ # ======================================================================= #
476
+ when :center
477
+ i = ::Gtk::Align::CENTER
478
+ end
479
+ set_halign(i) # Or Gtk::Align::CENTER
480
+ end; alias horizontal_center hcenter # === horizontal_center
481
+ alias halign_center hcenter # === halign_center
482
+ alias hjustify hcenter # === hjustify
483
+ alias center_this_widget hcenter # === center_this_widget
484
+ alias clever_center hcenter # === clever_center
485
+ alias center_into_the_middle hcenter # === center_into_the_middle
486
+ alias centered_container hcenter # === centered_container
487
+
488
+ require 'gtk_paradise/fonts/fonts.rb'
489
+ # ========================================================================= #
490
+ # === use_this_font=
491
+ # ========================================================================= #
492
+ def use_this_font=(
493
+ i = 'EmojiOne Color 22'
494
+ )
495
+ if i.is_a?(String) or i.is_a?(Symbol)
496
+ i = ::Gtk.expand_this_font(i)
497
+ i = Pango::FontDescription.new(i.to_s)
498
+ end
499
+ if ::Gtk.use_gtk2?
500
+ modify_font(i)
501
+ elsif ::Gtk.use_gtk3?
502
+ override_font(i)
503
+ elsif ::Gtk.use_gtk4?
504
+ puts 'override_font() has not yet been ported to ruby-gtk4 '\
505
+ 'and the gtk_paradise gem.'
506
+ end
507
+ end; alias use_this_font use_this_font= # === use_this_font
508
+ alias set_use_this_font use_this_font= # === set_use_this_font
509
+ alias try_to_use_this_font use_this_font= # === try_to_use_this_font
510
+ alias fonty use_this_font= # === fonty
511
+ alias font= use_this_font= # === font=
512
+
513
+ # ========================================================================= #
514
+ # === do_focus
515
+ #
516
+ # This variant is a slightly nicer-looking variant compared to the
517
+ # .set_focus(true) variant.
518
+ # ========================================================================= #
519
+ def do_focus
520
+ set_focus(true)
521
+ end; alias do_focus_on_it do_focus # === do_focus_on_it
522
+ alias do_select do_focus # === do_select
523
+
524
+ # ========================================================================= #
525
+ # === deselect
526
+ #
527
+ # Note that this method will NOT work on every gtk-widget; the primary
528
+ # use case has been for gtk-entry, but I figured that other gtk-widgets
529
+ # may benefit from this method as well, so it was added onto class
530
+ # Gtk::Widget.
531
+ # ========================================================================= #
532
+ def deselect
533
+ select_region(0, 0)
534
+ end; alias deselect_everything deselect # === deselect_everything
535
+ alias defocus deselect # === defocus
536
+
537
+ # ========================================================================= #
538
+ # === remove_widgets
539
+ #
540
+ # This method will remove all child-widgets from a container.
541
+ # ========================================================================= #
542
+ def remove_widgets
543
+ children.each {|this_child_widget|
544
+ remove(this_child_widget)
545
+ }
546
+ end
547
+
548
+ # ========================================================================= #
549
+ # === set_background_colour
550
+ #
551
+ # This method can be used to designate a specific background colour
552
+ # for a Gtk::Button.
553
+ # ========================================================================= #
554
+ def set_background_colour(
555
+ i = :whitesmoke
556
+ )
557
+ if ::Gtk.use_gtk2?
558
+ modify_bg(
559
+ ::Gtk::STATE_NORMAL,
560
+ Gdk::Color.parse(i.to_s)
561
+ )
562
+ else
563
+ if i.is_a?(String) and i.start_with?('#') # Assume a hex-code in this event.
564
+ unless Object.const_defined?(:Colours)
565
+ begin
566
+ require 'colours'
567
+ rescue LoadError; end
568
+ end
569
+ i = ::Colours.convert_hex_code_to_RGBA_array(i)
570
+ i = Gdk::RGBA.new(*i)
571
+ elsif i.is_a? Gdk::Color
572
+ # =================================================================== #
573
+ # Convert it into RGB values next.
574
+ # =================================================================== #
575
+ array = [
576
+ (i.red * 100.0 / 65535) / 100,
577
+ (i.green * 100.0 / 65535) / 100,
578
+ (i.blue * 100.0 / 65535) / 100,
579
+ 1.0
580
+ ]
581
+ i = Gdk::RGBA.new(*array)
582
+ end
583
+ override_background_color(:normal, i)
584
+ end
585
+ @background_colour = i
586
+ end; alias set_background_color set_background_colour # === set_background_color
587
+ alias bg_colour set_background_colour # === bg_colour
588
+ alias bg_colour= set_background_colour # === bg_colour=
589
+ alias bg_color set_background_colour # === bg_colour
590
+ alias background set_background_colour # === background
591
+ alias background= set_background_colour # === background=
592
+ alias background_color set_background_colour # === background_color
593
+ alias background_colour set_background_colour # === background_colour
594
+ alias background_colour= set_background_colour # === background_colour=
595
+ alias background_color= set_background_colour # === background_color=
596
+ alias set_background set_background_colour # === set_background
597
+ alias change_background_to set_background_colour # === change_background_to
598
+ alias change_background_colour_to set_background_colour # === change_background_colour_to
599
+ alias change_background_color_to set_background_colour # === change_background_color_to
600
+
601
+ # ========================================================================= #
602
+ # === on_hover
603
+ #
604
+ # This method can be used to modify the colour of a given widget, on
605
+ # a "on-hover" event.
606
+ #
607
+ # Usage example:
608
+ #
609
+ # on_hover(:lightblue)
610
+ #
611
+ # ========================================================================= #
612
+ def on_hover(
613
+ this_colour = :lightgreen, &block
614
+ )
615
+ modify_background(
616
+ :on_hover, this_colour, &block
617
+ )
618
+ end; alias on_hover_colour on_hover # === on_hover_colour
619
+
620
+ # ========================================================================= #
621
+ # === modify_background
622
+ #
623
+ # This method will set the background colour for a widget in a
624
+ # particular state. All other style values are left untouched.
625
+ # See also Gtk::Widget#modify_style.
626
+ #
627
+ # The arguments are:
628
+ #
629
+ # state: the state(GtkStateType) for which to set the
630
+ # background color.
631
+ #
632
+ # colour: the Gdk::Color to assign (does not need to
633
+ # be allocated).
634
+ #
635
+ # ========================================================================= #
636
+ def modify_background(
637
+ state,
638
+ colour = nil,
639
+ &block
640
+ )
641
+ # ======================================================================= #
642
+ # === Handle Hashes first, for the variable state
643
+ # ======================================================================= #
644
+ if colour.is_a? Hash
645
+ if colour.has_key? :colour
646
+ colour = colour.delete(:colour)
647
+ end
648
+ end
649
+ case state
650
+ # ======================================================================= #
651
+ # === :normal
652
+ #
653
+ # This entry point is the default entry point.
654
+ # ======================================================================= #
655
+ when :normal,
656
+ :default
657
+ if Gtk.do_we_use_gtk2?
658
+ state = ::Gtk::STATE_NORMAL
659
+ else
660
+ state = :normal
661
+ end
662
+ # ======================================================================= #
663
+ # === :active
664
+ # ======================================================================= #
665
+ when :active
666
+ if Gtk.do_we_use_gtk2?
667
+ state = ::Gtk::STATE_ACTIVE
668
+ else
669
+ state = :active
670
+ end
671
+ # ======================================================================= #
672
+ # === :prelight
673
+ # ======================================================================= #
674
+ when :prelight,
675
+ :hover,
676
+ :on_hover
677
+ if Gtk.do_we_use_gtk2?
678
+ state = ::Gtk::STATE_PRELIGHT
679
+ else
680
+ state = :prelight
681
+ end
682
+ end
683
+ # ======================================================================= #
684
+ # === Handle blocks next
685
+ # ======================================================================= #
686
+ if block_given?
687
+ yielded = yield
688
+ if yielded.is_a?(Symbol)
689
+ colour = yielded
690
+ end
691
+ end
692
+ if colour.is_a? Symbol
693
+ # ===================================================================== #
694
+ # Convert it into a Gtk::Colours representation. We could check if it
695
+ # is a valid html-colour, but for the time being we do not do this.
696
+ # ===================================================================== #
697
+ if Gtk.do_we_use_gtk2?
698
+ colour = ::Gtk.colour_parse(colour)
699
+ # =================================================================== #
700
+ # gtk3 now uses RGBA rather than Gdk.parse().
701
+ # RGBA stands for red, green, blue and alpha.
702
+ # The values go from 0.0 to 1.0. However had, it seems as if
703
+ # ruby-gtk3 also supports HTML colours directly, so no need
704
+ # to convert them.
705
+ # =================================================================== #
706
+ end
707
+ end
708
+ if Gtk.do_we_use_gtk2?
709
+ modify_bg(state, colour) # Delegate to the original method here.
710
+ # ======================================================================= #
711
+ # === Handle ruby-gtk4 next
712
+ # ======================================================================= #
713
+ elsif Gtk.do_we_use_gtk4?
714
+ css_class("hover_effect_#{colour}")
715
+ else # else assume ruby-gtk3 here.
716
+ override_background_color(state, colour)
717
+ end
718
+ end
719
+
720
+ # ========================================================================= #
721
+ # === enable_scroll_events
722
+ #
723
+ # This method will enable scroll-events for a particular widget, such
724
+ # as a Gtk::Entry instance.
725
+ #
726
+ # Note that set_events() is less flexible as it can not be used on
727
+ # widgets that have already been realized.
728
+ # ========================================================================= #
729
+ def enable_scroll_events
730
+ if ::Gtk.use_gtk2? # assume ruby-gtk2 here.
731
+ add_events(Gdk::EventMask::SCROLL_MASK)
732
+ else
733
+ add_events(:scroll_mask)
734
+ end
735
+ end; alias add_scroll_event enable_scroll_events # === add_scroll_event
736
+
737
+ # ========================================================================= #
738
+ # === set_scroll_event
739
+ # ========================================================================= #
740
+ def set_scroll_event
741
+ set_events(Gdk::EventMask::SCROLL_MASK) # Enable scroll-events here.
742
+ end
743
+
744
+ # ========================================================================= #
745
+ # === rounded_border
746
+ #
747
+ # This method can be used to "assign" a rounded border to a gtk-widget.
748
+ #
749
+ # This functionality depends on CSS rules.
750
+ #
751
+ # Usage examples:
752
+ #
753
+ # .rounded_border('12px')
754
+ # .rounded_border('12px', :default)
755
+ # .rounded_border('12px', :default, '10px solid darkgreen')
756
+ #
757
+ # ========================================================================= #
758
+ def rounded_border(
759
+ i = 12,
760
+ use_this_CSS_name = :default,
761
+ regular_border = '1px solid steelblue' # This has to be supplied by the user.
762
+ )
763
+ case use_this_CSS_name
764
+ when :default
765
+ use_this_CSS_name = '.border'
766
+ end
767
+ if use_this_CSS_name.frozen?
768
+ use_this_CSS_name = use_this_CSS_name.dup
769
+ end
770
+ css_rules_to_apply = "\n#{use_this_CSS_name}#{i.to_s.delete('px')} {\n".dup
771
+ css_rules_to_apply << ' border: '+regular_border.to_s.delete(';')+';'+"\n"
772
+ css_rules_to_apply << ' border-radius: '+i.to_s.delete('px')+'px;'+"\n"
773
+ css_rules_to_apply << "}\n"
774
+ ::Gtk.add_to_the_toplevel_CSS_string(css_rules_to_apply)
775
+ _ = "#{use_this_CSS_name}#{i.to_s.delete('px')}".delete('.')
776
+ css_class(_)
777
+ end
778
+
779
+ # ========================================================================= #
780
+ # === add_hspacer
781
+ # ========================================================================= #
782
+ def add_hspacer
783
+ add(horizontal_line)
784
+ end; alias add_horizontal_spacer add_hspacer # === add_horizontal_spacer
785
+
786
+ # ========================================================================= #
787
+ # === horizontal_line
788
+ # ========================================================================= #
789
+ def horizontal_line
790
+ return ::Gtk.horizontal_spacer
791
+ end
792
+
793
+ # ========================================================================= #
794
+ # === align_to_the_middle
795
+ # ========================================================================= #
796
+ def align_to_the_middle
797
+ if respond_to? :set_alignment # Must safeguard it.
798
+ set_alignment(0.5)
799
+ end
800
+ end
801
+
802
+ # ========================================================================= #
803
+ # === set_markify_text
804
+ #
805
+ # This method combines two different methods in one, aka .set_text()
806
+ # and then a call to .do_markify().
807
+ # ========================================================================= #
808
+ def set_markify_text(i)
809
+ set_text(i.to_s)
810
+ do_markify
811
+ end
812
+
813
+ # ========================================================================= #
814
+ # === align_into_the_center
815
+ # ========================================================================= #
816
+ def align_into_the_center
817
+ set_halign(::Gtk::Align::CENTER)
818
+ end
819
+
820
+ # ========================================================================= #
821
+ # === add_button_press_events
822
+ # ========================================================================= #
823
+ def add_button_press_events
824
+ if ::Gtk.use_gtk2?
825
+ add_events(Gdk::Event::BUTTON_PRESS_MASK)
826
+ elsif ::Gtk.use_gtk3? # else for ruby-gtk3
827
+ add_events(Gdk::EventMask::BUTTON_PRESS_MASK)
828
+ elsif ::Gtk.use_gtk4?
829
+ e '.add_events() has to be changed for ruby-gtk4.'
830
+ end
831
+ end; alias enable_context_menu_on_button_click_events add_button_press_events # === enable_context_menu_on_button_click_events
832
+ alias enable_context_menu add_button_press_events # === enable_context_menu
833
+
834
+ # ========================================================================= #
835
+ # === add_css_class
836
+ #
837
+ # This method can be used to quickly add a CSS class to a particular
838
+ # gtk-widget.
839
+ #
840
+ # Example how to use it via the gtk_paradise gem:
841
+ #
842
+ # label = gtk_label('This is a test')
843
+ # label.add_css_class('BG_black')
844
+ # label.add_css_class('yellow')
845
+ # label.css_class('bblack2')
846
+ #
847
+ # ========================================================================= #
848
+ def add_css_class(
849
+ i
850
+ )
851
+ if respond_to? :style_context
852
+ i = i.to_s if i.is_a? Symbol
853
+ add_to_the_CSS_style_context(i)
854
+ # ===================================================================== #
855
+ # Always register it after it was added.
856
+ # No, this can not be done - we need to add CSS rules elsewhere.
857
+ # ===================================================================== #
858
+ # ::Gtk.append_these_css_rules(i)
859
+ end
860
+ end; alias set_class add_css_class # === set_class
861
+ alias set_css_class add_css_class # === set_css_class
862
+ alias css_class add_css_class # === css_class
863
+ alias css add_css_class # === css
864
+ alias add_this_css_class add_css_class # === add_this_css_class
865
+ alias add_css add_css_class # === add_this_css_class
866
+ alias add_class add_css_class # === add_class
867
+
868
+ # ========================================================================= #
869
+ # === add_to_the_CSS_style_context
870
+ #
871
+ # This method must be guaranteed to work on style_context. Thus, it can
872
+ # only work properly if style_context() actually returns something useful.
873
+ # ========================================================================= #
874
+ def add_to_the_CSS_style_context(i)
875
+ style_context.add_class(i)
876
+ end
877
+
878
+ # ========================================================================= #
879
+ # === use_these_css_classes
880
+ #
881
+ # This method allows for some convenience in regards to using CSS
882
+ # classes. You can pass several CSS classes into this method.
883
+ #
884
+ # It is important to separate these CSS classes via a
885
+ # ' ' character specifically.
886
+ #
887
+ # Specific usage example:
888
+ #
889
+ # @frame.use_these_css_classes('no_box_shadow bblack2 BG_black pad0px mar0px')
890
+ #
891
+ # ========================================================================= #
892
+ def use_these_css_classes(i)
893
+ # ======================================================================= #
894
+ # The input has to have a ' ' character, if this method is to work.
895
+ # ======================================================================= #
896
+ if i and i.include?(' ')
897
+ i.split(' ').each {|this_css_class|
898
+ css_class(this_css_class)
899
+ }
900
+ else
901
+ e 'The given input (`'+i.to_s+'`) does not have a " " character.'
902
+ end
903
+ end; alias use_these_CSS_classes use_these_css_classes # === use_these_CSS_classes
904
+ alias css_classes use_these_css_classes # === css_classes
905
+
906
+ # ========================================================================= #
907
+ # === on_click_event
161
908
  #
162
- # This method will align towards the center. Note that not all widgets
163
- # respond to this naturally; it is best to use this for gtk-entry
164
- # widgets and perhaps gtk-label and similar widgets.
165
- # ========================================================================= #
166
- def align_to_center
167
- self.xalign = 0.5
168
- end; alias align_to_the_center align_to_center # === align_to_the_center
169
- alias center align_to_center # === center
170
- alias do_center align_to_center # === do_center
171
- alias to_center align_to_center # === to_center
172
- alias to_the_middle align_to_center # === to_the_middle
173
- alias align_into_the_middle align_to_center # === align_into_the_middle
174
- alias center_align align_to_center # === center_align
175
-
176
- # ========================================================================= #
177
- # === enable_scroll_events
909
+ # This is a shortcut to respond to an on-click event, which is the
910
+ # left mouse click normally.
178
911
  #
179
- # This method will enable scroll-events for a particular widget, such
180
- # as a Gtk::Entry instance.
912
+ # You can enable this in your code by doing:
913
+ #
914
+ # .on_click_event { :highlight_text }
915
+ # .on_click_event { :deselect_text }
181
916
  #
182
- # Note that set_events() is less flexible as it can not be used on
183
- # widgets that have already been realized.
184
917
  # ========================================================================= #
185
- def enable_scroll_events
186
- if ::Gtk.use_gtk2? # assume ruby-gtk2 here.
187
- add_events(Gdk::EventMask::SCROLL_MASK)
188
- else
189
- add_events(:scroll_mask)
918
+ def on_click_event
919
+ if block_given?
920
+ yielded = yield
921
+ case yielded
922
+ # ===================================================================== #
923
+ # === :highlight_text
924
+ # ===================================================================== #
925
+ when :highlight_text,
926
+ :select_everything,
927
+ :select_text
928
+ on_button_press_event { |widget, event|
929
+ set_focus(true)
930
+ select_region(0, -1)
931
+ }
932
+ # ===================================================================== #
933
+ # === :deselect_text
934
+ #
935
+ # This will deselect any selection on a gtk-entry. It is not as
936
+ # useful as the :highlight_text functionality, but I wanted to
937
+ # provide both, simply to quickly show how it is done.
938
+ # ===================================================================== #
939
+ when :deselect_text
940
+ on_button_press_event { |widget, event|
941
+ set_focus(true)
942
+ select_region(0, 0)
943
+ }
944
+ end
190
945
  end
191
- end; alias add_scroll_event enable_scroll_events # === add_scroll_event
946
+ end
192
947
 
193
948
  # ========================================================================= #
194
- # === set_scroll_event
949
+ # === shadow_type_etched_in
195
950
  # ========================================================================= #
196
- def set_scroll_event
197
- set_events(Gdk::EventMask::SCROLL_MASK) # Enable scroll-events here.
951
+ def shadow_type_etched_in
952
+ set_shadow_type(::Gtk::SHADOW_ETCHED_IN)
953
+ end
954
+
955
+ # ========================================================================= #
956
+ # === align_to_right
957
+ # ========================================================================= #
958
+ def align_to_right
959
+ set_halign(:end) # halign=Gtk.Align.END
198
960
  end
199
961
 
200
962
  # ========================================================================= #
@@ -206,33 +968,6 @@ class Widget
206
968
  alias parse_markup enable_markup # === parse_markup
207
969
  alias markify enable_markup # === markify
208
970
 
209
- # ========================================================================= #
210
- # === pretty_tooltip
211
- # ========================================================================= #
212
- def pretty_tooltip(i)
213
- if i and i.include?('&')
214
- i = i.dup if i.frozen?
215
- # ===================================================================== #
216
- # Oddly enough, ruby-gtk2 complains about this character.
217
- # The warning was: "Gtk-WARNING **: Failed to set text from
218
- # markup due to error parsing markup" [...] Entity did not
219
- # end with a semicolon; most likely you used an ampersand
220
- # character without intending to start an entity - escape
221
- # ampersand as &amp;"
222
- # So we do this ^^^.
223
- # ===================================================================== #
224
- i.gsub!(/&/, '&amp;')
225
- end
226
- set_tooltip_markup(i)
227
- end; alias pretty_tooltip= pretty_tooltip # === pretty_tooltip=
228
- alias fancy_tooltip= pretty_tooltip # === fancy_tooltip=
229
- alias fancy_tooltips= pretty_tooltip # === fancy_tooltips=
230
- alias hint= pretty_tooltip # === hint=
231
- alias info pretty_tooltip # === info
232
- alias popup_hint pretty_tooltip # === popup_hint
233
- alias fancy_tip pretty_tooltip # === fancy_tip
234
- alias set_hovertip pretty_tooltip # === set_hovertip
235
-
236
971
  # ========================================================================= #
237
972
  # === enable_all_events
238
973
  #
@@ -255,17 +990,6 @@ class Widget
255
990
  alias enable_enter_event enable_all_events # === enable_enter_event
256
991
  alias respond_to_enter_event enable_all_events # === respond_to_enter_event
257
992
 
258
- # ========================================================================= #
259
- # === on_scroll_event
260
- #
261
- # This is the event that occurs when the mouse-scroll-wheel is clicked.
262
- # ========================================================================= #
263
- def on_scroll_event(&block)
264
- signal_connect(:scroll_event, &block)
265
- end; alias on_scrolled on_scroll_event # === on_scrolled
266
- alias on_scrolling on_scroll_event # === on_scrolling
267
- alias on_mouse_scroll_event on_scroll_event # === on_mouse_scroll_event
268
-
269
993
  # ========================================================================= #
270
994
  # === on_mouse_button_clicked
271
995
  # ========================================================================= #
@@ -354,25 +1078,6 @@ class Widget
354
1078
  end; alias on_right_mouse_button_click on_right_mouse_button_clicked # === on_right_mouse_button_click
355
1079
  alias on_right_mouse_button_click_event on_right_mouse_button_clicked # === on_right_mouse_button_click_event
356
1080
 
357
- # ========================================================================= #
358
- # === on_hover
359
- #
360
- # This method can be used to modify the colour of a given widget, on
361
- # a "on-hover" event.
362
- #
363
- # Usage example:
364
- #
365
- # on_hover(:lightblue)
366
- #
367
- # ========================================================================= #
368
- def on_hover(
369
- this_colour = :lightgreen, &block
370
- )
371
- modify_background(
372
- :on_hover, this_colour, &block
373
- )
374
- end; alias on_hover_colour on_hover # === on_hover_colour
375
-
376
1081
  # ========================================================================= #
377
1082
  # === padding=
378
1083
  # ========================================================================= #
@@ -380,39 +1085,6 @@ class Widget
380
1085
  set_border_width(i)
381
1086
  end; alias padding padding= # === padding
382
1087
 
383
- # ========================================================================= #
384
- # === hcenter
385
- #
386
- # The name "hcenter" is an abbreviation for "horizontal center" position.
387
- # ========================================================================= #
388
- def hcenter(
389
- i = :center
390
- )
391
- case i
392
- when :center
393
- i = ::Gtk::Align::CENTER
394
- end
395
- set_halign(i) # Or Gtk::Align::CENTER
396
- end; alias horizontal_center hcenter # === horizontal_center
397
- alias halign_center hcenter # === halign_center
398
- alias hjustify hcenter # === hjustify
399
-
400
- # ========================================================================= #
401
- # === add_hspacer
402
- # ========================================================================= #
403
- def add_hspacer
404
- add(::Gtk.horizontal_spacer)
405
- end; alias add_horizontal_spacer add_hspacer # === add_horizontal_spacer
406
-
407
- # ========================================================================= #
408
- # === align_to_the_middle
409
- # ========================================================================= #
410
- def align_to_the_middle
411
- if respond_to? :set_alignment # Must safeguard it.
412
- set_alignment(0.5)
413
- end
414
- end
415
-
416
1088
  # ========================================================================= #
417
1089
  # === connect_to
418
1090
  #
@@ -439,17 +1111,6 @@ class Widget
439
1111
  signal_connect(:changed, &block)
440
1112
  end; alias on_changed_event on_changed # === on_changed_event
441
1113
 
442
- # ========================================================================= #
443
- # === do_focus
444
- #
445
- # This variant is a slightly nicer-looking variant compared to the
446
- # .set_focus(true) variant.
447
- # ========================================================================= #
448
- def do_focus
449
- set_focus(true)
450
- end; alias do_focus_on_it do_focus # === do_focus_on_it
451
- alias do_select do_focus # === do_select
452
-
453
1114
  # ========================================================================= #
454
1115
  # === on_switch_page
455
1116
  #
@@ -461,30 +1122,11 @@ class Widget
461
1122
  alias on_switched_tab on_switch_page # === on_switched_tab
462
1123
 
463
1124
  # ========================================================================= #
464
- # === use_these_css_classes
465
- #
466
- # This method allows for some convenience in regards to using CSS
467
- # classes. You can pass several CSS classes into this method.
468
- #
469
- # It is important to separate these CSS classes via a
470
- # ' ' character specifically.
471
- #
472
- # Specific usage example:
473
- #
474
- # @frame.use_these_css_classes('no_box_shadow bblack2 BG_black pad0px mar0px')
475
- #
1125
+ # === pad0px
476
1126
  # ========================================================================= #
477
- def use_these_css_classes(i)
478
- # The input has to have a ' ' character, if this method is to work.
479
- if i and i.include?(' ')
480
- i.split(' ').each {|this_css_class|
481
- css_class(this_css_class)
482
- }
483
- else
484
- e 'The given input ('+i.to_s+') does not have a " " character.'
485
- end
486
- end; alias use_these_CSS_classes use_these_css_classes # === use_these_CSS_classes
487
- alias css_classes use_these_css_classes # === css_classes
1127
+ def pad0px
1128
+ css_class('pad0px')
1129
+ end
488
1130
 
489
1131
  # ========================================================================= #
490
1132
  # === pad1px
@@ -550,80 +1192,150 @@ class Widget
550
1192
  end
551
1193
 
552
1194
  # ========================================================================= #
553
- # === pad10px
1195
+ # === pad10px
1196
+ # ========================================================================= #
1197
+ def pad10px
1198
+ css_class('pad10px')
1199
+ end
1200
+
1201
+ # ========================================================================= #
1202
+ # === pad11px
1203
+ # ========================================================================= #
1204
+ def pad11px
1205
+ css_class('pad11px')
1206
+ end
1207
+
1208
+ # ========================================================================= #
1209
+ # === pad12px
1210
+ # ========================================================================= #
1211
+ def pad12px
1212
+ css_class('pad12px')
1213
+ end
1214
+
1215
+ # ========================================================================= #
1216
+ # === pad13px
1217
+ # ========================================================================= #
1218
+ def pad13px
1219
+ css_class('pad13px')
1220
+ end
1221
+
1222
+ # ========================================================================= #
1223
+ # === pad14px
1224
+ # ========================================================================= #
1225
+ def pad14px
1226
+ css_class('pad14px')
1227
+ end
1228
+
1229
+ # ========================================================================= #
1230
+ # === pad15px
1231
+ # ========================================================================= #
1232
+ def pad15px
1233
+ css_class('pad15px')
1234
+ end
1235
+
1236
+ # ========================================================================= #
1237
+ # === pad16px
1238
+ # ========================================================================= #
1239
+ def pad16px
1240
+ css_class('pad16px')
1241
+ end
1242
+
1243
+ # ========================================================================= #
1244
+ # === pad17px
1245
+ # ========================================================================= #
1246
+ def pad17px
1247
+ css_class('pad17px')
1248
+ end
1249
+
1250
+ # ========================================================================= #
1251
+ # === pad18px
1252
+ # ========================================================================= #
1253
+ def pad18px
1254
+ css_class('pad18px')
1255
+ end
1256
+
1257
+ # ========================================================================= #
1258
+ # === pad19px
1259
+ # ========================================================================= #
1260
+ def pad19px
1261
+ css_class('pad19px')
1262
+ end
1263
+
1264
+ # ========================================================================= #
1265
+ # === pad20px
554
1266
  # ========================================================================= #
555
- def pad10px
556
- css_class('pad10px')
1267
+ def pad20px
1268
+ css_class('pad20px')
557
1269
  end
558
1270
 
559
1271
  # ========================================================================= #
560
- # === pad11px
1272
+ # === mar1px
561
1273
  # ========================================================================= #
562
- def pad11px
563
- css_class('pad11px')
1274
+ def mar1px
1275
+ css_class('mar1px')
564
1276
  end
565
1277
 
566
1278
  # ========================================================================= #
567
- # === pad12px
1279
+ # === mar2px
568
1280
  # ========================================================================= #
569
- def pad12px
570
- css_class('pad12px')
1281
+ def mar2px
1282
+ css_class('mar2px')
571
1283
  end
572
1284
 
573
1285
  # ========================================================================= #
574
- # === pad13px
1286
+ # === mar3px
575
1287
  # ========================================================================= #
576
- def pad13px
577
- css_class('pad13px')
1288
+ def mar3px
1289
+ css_class('mar3px')
578
1290
  end
579
1291
 
580
1292
  # ========================================================================= #
581
- # === pad14px
1293
+ # === mar4px
582
1294
  # ========================================================================= #
583
- def pad14px
584
- css_class('pad14px')
1295
+ def mar4px
1296
+ css_class('mar4px')
585
1297
  end
586
1298
 
587
1299
  # ========================================================================= #
588
- # === pad15px
1300
+ # === mar5px
589
1301
  # ========================================================================= #
590
- def pad15px
591
- css_class('pad15px')
1302
+ def mar5px
1303
+ css_class('mar5px')
592
1304
  end
593
1305
 
594
1306
  # ========================================================================= #
595
- # === pad16px
1307
+ # === mar6px
596
1308
  # ========================================================================= #
597
- def pad16px
598
- css_class('pad16px')
1309
+ def mar6px
1310
+ css_class('mar6px')
599
1311
  end
600
1312
 
601
1313
  # ========================================================================= #
602
- # === pad17px
1314
+ # === mar7px
603
1315
  # ========================================================================= #
604
- def pad17px
605
- css_class('pad17px')
1316
+ def mar7px
1317
+ css_class('mar7px')
606
1318
  end
607
1319
 
608
1320
  # ========================================================================= #
609
- # === pad18px
1321
+ # === mar8px
610
1322
  # ========================================================================= #
611
- def pad18px
612
- css_class('pad18px')
1323
+ def mar8px
1324
+ css_class('mar8px')
613
1325
  end
614
1326
 
615
1327
  # ========================================================================= #
616
- # === pad19px
1328
+ # === mar9px
617
1329
  # ========================================================================= #
618
- def pad19px
619
- css_class('pad19px')
1330
+ def mar9px
1331
+ css_class('mar9px')
620
1332
  end
621
1333
 
622
1334
  # ========================================================================= #
623
- # === pad20px
1335
+ # === mar10px
624
1336
  # ========================================================================= #
625
- def pad20px
626
- css_class('pad20px')
1337
+ def mar10px
1338
+ css_class('mar10px')
627
1339
  end
628
1340
 
629
1341
  require 'gtk_paradise/colours/parse.rb'
@@ -745,52 +1457,6 @@ class Widget
745
1457
  end
746
1458
  end
747
1459
 
748
- # ========================================================================= #
749
- # === bblack1px
750
- # ========================================================================= #
751
- def bblack1px
752
- css_class('bblack1')
753
- end; alias bblack1 bblack1px # === bblack1
754
-
755
- # ========================================================================= #
756
- # === bblack2px
757
- # ========================================================================= #
758
- def bblack2px
759
- css_class('bblack2')
760
- end; alias bblack2 bblack2px # === bblack2
761
-
762
- # ========================================================================= #
763
- # === bblack3px
764
- # ========================================================================= #
765
- def bblack3px
766
- css_class('bblack3')
767
- end; alias bblack3 bblack3px # === bblack3
768
-
769
- # ========================================================================= #
770
- # === bblack4px
771
- # ========================================================================= #
772
- def bblack4px
773
- css_class('bblack4')
774
- end; alias bblack4 bblack4px # === bblack4
775
-
776
- # ========================================================================= #
777
- # === bblack5px
778
- # ========================================================================= #
779
- def bblack5px
780
- css_class('bblack5')
781
- end; alias bblack5 bblack5px # === bblack5
782
-
783
- # ========================================================================= #
784
- # === remove_css_class
785
- #
786
- # This method can be used to remove a particular CSS class from a
787
- # widget.
788
- # ========================================================================= #
789
- def remove_css_class(this_css_class)
790
- context = style_context
791
- context.remove_class(this_css_class)
792
- end; alias remove_this_css_class remove_css_class # === remove_this_css_class
793
-
794
1460
  # ========================================================================= #
795
1461
  # === sync_connect
796
1462
  #
@@ -822,6 +1488,13 @@ class Widget
822
1488
  )
823
1489
  if ::Gtk.use_gtk2?
824
1490
  pack_start(widget, true, true, padding_to_use)
1491
+ elsif ::Gtk.use_gtk4?
1492
+ append(widget)
1493
+ if padding_to_use
1494
+ css_class(
1495
+ 'pad'+padding_to_use.to_s+'px'
1496
+ )
1497
+ end
825
1498
  else
826
1499
  pack_start(widget, expand: true, fill: true, padding: padding_to_use)
827
1500
  end
@@ -868,20 +1541,6 @@ class Widget
868
1541
  set_border_width(8)
869
1542
  end
870
1543
 
871
- # ========================================================================= #
872
- # === intelligent_exit
873
- # ========================================================================= #
874
- def intelligent_exit
875
- signal_connect(:destroy) { ::Gtk.main_quit }
876
- end
877
-
878
- # ========================================================================= #
879
- # === quit_on_child_exited_signal
880
- # ========================================================================= #
881
- def quit_on_child_exited_signal
882
- signal_connect(:child_exited) { gtk_main_quit }
883
- end
884
-
885
1544
  # ========================================================================= #
886
1545
  # === on_button_press_event
887
1546
  # ========================================================================= #
@@ -889,48 +1548,6 @@ class Widget
889
1548
  signal_connect(:button_press_event, &block)
890
1549
  end
891
1550
 
892
- # ========================================================================= #
893
- # === on_click_event
894
- #
895
- # This is a shortcut to respond to an on-click event, which is the
896
- # left mouse click normally.
897
- #
898
- # You can enable this in your code by doing:
899
- #
900
- # .on_click_event { :highlight_text }
901
- # .on_click_event { :deselect_text }
902
- #
903
- # ========================================================================= #
904
- def on_click_event
905
- if block_given?
906
- yielded = yield
907
- case yielded
908
- # ===================================================================== #
909
- # === :highlight_text
910
- # ===================================================================== #
911
- when :highlight_text,
912
- :select_everything,
913
- :select_text
914
- on_button_press_event { |widget, event|
915
- set_focus(true)
916
- select_region(0, -1)
917
- }
918
- # ===================================================================== #
919
- # === :deselect_text
920
- #
921
- # This will deselect any selection on a gtk-entry. It is not as
922
- # useful as the :highlight_text functionality, but I wanted to
923
- # provide both, simply to quickly show how it is done.
924
- # ===================================================================== #
925
- when :deselect_text
926
- on_button_press_event { |widget, event|
927
- set_focus(true)
928
- select_region(0, 0)
929
- }
930
- end
931
- end
932
- end
933
-
934
1551
  # ========================================================================= #
935
1552
  # === on_key_pressed
936
1553
  #
@@ -952,61 +1569,6 @@ class Widget
952
1569
  alias on_enter_key_clicked on_key_pressed # === on_enter_key_clicked
953
1570
  alias on_the_enter_key_was_pressed on_key_pressed # === on_the_enter_key_was_pressed
954
1571
 
955
- # ========================================================================= #
956
- # === set_background_colour
957
- #
958
- # This method can be used to designate a specific background colour
959
- # for a Gtk::Button.
960
- # ========================================================================= #
961
- def set_background_colour(
962
- i = :whitesmoke
963
- )
964
- if ::Gtk.use_gtk2?
965
- modify_bg(
966
- ::Gtk::STATE_NORMAL,
967
- Gdk::Color.parse(i.to_s)
968
- )
969
- else
970
- if i.is_a? Gdk::Color
971
- # =================================================================== #
972
- # Convert it into RGB values next.
973
- # =================================================================== #
974
- array = [
975
- (i.red * 100.0 / 65535) / 100,
976
- (i.green * 100.0 / 65535) / 100,
977
- (i.blue * 100.0 / 65535) / 100,
978
- 1.0
979
- ]
980
- i = Gdk::RGBA.new(*array)
981
- end
982
- override_background_color(:normal, i)
983
- end
984
- @background_colour = i
985
- end; alias set_background_color set_background_colour # === set_background_color
986
- alias bg_colour set_background_colour # === bg_colour
987
- alias bg_colour= set_background_colour # === bg_colour=
988
- alias bg_color set_background_colour # === bg_colour
989
- alias background set_background_colour # === background
990
- alias background= set_background_colour # === background=
991
- alias background_color set_background_colour # === background_color
992
- alias background_colour set_background_colour # === background_colour
993
- alias background_colour= set_background_colour # === background_colour=
994
- alias background_color= set_background_colour # === background_color=
995
- alias set_background set_background_colour # === set_background
996
- alias change_background_to set_background_colour # === change_background_to
997
- alias change_background_colour_to set_background_colour # === change_background_colour_to
998
- alias change_background_color_to set_background_colour # === change_background_color_to
999
-
1000
- # ========================================================================= #
1001
- # === clear_background
1002
- #
1003
- # This method will clear the border.
1004
- # ========================================================================= #
1005
- def clear_background
1006
- css_class('clear_background')
1007
- end; alias clear_border clear_background # === clear_border
1008
- alias remove_background clear_background # === remove_background
1009
-
1010
1572
  # ========================================================================= #
1011
1573
  # === do_focus
1012
1574
  # ========================================================================= #
@@ -1015,85 +1577,45 @@ class Widget
1015
1577
  end
1016
1578
 
1017
1579
  # ========================================================================= #
1018
- # === background_colour?
1019
- # ========================================================================= #
1020
- def background_colour?
1021
- return @background_colour
1022
- end
1023
-
1024
- # ========================================================================= #
1025
- # === simple_markup
1026
- # ========================================================================= #
1027
- def simple_markup(*i)
1028
- _ = ''.dup
1029
- i.flatten.each_slice(2).each {|text_to_display, colour_to_use|
1030
- if colour_to_use
1031
- _ << '<span weight="bold" foreground="'+colour_to_use.to_s+'">'+
1032
- text_to_display.to_s+'</span>'
1033
- else
1034
- _ << text_to_display.to_s
1035
- end
1036
- }
1037
- set_markup(_)
1038
- end
1039
-
1040
- # ========================================================================= #
1041
- # === focus_in_event
1042
- # ========================================================================= #
1043
- def focus_in_event(&block)
1044
- signal_connect(:focus_in_event, &block)
1045
- end; alias on_focus_in_event focus_in_event # === on_focus_in_event
1046
-
1047
- # ========================================================================= #
1048
- # === add_button_press_events
1049
- # ========================================================================= #
1050
- def add_button_press_events
1051
- if ::Gtk.use_gtk2?
1052
- add_events(Gdk::Event::BUTTON_PRESS_MASK)
1053
- else # else for ruby-gtk3
1054
- add_events(Gdk::EventMask::BUTTON_PRESS_MASK)
1055
- end
1056
- end; alias enable_context_menu_on_button_click_events add_button_press_events # === enable_context_menu_on_button_click_events
1057
- alias enable_context_menu add_button_press_events # === enable_context_menu
1058
-
1059
- # ========================================================================= #
1060
- # === set_font
1061
- #
1062
- # This is a slightly simpler way to set the font. We also allow for
1063
- # Symbols here, such as :hack_25. This refers to the font called "Hack",
1064
- # with a size of 25. Not all symbols are enabled, mind you - I only use
1065
- # some, but may extend more over the coming months and years.
1066
- # ========================================================================= #
1067
- def set_font(
1068
- i = :dejavu_condensed_50
1069
- )
1070
- if i.is_a? Symbol
1071
- i = ::Gtk.expand_this_font(i)
1072
- end
1073
- i = Pango::FontDescription.new(i)
1074
- if ::Gtk.use_gtk2?
1075
- modify_font(i)
1076
- else
1077
- override_font(i)
1078
- end
1079
- end; alias font set_font # === font
1580
+ # === background_colour?
1581
+ # ========================================================================= #
1582
+ def background_colour?
1583
+ return @background_colour
1584
+ end
1080
1585
 
1081
1586
  # ========================================================================= #
1082
- # === width_height
1587
+ # === simple_markup
1083
1588
  # ========================================================================= #
1084
- def width_height(
1085
- width = 500,
1086
- height = 150
1087
- )
1088
- set_size_request(width, height)
1589
+ def simple_markup(*i)
1590
+ _ = ''.dup
1591
+ i.flatten.each_slice(2).each {|text_to_display, colour_to_use|
1592
+ if colour_to_use
1593
+ _ << '<span weight="bold" foreground="'+colour_to_use.to_s+'">'+
1594
+ text_to_display.to_s+'</span>'
1595
+ else
1596
+ _ << text_to_display.to_s
1597
+ end
1598
+ }
1599
+ set_markup(_)
1089
1600
  end
1090
1601
 
1602
+ # ========================================================================= #
1603
+ # === focus_in_event
1604
+ # ========================================================================= #
1605
+ def focus_in_event(&block)
1606
+ signal_connect(:focus_in_event, &block)
1607
+ end; alias on_focus_in_event focus_in_event # === on_focus_in_event
1608
+
1091
1609
  # ========================================================================= #
1092
1610
  # === grey_out
1611
+ #
1612
+ # This is typically used for gtk-button, to "grey" out the button, thus
1613
+ # make it no longer sensitive to user-input change.
1093
1614
  # ========================================================================= #
1094
1615
  def grey_out
1095
1616
  set_sensitive(false)
1096
- end; alias not_sensitive grey_out # === not_sensitive
1617
+ end; alias not_sensitive grey_out # === not_sensitive
1618
+ alias is_insensitive grey_out # === is_insensitive
1097
1619
 
1098
1620
  # ========================================================================= #
1099
1621
  # === grey_in
@@ -1112,6 +1634,8 @@ class Widget
1112
1634
 
1113
1635
  # ========================================================================= #
1114
1636
  # === transition_change_background_to
1637
+ #
1638
+ # The first argument should be the target colour.
1115
1639
  # ========================================================================= #
1116
1640
  def transition_change_background_to(
1117
1641
  to_this_colour = :lightgreen,
@@ -1173,7 +1697,6 @@ class Widget
1173
1697
  signal_connect(:key_press_event, &block)
1174
1698
  end
1175
1699
 
1176
- require 'gtk_paradise/toplevel_methods/tooltips.rb'
1177
1700
  # ========================================================================= #
1178
1701
  # === tooltip=
1179
1702
  # ========================================================================= #
@@ -1188,101 +1711,6 @@ class Widget
1188
1711
  signal_connect(:value_changed, &block)
1189
1712
  end
1190
1713
 
1191
- # ========================================================================= #
1192
- # === modify_background
1193
- #
1194
- # This method will set the background colour for a widget in a
1195
- # particular state. All other style values are left untouched.
1196
- # See also Gtk::Widget#modify_style.
1197
- #
1198
- # The arguments are:
1199
- #
1200
- # state: the state(GtkStateType) for which to set the
1201
- # background color.
1202
- #
1203
- # colour: the Gdk::Color to assign (does not need to
1204
- # be allocated).
1205
- #
1206
- # ========================================================================= #
1207
- def modify_background(
1208
- state,
1209
- colour = nil,
1210
- &block
1211
- )
1212
- # ======================================================================= #
1213
- # === Handle Hashes first, for the variable state
1214
- # ======================================================================= #
1215
- if colour.is_a? Hash
1216
- if colour.has_key? :colour
1217
- colour = colour.delete(:colour)
1218
- end
1219
- end
1220
- case state
1221
- # ======================================================================= #
1222
- # === :normal
1223
- #
1224
- # This entry point is the default entry point.
1225
- # ======================================================================= #
1226
- when :normal,
1227
- :default
1228
- if Gtk.do_we_use_gtk2?
1229
- state = ::Gtk::STATE_NORMAL
1230
- else
1231
- state = :normal
1232
- end
1233
- # ======================================================================= #
1234
- # === :active
1235
- # ======================================================================= #
1236
- when :active
1237
- if Gtk.do_we_use_gtk2?
1238
- state = ::Gtk::STATE_ACTIVE
1239
- else
1240
- state = :active
1241
- end
1242
- # ======================================================================= #
1243
- # === :prelight
1244
- # ======================================================================= #
1245
- when :prelight,
1246
- :hover,
1247
- :on_hover
1248
- if Gtk.do_we_use_gtk2?
1249
- state = ::Gtk::STATE_PRELIGHT
1250
- else
1251
- state = :prelight
1252
- end
1253
- end
1254
- # ======================================================================= #
1255
- # === Handle blocks next
1256
- # ======================================================================= #
1257
- if block_given?
1258
- yielded = yield
1259
- if yielded.is_a?(Symbol)
1260
- colour = yielded
1261
- end
1262
- end
1263
- if colour.is_a? Symbol
1264
- # ===================================================================== #
1265
- # Convert it into a Gtk::Colours representation. We could check if it
1266
- # is a valid html-colour, but for the time being we do not do this.
1267
- # ===================================================================== #
1268
- if Gtk.do_we_use_gtk2?
1269
- colour = ::Gtk.colour_parse(colour)
1270
- # =================================================================== #
1271
- # gtk3 now uses RGBA rather than Gdk.parse().
1272
- # RGBA stands for red, green, blue and alpha.
1273
- # The values go from 0.0 to 1.0. However had, it seems as if
1274
- # ruby-gtk3 also supports HTML colours directly, so no need
1275
- # to convert them.
1276
- # =================================================================== #
1277
- end
1278
- end
1279
- if Gtk.do_we_use_gtk2?
1280
- modify_bg(state, colour) # Delegate to the original method here.
1281
- else
1282
- override_background_color(state, colour)
1283
- end
1284
- end
1285
-
1286
1714
  # ========================================================================= #
1287
1715
  # === tooltip
1288
1716
  #
@@ -1296,7 +1724,7 @@ class Widget
1296
1724
  )
1297
1725
  if ::Gtk.use_gtk2?
1298
1726
  ::Gtk::Tooltips.new.set_tip(self, text_for_the_tooltip, nil)
1299
- else # else assume ruby-gtk3.
1727
+ else # else assume ruby-gtk3 or ruby-gtk4.
1300
1728
  if text_for_the_tooltip.is_a? String
1301
1729
  text_for_the_tooltip = { text: text_for_the_tooltip }
1302
1730
  end
@@ -1305,41 +1733,6 @@ class Widget
1305
1733
  end; alias use_this_tooltip tooltip # === use_this_tooltip
1306
1734
  # alias tooltip= tooltip # === tooltip=
1307
1735
 
1308
- # ========================================================================= #
1309
- # === modify_to_this_font
1310
- #
1311
- # This will modify the font for that particular widget at hand.
1312
- #
1313
- # Usage example:
1314
- #
1315
- # modify_this_font(:liberation)
1316
- #
1317
- # ========================================================================= #
1318
- def modify_to_this_font(
1319
- this_font = 'Sans 20'
1320
- )
1321
- this_font = ::Gtk.expand_this_font(this_font)
1322
- _ = Pango::FontDescription.new(this_font)
1323
- if Gtk.are_we_using_gtk2?
1324
- modify_font(_)
1325
- else
1326
- override_font(_)
1327
- end
1328
- end; alias modify_this_font modify_to_this_font # === modify_this_font
1329
- alias font_to_use= modify_to_this_font # === font_to_use=
1330
-
1331
- # ========================================================================= #
1332
- # === deselect
1333
- #
1334
- # Note that this method will NOT work on every gtk-widget; the primary
1335
- # use case has been for gtk-entry, but I figured that other gtk-widgets
1336
- # may benefit from this method as well, so it was added onto class
1337
- # Gtk::Widget.
1338
- # ========================================================================= #
1339
- def deselect
1340
- select_region(0, 0)
1341
- end
1342
-
1343
1736
  # ========================================================================= #
1344
1737
  # === read_only
1345
1738
  # ========================================================================= #
@@ -1402,12 +1795,16 @@ class Widget
1402
1795
  # ========================================================================= #
1403
1796
  # === make_bold
1404
1797
  #
1405
- # This method can be used to make a widget bold.
1798
+ # This method can be used to make a widget bold. In ruby-gtk4 this has
1799
+ # changed, though. I am not 100% positive yet, but I think it has
1800
+ # changed.
1406
1801
  # ========================================================================= #
1407
1802
  def make_bold
1408
- override_font(
1409
- Pango::FontDescription.new('bold')
1410
- )
1803
+ # if use_gtk3?
1804
+ override_font(
1805
+ Pango::FontDescription.new('bold')
1806
+ )
1807
+ #end
1411
1808
  end; alias bold make_bold # === bold
1412
1809
 
1413
1810
  # ========================================================================= #
@@ -1419,4 +1816,119 @@ class Widget
1419
1816
  signal_connect(:toggled, &block)
1420
1817
  end
1421
1818
 
1819
+ # ========================================================================= #
1820
+ # === quit_on_child_exited_signal
1821
+ # ========================================================================= #
1822
+ def quit_on_child_exited_signal
1823
+ signal_connect(:child_exited) { gtk_main_quit }
1824
+ end
1825
+
1826
+ # ========================================================================= #
1827
+ # === intelligent_exit
1828
+ # ========================================================================= #
1829
+ def intelligent_exit
1830
+ signal_connect(:destroy) { ::Gtk.main_quit }
1831
+ end
1832
+
1833
+ # ========================================================================= #
1834
+ # === pack_without_expand (minimal tag)
1835
+ # ========================================================================= #
1836
+ def pack_without_expand(
1837
+ widget,
1838
+ padding_to_use = 0
1839
+ )
1840
+ # ======================================================================= #
1841
+ # The second argument may be a Hash. If this is the case we check for
1842
+ # it's "type".
1843
+ # ======================================================================= #
1844
+ if padding_to_use.is_a? Hash
1845
+ work_on_a_copy = padding_to_use.dup # To avoid side-effects.
1846
+ # ===================================================================== #
1847
+ # === :padding
1848
+ # ===================================================================== #
1849
+ if work_on_a_copy.has_key? :padding
1850
+ padding_to_use = work_on_a_copy[:padding]
1851
+ end
1852
+ end
1853
+ # ======================================================================= #
1854
+ # === Handle ruby-gtk2 first
1855
+ # ======================================================================= #
1856
+ if ::Gtk.use_gtk2?
1857
+ begin
1858
+ pack_start(
1859
+ widget,
1860
+ false,
1861
+ false,
1862
+ padding_to_use
1863
+ )
1864
+ rescue ArgumentError => error
1865
+ puts 'An error happened in '+__FILE__+' (method: pack_without_expand())'
1866
+ pp error
1867
+ puts 'caller() was:'
1868
+ pp caller()
1869
+ exit
1870
+ end
1871
+ elsif ::Gtk.use_gtk4?
1872
+ # ===================================================================== #
1873
+ # === Handle ruby-gtk4 here
1874
+ # ===================================================================== #
1875
+ append(
1876
+ widget
1877
+ )
1878
+ if padding_to_use
1879
+ css_class(
1880
+ 'pad'+padding_to_use.to_s+'px'
1881
+ )
1882
+ end
1883
+ else # else handle ruby-gtk3
1884
+ pack_start(
1885
+ widget,
1886
+ expand: false,
1887
+ fill: false,
1888
+ padding: padding_to_use
1889
+ )
1890
+ end
1891
+ end; alias pack_minimal pack_without_expand # === pack_minimal
1892
+ alias minimal pack_without_expand # === minimal
1893
+ # ======================================================================= #
1894
+ # In the past we added an alias called append(). This is not
1895
+ # possible in ruby gtk4.
1896
+ # ======================================================================= #
1897
+ unless ::Gtk.use_gtk4?
1898
+ alias append pack_without_expand # === append
1899
+ end
1900
+
1901
+ # ========================================================================= #
1902
+ # === set_font
1903
+ #
1904
+ # This is a slightly simpler way to set the font. We also allow for
1905
+ # Symbols here, such as :hack_25. This refers to the font called "Hack",
1906
+ # with a size of 25. Not all symbols are enabled, mind you - I only use
1907
+ # some, but may extend more over the coming months and years.
1908
+ # ========================================================================= #
1909
+ def set_font(
1910
+ i = :dejavu_condensed_50
1911
+ )
1912
+ if i.is_a? Symbol
1913
+ i = ::Gtk.expand_this_font(i)
1914
+ end
1915
+ i = Pango::FontDescription.new(i)
1916
+ if ::Gtk.use_gtk2?
1917
+ modify_font(i)
1918
+ elsif ::Gtk.use_gtk3?
1919
+ override_font(i)
1920
+ elsif ::Gtk.use_gtk4?
1921
+ # ===================================================================== #
1922
+ # Add it as a CSS rule next:
1923
+ # ===================================================================== #
1924
+ use_this_new_CSS_rule = '.font_'+i.to_s.downcase.tr(' ','_')+' {
1925
+ font-family: '+i.to_s+';
1926
+ }
1927
+ '
1928
+ css_class(use_this_new_CSS_rule)
1929
+ else
1930
+ e 'Unknown engine in use.'
1931
+ end
1932
+ end; alias font set_font # === font
1933
+
1422
1934
  end; end