[gtkmm-documentation] examples: Update for latest gtkmm4 (remove Gtk::ShadowType, etc.)



commit 7dc55b35e9316691acf37ee3ff551ddc7caac5c2
Author: Kjell Ahlstedt <kjellahlstedt gmail com>
Date:   Mon Apr 27 15:17:14 2020 +0200

    examples: Update for latest gtkmm4 (remove Gtk::ShadowType, etc.)
    
    * examples/book/label/examplewindow.cc: Label::set_pattern() is replaced
    by Pango markup to get underlined text.
    * examples/book/popover/examplewindow.[cc|h]: The ToggleButton has been
    replaced by a MenuButton. gtk_get_current_event() has been removed in gtk,
    which made it more difficult to decide where to show a Popover when
    a day is selected.
    
    Minor changes in several other example programs.

 examples/book/aspectframe/examplewindow.cc         |  2 +-
 examples/book/frame/examplewindow.cc               |  5 +-
 examples/book/label/examplewindow.cc               |  9 ++-
 examples/book/popover/examplewindow.cc             | 70 ++++++++++++++--------
 examples/book/popover/examplewindow.h              | 19 ++++--
 .../treeview/custom_treemodel/examplewindow.cc     |  2 +-
 .../others/cellrenderercustom/cellrendererlist.cc  |  2 -
 .../others/cellrenderercustom/cellrendererpopup.cc |  5 +-
 8 files changed, 70 insertions(+), 44 deletions(-)
---
diff --git a/examples/book/aspectframe/examplewindow.cc b/examples/book/aspectframe/examplewindow.cc
index c8b6cfd..a7b6568 100644
--- a/examples/book/aspectframe/examplewindow.cc
+++ b/examples/book/aspectframe/examplewindow.cc
@@ -17,7 +17,7 @@
 #include "examplewindow.h"
 
 ExampleWindow::ExampleWindow()
-: m_AspectFrame("2x1", /* label */
+: m_AspectFrame(
     Gtk::Align::CENTER, /* center x */
     Gtk::Align::CENTER, /* center y */
     2.0, /* xsize/ysize = 2 */
diff --git a/examples/book/frame/examplewindow.cc b/examples/book/frame/examplewindow.cc
index c5f5699..5072f02 100644
--- a/examples/book/frame/examplewindow.cc
+++ b/examples/book/frame/examplewindow.cc
@@ -31,10 +31,7 @@ ExampleWindow::ExampleWindow()
   m_Frame.set_label("Gtk::Frame Widget");
 
   /* Align the label at the right of the frame */
-  //m_Frame.set_label_align(Gtk::Align::END, Gtk::Align::START);
-
-  /* Set the style of the frame */
-  m_Frame.set_shadow_type(Gtk::ShadowType::ETCHED_OUT);
+  m_Frame.set_label_align(Gtk::Align::END);
 }
 
 ExampleWindow::~ExampleWindow()
diff --git a/examples/book/label/examplewindow.cc b/examples/book/label/examplewindow.cc
index 0a57dd5..7963b28 100644
--- a/examples/book/label/examplewindow.cc
+++ b/examples/book/label/examplewindow.cc
@@ -33,8 +33,9 @@ ExampleWindow::ExampleWindow()
   m_Label_Multi("This is a Multi-line label.\nSecond line\nThird line"),
   m_Label_Left("This is a Left-Justified\nMulti-line label.\nThird line"),
   m_Label_Right("This is a Right-Justified\nMulti-line label.\nThird line"),
-  m_Label_Underlined("This label is underlined!\n"
-          "This one is underlined in quite a funky fashion")
+  m_Label_Underlined("<u>This label is underlined!</u>\n"
+          "<u>T</u>h<u>is one is</u> <u>u</u>n<u>derlin</u>ed "
+          "in<u> q</u>u<u>ite a f</u>u<u>nky</u> fashion")
 {
   set_title("Label");
 
@@ -92,9 +93,7 @@ ExampleWindow::ExampleWindow()
   m_VBox2.add(m_Frame_FilledWrapped);
 
   m_Label_Underlined.set_justify(Gtk::Justification::LEFT);
-  m_Label_Underlined.set_pattern (
-          "_________________________ _ _________ _ ______"
-          "     __ _______ ___");
+  m_Label_Underlined.set_use_markup(true);
   m_Frame_Underlined.add(m_Label_Underlined);
   m_VBox2.add(m_Frame_Underlined);
 }
diff --git a/examples/book/popover/examplewindow.cc b/examples/book/popover/examplewindow.cc
index a6a748a..5d4dc4e 100644
--- a/examples/book/popover/examplewindow.cc
+++ b/examples/book/popover/examplewindow.cc
@@ -18,7 +18,7 @@
 
 ExampleWindow::ExampleWindow()
  : m_format_buttons_box(Gtk::Orientation::HORIZONTAL),
-   m_toggle_button("Button"),
+   m_menu_button(),
    m_toggle_form_label("Non-modal Popover"),
    m_toggle_form_combo_label("Popover position:"),
    m_calendar_popover_label("Label:")
@@ -28,7 +28,8 @@ ExampleWindow::ExampleWindow()
   set_default_size(500, -1);
 
   // Button
-  m_toggle_button.signal_toggled().connect(sigc::mem_fun(*this, &ExampleWindow::on_button_toggled));
+  m_menu_button.set_label("Button");
+  m_menu_button.set_popover(m_toggle_form_popover);
 
   // Form popover
   configure_form_popover();
@@ -41,7 +42,7 @@ ExampleWindow::ExampleWindow()
 
   // Layout
   m_grid.set_row_spacing(6);
-  m_grid.attach(m_toggle_button, 0, 0, 1, 1);
+  m_grid.attach(m_menu_button, 0, 0, 1, 1);
   m_grid.attach(m_calendar, 0, 1, 6, 1);
   m_grid.set_margin(12);
   add(m_grid);
@@ -49,12 +50,7 @@ ExampleWindow::ExampleWindow()
 
 ExampleWindow::~ExampleWindow()
 {
-}
-
-void ExampleWindow::on_button_toggled()
-{
-  bool active = m_toggle_button.get_active();
-  m_toggle_form_popover.set_visible(active);
+  m_calendar_popover.unparent();
 }
 
 void ExampleWindow::configure_form_popover()
@@ -69,7 +65,6 @@ void ExampleWindow::configure_form_popover()
   m_toggle_form_grid.attach(m_toggle_form_combo_label, 0, 2, 1, 1);
   m_toggle_form_grid.attach(m_toggle_form_combo, 1, 2, 1, 1);
 
-  m_toggle_form_popover.set_parent(m_toggle_button);
   m_toggle_form_popover.add(m_toggle_form_grid);
   m_toggle_form_popover.set_position(Gtk::PositionType::BOTTOM);
   m_toggle_form_popover.set_margin(6);
@@ -124,11 +119,16 @@ void ExampleWindow::on_combo_changed()
 
 void ExampleWindow::configure_cal_popover()
 {
+  m_calendar_event_controller = Gtk::GestureClick::create();
+  m_calendar_event_controller->signal_pressed().connect(sigc::mem_fun(*this, 
&ExampleWindow::on_button_pressed));
+  m_calendar_event_controller->signal_released().connect(sigc::mem_fun(*this, 
&ExampleWindow::on_button_released));
+  m_calendar.add_controller(m_calendar_event_controller);
+
   m_calendar.signal_day_selected().connect(sigc::mem_fun(*this, &ExampleWindow::on_day_selected));
 
   m_calendar_form_grid.set_column_spacing(6);
-  m_calendar_form_grid.attach(m_calendar_popover_label, 0, 0, 1, 1);
-  m_calendar_form_grid.attach(m_calendar_popover_entry, 1, 0, 1, 1);
+  m_calendar_form_grid.attach(m_calendar_popover_label, 0, 0);
+  m_calendar_form_grid.attach(m_calendar_popover_entry, 1, 0);
 
   m_calendar_popover.set_parent(m_calendar);
   m_calendar_popover.add(m_calendar_form_grid);
@@ -137,24 +137,44 @@ void ExampleWindow::configure_cal_popover()
 
 void ExampleWindow::on_day_selected()
 {
-  const auto current_event = Glib::wrap(gtk_get_current_event(), false);
+  if (m_button_pressed_called)
+  {
+    // on_button_pressed() was called before on_day_selected().
+    show_calendar_popover(m_button_pressed_x, m_button_pressed_y);
+    m_button_pressed_called = false;
+  }
+  else
+  {
+    m_day_selected_called = true;
+  }
+}
 
-  if (current_event->get_event_type() != Gdk::Event::Type::BUTTON_PRESS)
-    return;
+void ExampleWindow::on_button_pressed(int, double x, double y)
+{
+  if (m_day_selected_called)
+  {
+    // on_day_selected() was called before on_button_pressed().
+    show_calendar_popover(x, y);
+    m_day_selected_called = false;
+  }
+  else
+  {
+    m_button_pressed_x = x;
+    m_button_pressed_y = y;
+    m_button_pressed_called = true;
+  }
+}
 
-  double x = 0.0;
-  double y = 0.0;
-  current_event->get_position(x, y);
-  Gdk::Rectangle rect;
-  auto allocation = m_calendar.get_allocation();
-  rect.set_x(x - allocation.get_x());
-  rect.set_y(y - allocation.get_y());
-  rect.set_width(1);
-  rect.set_height(1);
+void ExampleWindow::on_button_released(int, double, double)
+{
+  m_button_pressed_called = false;
+}
 
+void ExampleWindow::show_calendar_popover(double x, double y)
+{
+  const Gdk::Rectangle rect(x, y, 1, 1);
   m_calendar_popover.set_pointing_to(rect);
   m_calendar_popover.set_visible(true);
 
   m_calendar_popover_entry.set_text("");
 }
-
diff --git a/examples/book/popover/examplewindow.h b/examples/book/popover/examplewindow.h
index dbdb187..271849c 100644
--- a/examples/book/popover/examplewindow.h
+++ b/examples/book/popover/examplewindow.h
@@ -26,10 +26,11 @@ public:
   virtual ~ExampleWindow();
 
 protected:
-  // Slots
-  void on_button_toggled();
+  // Signal handlers
   void on_combo_changed();
   void on_day_selected();
+  void on_button_pressed(int n_press, double x, double y);
+  void on_button_released(int n_press, double x, double y);
 
   // Containers
   Gtk::Grid m_grid;
@@ -38,7 +39,7 @@ protected:
   Gtk::Grid m_calendar_form_grid;
 
   // Widgets
-  Gtk::ToggleButton m_toggle_button;
+  Gtk::MenuButton m_menu_button;
 
   Gtk::Popover m_toggle_form_popover;
   Gtk::Label m_toggle_form_label;
@@ -51,13 +52,21 @@ protected:
   Gtk::Label m_calendar_popover_label;
   Gtk::Entry m_calendar_popover_entry;
 
+  // Event controller
+  Glib::RefPtr<Gtk::GestureClick> m_calendar_event_controller;
+
 private:
   void configure_form_popover();
   void configure_form_buttons();
   void configure_form_combo();
-
   void configure_cal_popover();
+
+  void show_calendar_popover(double x, double y);
+
+  double m_button_pressed_x;
+  double m_button_pressed_y;
+  bool m_button_pressed_called = false;
+  bool m_day_selected_called = false;
 };
 
 #endif // GTKMM_EXAMPLEWINDOW_H
-
diff --git a/examples/book/treeview/custom_treemodel/examplewindow.cc 
b/examples/book/treeview/custom_treemodel/examplewindow.cc
index 00aa71f..9d9aeba 100644
--- a/examples/book/treeview/custom_treemodel/examplewindow.cc
+++ b/examples/book/treeview/custom_treemodel/examplewindow.cc
@@ -36,7 +36,7 @@ ExampleWindow::ExampleWindow()
 
   // Only show the scrollbars when they are necessary:
   m_ScrolledWindow.set_policy(Gtk::PolicyType::AUTOMATIC, Gtk::PolicyType::AUTOMATIC);
-  m_ScrolledWindow.set_shadow_type(Gtk::ShadowType::ETCHED_IN);
+  m_ScrolledWindow.set_has_frame(true);
   m_ScrolledWindow.set_expand();
 
   m_VBox.add(m_ScrolledWindow);
diff --git a/examples/others/cellrenderercustom/cellrendererlist.cc 
b/examples/others/cellrenderercustom/cellrendererlist.cc
index 92f7e08..2e14d4f 100644
--- a/examples/others/cellrenderercustom/cellrendererlist.cc
+++ b/examples/others/cellrenderercustom/cellrendererlist.cc
@@ -18,7 +18,6 @@
 #include "cellrendererlist.h"
 #include "popupentry.h"
 
-
 namespace
 {
 
@@ -61,7 +60,6 @@ CellRendererList::CellRendererList()
   get_popup_window()->add(*frame);
 
   frame->add(tree_view_);
-  frame->set_shadow_type(Gtk::ShadowType::OUT);
 
   set_focus_widget(tree_view_);
 }
diff --git a/examples/others/cellrenderercustom/cellrendererpopup.cc 
b/examples/others/cellrenderercustom/cellrendererpopup.cc
index b4848b1..6491fa3 100644
--- a/examples/others/cellrenderercustom/cellrendererpopup.cc
+++ b/examples/others/cellrenderercustom/cellrendererpopup.cc
@@ -25,6 +25,9 @@ namespace
 
 bool grab_on_window(const Glib::RefPtr<Gdk::Surface>& /* surface */)
 {
+/*
+  // gtk_get_current_event_device() has been replaced by
+  // Gtk::EventController::get_current_event_device().
   Glib::RefPtr<Gdk::Device> device (Glib::wrap(gtk_get_current_event_device(), true));
 
   if(device)
@@ -35,7 +38,7 @@ bool grab_on_window(const Glib::RefPtr<Gdk::Surface>& /* surface */)
     if (seat)
       return true;
   }
-
+*/
   return false;
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]