Sophie

Sophie

distrib > Mageia > 7 > i586 > media > core-release-src > by-pkgid > 838409f06098f25972c735bffbbada7c > files > 18

gparted-0.33.0-2.mga7.src.rpm

From 21d8ad218e4df91373203bbd9e350134e27dc5e3 Mon Sep 17 00:00:00 2001
From: Luca Bacci <luca.bacci982@gmail.com>
Date: Fri, 3 Aug 2018 19:33:54 +0200
Subject: [PATCH 14/26] port-to-gtk3: Use draw signal in the partition resizer
 (#7)

In Gtk2 widgets draw themselves in response to the expose event signal.
In Gtk3 widgets draw themselves in response to the GtkWidget::draw
signal, and the signal handler gets a Cairo context as an argument.

Convert Gtk::DrawingArea rendering code to respond to the
GtkWidget::draw signal.

This commit is specific to the drawing area in the Create new Partition
dialog and the Resize/Move dialog.

Reference:

[1] Migrating from GTK+ 2.x to GTK+ 3 - "The GtkWidget::draw signal":
    https://developer.gnome.org/gtk3/stable/ch26s02.html#id-1.6.3.4.11

Closes #7 - Port to Gtk3
---
 include/Frame_Resizer_Base.h |  2 +-
 src/Frame_Resizer_Base.cc    | 18 +++---------------
 2 files changed, 4 insertions(+), 16 deletions(-)

diff --git a/include/Frame_Resizer_Base.h b/include/Frame_Resizer_Base.h
index 7a52275d..e671b566 100644
--- a/include/Frame_Resizer_Base.h
+++ b/include/Frame_Resizer_Base.h
@@ -68,7 +68,7 @@ protected:
 
 	//signal handlers
 	void drawingarea_on_realize();
-	bool drawingarea_on_expose( GdkEventExpose * ev );
+	bool drawingarea_on_draw(const Cairo::RefPtr<Cairo::Context>& cr);
 	virtual bool drawingarea_on_mouse_motion( GdkEventMotion * ev ) ;
 	bool drawingarea_on_button_press_event( GdkEventButton * ev ) ;
 	bool drawingarea_on_button_release_event( GdkEventButton * ev ) ;
diff --git a/src/Frame_Resizer_Base.cc b/src/Frame_Resizer_Base.cc
index 86a737d7..77608a33 100644
--- a/src/Frame_Resizer_Base.cc
+++ b/src/Frame_Resizer_Base.cc
@@ -40,8 +40,8 @@ void Frame_Resizer_Base::init()
 
 	drawingarea .signal_realize() .connect( 
 			sigc::mem_fun(*this, &Frame_Resizer_Base::drawingarea_on_realize) ) ;
-	drawingarea .signal_expose_event() .connect( 
-			sigc::mem_fun(*this, &Frame_Resizer_Base::drawingarea_on_expose) ) ;
+	drawingarea.signal_draw().connect(
+			sigc::mem_fun(*this, &Frame_Resizer_Base::drawingarea_on_draw));
 	drawingarea .signal_motion_notify_event() .connect( 
 			sigc::mem_fun(*this, &Frame_Resizer_Base::drawingarea_on_mouse_motion) ) ;
 	drawingarea .signal_button_press_event() .connect( 
@@ -138,20 +138,8 @@ void Frame_Resizer_Base::drawingarea_on_realize()
 	drawingarea .add_events( Gdk::LEAVE_NOTIFY_MASK );
 }
 
-bool Frame_Resizer_Base::drawingarea_on_expose( GdkEventExpose * ev )
+bool Frame_Resizer_Base::drawingarea_on_draw(const Cairo::RefPtr<Cairo::Context>& cr)
 {
-	Glib::RefPtr<Gdk::Window> window = drawingarea.get_window();
-	if (!window)
-		return true;
-
-	Cairo::RefPtr<Cairo::Context> cr = window->create_cairo_context();
-
-	// Clip to the area indicated by the expose event so that we only redraw
-	// the portion of the window that needs to be redrawn.
-	cr->rectangle(ev->area.x, ev->area.y,
-	              ev->area.width, ev->area.height);
-	cr->clip();
-
 	cr->set_line_cap(Cairo::LINE_CAP_SQUARE);
 	cr->set_line_width(1.0);
 
-- 
2.21.0