aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornyamatongwe <unknown>2011-05-01 15:45:16 +1000
committernyamatongwe <unknown>2011-05-01 15:45:16 +1000
commitf9e99946dee68ea86cd499d45de15c8f93b767b8 (patch)
treefa387b66a73578f0ebe4f9d9853d5d03522ce950
parent403ecae665addd4c858b06db1ca18d370842822b (diff)
downloadscintilla-mirror-f9e99946dee68ea86cd499d45de15c8f93b767b8.tar.gz
For GTK+ 3, define SurfaceID to be cairo_t* as this is what is received
by draw methods. Disable palette as can't find an equivalent for GTK+ 3.
-rw-r--r--gtk/PlatGTK.cxx32
1 files changed, 27 insertions, 5 deletions
diff --git a/gtk/PlatGTK.cxx b/gtk/PlatGTK.cxx
index 0a7806f19..bcc842ce0 100644
--- a/gtk/PlatGTK.cxx
+++ b/gtk/PlatGTK.cxx
@@ -201,9 +201,11 @@ static GtkWidget *PWidget(WindowID wid) {
return reinterpret_cast<GtkWidget *>(wid);
}
+#if !GTK_CHECK_VERSION(3,0,0)
static GtkWidget *PWidget(Window &w) {
return PWidget(w.GetID());
}
+#endif
Point Point::FromLong(long lpoint) {
return Point(
@@ -272,6 +274,8 @@ void Palette::WantFind(ColourPair &cp, bool want) {
}
void Palette::Allocate(Window &w) {
+#if !GTK_CHECK_VERSION(3,0,0)
+ // Disable palette on GTK+ 3.
if (allocatedPalette) {
gdk_colormap_free_colors(gtk_widget_get_colormap(PWidget(w)),
reinterpret_cast<GdkColor *>(allocatedPalette),
@@ -300,6 +304,7 @@ void Palette::Allocate(Window &w) {
}
}
delete []successPalette;
+#endif
}
#ifndef DISABLE_GDK_FONT
@@ -713,6 +718,8 @@ void Font::Release() {
#ifdef SCI_NAMESPACE
namespace Scintilla {
#endif
+
+// On GTK+ 2.x, SurfaceID is a GdkDrawable* and on GTK+ 3.x, it is a cairo_t*
class SurfaceImpl : public Surface {
encodingType et;
#ifdef USE_CAIRO
@@ -901,7 +908,11 @@ void SurfaceImpl::Init(WindowID wid) {
Release();
PLATFORM_ASSERT(wid);
#ifdef USE_CAIRO
- GdkDrawable *drawable_ = GDK_DRAWABLE(WindowFromWidget(PWidget(wid)));
+#if GTK_CHECK_VERSION(3,0,0)
+ GdkWindow *drawable_ = gtk_widget_get_window(PWidget(wid));
+#else
+ GdkDrawable *drawable_ = GDK_DRAWABLE(PWidget(wid)->window);
+#endif
if (drawable_) {
context = gdk_cairo_create(drawable_);
PLATFORM_ASSERT(context);
@@ -922,14 +933,17 @@ void SurfaceImpl::Init(WindowID wid) {
void SurfaceImpl::Init(SurfaceID sid, WindowID wid) {
PLATFORM_ASSERT(sid);
- GdkDrawable *drawable_ = reinterpret_cast<GdkDrawable *>(sid);
Release();
PLATFORM_ASSERT(wid);
#ifdef USE_CAIRO
- context = gdk_cairo_create(drawable_);
+#if GTK_CHECK_VERSION(3,0,0)
+ context = cairo_reference(reinterpret_cast<cairo_t *>(sid));
#else
- gc = gdk_gc_new(drawable_);
- drawable = drawable_;
+ context = gdk_cairo_create(reinterpret_cast<GdkDrawable *>(sid));
+#endif
+#else
+ drawable = reinterpret_cast<GdkDrawable *>(sid);
+ gc = gdk_gc_new(drawable);
#endif
pcontext = gtk_widget_create_pango_context(PWidget(wid));
layout = pango_layout_new(pcontext);
@@ -991,10 +1005,18 @@ void SurfaceImpl::PenColour(ColourAllocated fore) {
#ifdef USE_CAIRO
if (context) {
ColourDesired cdFore(fore.AsLong());
+#if GTK_CHECK_VERSION(3,0,0)
+ // Colours appear inverted - possibly because palette no longer used
+ cairo_set_source_rgb(context,
+ cdFore.GetRed() / 255.0,
+ cdFore.GetGreen() / 255.0,
+ cdFore.GetBlue() / 255.0);
+#else
cairo_set_source_rgb(context,
cdFore.GetBlue() / 255.0,
cdFore.GetGreen() / 255.0,
cdFore.GetRed() / 255.0);
+#endif
}
#else
if (gc) {