CtrlCore: Wayland scale factor fixed

This commit is contained in:
Mirek Fidler 2025-02-07 14:21:17 +01:00
parent 9a2ba0f86a
commit 96a24dfc2b
6 changed files with 20 additions and 7 deletions

View file

@ -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() {}

View file

@ -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();
};

View file

@ -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();

View file

@ -6,6 +6,11 @@ namespace Upp {
#define LLOG(x)
SystemDraw::SystemDraw(cairo_t *cr)
: cr(cr)
{
}
SystemDraw::~SystemDraw()
{
FlushText();

View file

@ -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));

View file

@ -170,4 +170,4 @@ INITIALIZE(JavaBuilder)
INITIALIZE(AndroidBuilder)
INITIALIZE(ScriptBuilder)
#endif
#endif