diff --git a/uppsrc/CtrlCore/Ctrl.cpp b/uppsrc/CtrlCore/Ctrl.cpp index a12f62292..35ec43aa0 100644 --- a/uppsrc/CtrlCore/Ctrl.cpp +++ b/uppsrc/CtrlCore/Ctrl.cpp @@ -43,7 +43,7 @@ bool Ctrl::painting = false; void Ctrl::SetData(const Value&) {} Value Ctrl::GetData() const { return Value(); } -void Ctrl::Paint(Draw& draw) {} +void Ctrl::Paint(Draw& w) {} int Ctrl::OverPaint() const { return 0; } void Ctrl::Activate() {} diff --git a/uppsrc/CtrlCore/Gtk.h b/uppsrc/CtrlCore/Gtk.h index e31ecbd0a..39db9085e 100644 --- a/uppsrc/CtrlCore/Gtk.h +++ b/uppsrc/CtrlCore/Gtk.h @@ -91,8 +91,7 @@ public: bool CanSetSurface() { return true; } static void Flush() {} // TODO? -// SystemDraw(cairo_t *cr, GdkDrawable *dw/* = NULL*/) : cr(cr), drawable(dw) { (void)drawable; invalid = NULL; } - SystemDraw(cairo_t *cr) : cr(cr) {} + SystemDraw(cairo_t *cr); ~SystemDraw(); }; diff --git a/uppsrc/CtrlCore/GtkApp.cpp b/uppsrc/CtrlCore/GtkApp.cpp index e422e4706..f6e8b9b82 100644 --- a/uppsrc/CtrlCore/GtkApp.cpp +++ b/uppsrc/CtrlCore/GtkApp.cpp @@ -115,7 +115,16 @@ bool InitGtkApp(int argc, char **argv, const char **envptr) Ctrl::scale = 1; #if GTK_CHECK_VERSION(3, 10, 0) - Ctrl::scale = gdk_window_get_scale_factor(gdk_screen_get_root_window(gdk_screen_get_default())); + if(Ctrl::IsWayland()) { + GtkWidget *window; + window = gtk_window_new(GTK_WINDOW_POPUP); + gtk_window_set_default_size (GTK_WINDOW (window), 1, 1); + gtk_widget_show_all (window); + Ctrl::scale = gdk_window_get_scale_factor(gtk_widget_get_window(window)); + gtk_widget_destroy(window); + } + else + Ctrl::scale = gdk_window_get_scale_factor(gdk_screen_get_root_window(gdk_screen_get_default())); #endif Ctrl::GlobalBackBuffer(); diff --git a/uppsrc/CtrlCore/GtkDrawOp.cpp b/uppsrc/CtrlCore/GtkDrawOp.cpp index 2f0315e77..a6cce51c4 100644 --- a/uppsrc/CtrlCore/GtkDrawOp.cpp +++ b/uppsrc/CtrlCore/GtkDrawOp.cpp @@ -6,6 +6,11 @@ namespace Upp { #define LLOG(x) +SystemDraw::SystemDraw(cairo_t *cr) +: cr(cr) +{ +} + SystemDraw::~SystemDraw() { FlushText(); diff --git a/uppsrc/CtrlCore/GtkEvent.cpp b/uppsrc/CtrlCore/GtkEvent.cpp index 35e9d6911..414eaf406 100644 --- a/uppsrc/CtrlCore/GtkEvent.cpp +++ b/uppsrc/CtrlCore/GtkEvent.cpp @@ -88,12 +88,12 @@ gboolean Ctrl::GtkDraw(GtkWidget *widget, cairo_t *cr, gpointer user_data) Ctrl *p = GetTopCtrlFromId(user_data); if(p) { p->fullrefresh = false; - cairo_scale(cr, 1.0 / scale, 1.0 / scale); + cairo_scale(cr, 1.0 / scale, 1.0 / scale); // cancel scaling to be pixel perfect p->SyncWndRect(p->GetWndScreenRect()); // avoid black areas when resizing SystemDraw w(cr); painting = true; - + double x1, y1, x2, y2; cairo_clip_extents (cr, &x1, &y1, &x2, &y2); Rect r = RectC((int)x1, (int)y1, (int)ceil(x2 - x1), (int)ceil(y2 - y1)); diff --git a/uppsrc/ide/Builders/Builders.h b/uppsrc/ide/Builders/Builders.h index 2e388a89e..2f3effcf8 100644 --- a/uppsrc/ide/Builders/Builders.h +++ b/uppsrc/ide/Builders/Builders.h @@ -170,4 +170,4 @@ INITIALIZE(JavaBuilder) INITIALIZE(AndroidBuilder) INITIALIZE(ScriptBuilder) -#endif \ No newline at end of file +#endif