diff options
author | Eric Williams | 2019-01-08 21:27:35 +0000 |
---|---|---|
committer | Eric Williams | 2019-01-24 19:01:33 +0000 |
commit | 5a838c080a6ceb66add0bde541a2eeedf458e970 (patch) | |
tree | 1d165971c6d40d564a844b447efcd744440e8b48 | |
parent | 83fd3a87c6cf6d90a8d52931adf36200dc5d8891 (diff) | |
download | eclipse.platform.swt-5a838c080a6ceb66add0bde541a2eeedf458e970.tar.gz eclipse.platform.swt-5a838c080a6ceb66add0bde541a2eeedf458e970.tar.xz eclipse.platform.swt-5a838c080a6ceb66add0bde541a2eeedf458e970.zip |
Bug 540674: [GTK4] Adapt to new drawing model changes
Get basic Shell drawing to work -- see Snippet245 as an example.
Change-Id: Ie326129db90b1982fdcaa4f060e1562bb75499c3
Signed-off-by: Eric Williams <ericwill@redhat.com>
3 files changed, 20 insertions, 7 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_custom.c b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_custom.c index 1ca440b5b5..a09e7d521b 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_custom.c +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_custom.c @@ -976,10 +976,10 @@ static AtkObject *swt_fixed_get_accessible (GtkWidget *widget) { static void swt_fixed_measure (GtkWidget *widget, GtkOrientation orientation, int for_size, int *minimum, int *natural, int *minimum_baseline, int *natural_baseline) { - natural = 0; - natural_baseline = 0; - minimum = 0; - minimum_baseline = 0; + if (minimum) *minimum = 0; + if (natural) *natural = 0; + if (minimum_baseline) *minimum_baseline = -1; + if (natural_baseline) *natural_baseline = -1; return; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java index 3b2fe474cd..9f3924b7c3 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java @@ -162,14 +162,14 @@ public Control (Composite parent, int style) { void connectPaint () { long /*int*/ paintHandle = paintHandle (); - int paintMask = GDK.GDK_EXPOSURE_MASK; - if (GTK.GTK4 && (hooksPaint() || drawRegion)) { + if (GTK.GTK4 && hooksPaint()) { long /*int*/ widgetClass = GTK.GTK_WIDGET_GET_CLASS(paintHandle); GtkWidgetClass widgetClassStruct = new GtkWidgetClass (); OS.memmove(widgetClassStruct, widgetClass); widgetClassStruct.snapshot = display.snapshotDrawProc; OS.memmove(widgetClass, widgetClassStruct); - } else { + } else if (!GTK.GTK4) { + int paintMask = GDK.GDK_EXPOSURE_MASK; GTK.gtk_widget_add_events (paintHandle, paintMask); OS.g_signal_connect_closure_by_id (paintHandle, display.signalIds [DRAW], 0, display.getClosure (EXPOSE_EVENT_INVERSE), false); @@ -2097,6 +2097,7 @@ public void addPaintListener(PaintListener listener) { if (listener == null) error (SWT.ERROR_NULL_ARGUMENT); TypedListener typedListener = new TypedListener (listener); addListener(SWT.Paint,typedListener); + if (GTK.GTK4) connectPaint(); } /** diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java index 0e46391345..a8f221c9fe 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Shell.java @@ -1025,6 +1025,15 @@ long /*int*/ topHandle () { return shellHandle; } +@Override +long /*int*/ paintHandle () { + if (GTK.GTK4) { + return handle; + } else { + return super.paintHandle(); + } +} + void fixActiveShell () { if (display.activeShell == this) { Shell shell = null; @@ -1476,6 +1485,9 @@ long /*int*/ gtk_draw (long /*int*/ widget, long /*int*/ cairo) { GTK.gtk_style_context_restore (context); return 1; } + if (GTK.GTK4) { + super.gtk_draw(widget, cairo); + } return 0; } return super.gtk_draw (widget, cairo); |