Sophie

Sophie

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

gparted-0.33.0-2.mga7.src.rpm

From 93b14255495f29efef6767370905bfa6ec90204d Mon Sep 17 00:00:00 2001
From: Luca Bacci <luca.bacci982@gmail.com>
Date: Fri, 3 Aug 2018 19:31:11 +0200
Subject: [PATCH 13/26] port-to-gtk3: Use draw signal in the partition
 visualizer (#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 contained in the main
application window (also called the DrawingAreaVisualDisk).

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/DrawingAreaVisualDisk.h |  2 +-
 src/DrawingAreaVisualDisk.cc    | 16 ++--------------
 2 files changed, 3 insertions(+), 15 deletions(-)

diff --git a/include/DrawingAreaVisualDisk.h b/include/DrawingAreaVisualDisk.h
index d7f6ee49..226051dd 100644
--- a/include/DrawingAreaVisualDisk.h
+++ b/include/DrawingAreaVisualDisk.h
@@ -65,7 +65,7 @@ private:
 	int spreadout_leftover_px( std::vector<visual_partition> & visual_partitions, int pixels ) ;
 	
 	//overridden signalhandlers
-	bool on_expose_event( GdkEventExpose * event ) ;
+	bool on_draw(const Cairo::RefPtr<Cairo::Context>& cr);
 	bool on_button_press_event( GdkEventButton * event ) ;
 	void on_size_allocate( Gtk::Allocation & allocation ) ;
 
diff --git a/src/DrawingAreaVisualDisk.cc b/src/DrawingAreaVisualDisk.cc
index 2b0069ff..6589a842 100644
--- a/src/DrawingAreaVisualDisk.cc
+++ b/src/DrawingAreaVisualDisk.cc
@@ -314,21 +314,9 @@ void DrawingAreaVisualDisk::set_selected( const std::vector<visual_partition> &
 }
 
 
-bool DrawingAreaVisualDisk::on_expose_event( GdkEventExpose * event )
+bool DrawingAreaVisualDisk::on_draw(const Cairo::RefPtr<Cairo::Context>& cr)
 {
-	bool ret_val = Gtk::DrawingArea::on_expose_event( event ) ;
-	
-	Glib::RefPtr<Gdk::Window> window = 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(event->area.x, event->area.y,
-	              event->area.width, event->area.height);
-	cr->clip();
+	bool ret_val = Gtk::DrawingArea::on_draw(cr);
 
 	cr->set_line_width(2.0);
 	cr->set_line_join(Cairo::LINE_JOIN_MITER);  // default
-- 
2.21.0