From 43dbe40be0ea5cf20b2d64df281c319400e184e4 Mon Sep 17 00:00:00 2001 From: Mirek Fidler Date: Sun, 13 Oct 2024 23:41:15 +0200 Subject: [PATCH] CtrlCore: Fixed issue with gtk CenterRect --- uppsrc/CtrlCore/CtrlPos.cpp | 9 ++------- uppsrc/CtrlCore/GtkCreate.cpp | 2 +- uppsrc/CtrlCore/GtkTop.cpp | 25 +++++++++++++++---------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/uppsrc/CtrlCore/CtrlPos.cpp b/uppsrc/CtrlCore/CtrlPos.cpp index 73f339794..22cec3b2e 100644 --- a/uppsrc/CtrlCore/CtrlPos.cpp +++ b/uppsrc/CtrlCore/CtrlPos.cpp @@ -455,9 +455,8 @@ Ctrl& Ctrl::VCenterPosZ(int size, int delta) { Rect Ctrl::GetWorkArea(Point pt) { GuiLock __; - static Array rc; - if (rc.IsEmpty()) - GetWorkArea(rc); + Array rc; + GetWorkArea(rc); for(int i = 0; i < rc.GetCount(); i++) if(rc[i].Contains(pt)) return rc[i]; @@ -468,10 +467,6 @@ Rect Ctrl::StdGetWorkArea() const { GuiLock __; - static Array rc; - if(rc.IsEmpty()) - GetWorkArea(rc); - const Ctrl *top = GetTopCtrl(); if(top && top->IsOpen()) return GetWorkArea(top->GetScreenRect().TopLeft()); diff --git a/uppsrc/CtrlCore/GtkCreate.cpp b/uppsrc/CtrlCore/GtkCreate.cpp index bb15d0b70..3a5680e93 100644 --- a/uppsrc/CtrlCore/GtkCreate.cpp +++ b/uppsrc/CtrlCore/GtkCreate.cpp @@ -52,7 +52,7 @@ void Ctrl::Create(Ctrl *owner, bool popup) tw->SyncSizeHints(); Rect r = GetRect(); - + gtk_window_set_default_size (gtk(), LSC(r.GetWidth()), LSC(r.GetHeight())); gtk_window_move(gtk(), LSC(r.left), LSC(r.top)); diff --git a/uppsrc/CtrlCore/GtkTop.cpp b/uppsrc/CtrlCore/GtkTop.cpp index 2a787fc72..c23a6909d 100644 --- a/uppsrc/CtrlCore/GtkTop.cpp +++ b/uppsrc/CtrlCore/GtkTop.cpp @@ -73,25 +73,30 @@ void TopWindow::CenterRect(Ctrl *owner) SetupRect(owner); if(owner && center == 1 || center == 2) { Size sz = GetRect().Size(); - Rect r, wr; - wr = Ctrl::GetPrimaryWorkArea(); + Rect wr = owner? owner->GetWorkArea() : Ctrl::GetPrimaryWorkArea(); Rect fm = GetFrameMargins(); - if(center == 1) - r = owner->GetRect(); - else - r = wr; - Point p = r.CenterPos(sz); - r = RectC(p.x, p.y, sz.cx, sz.cy); + Rect r = (center == 1 && owner ? owner->GetRect() : wr) + .CenterRect(sz); wr.left += fm.left; wr.right -= fm.right; wr.top += fm.top; wr.bottom -= fm.bottom; if(r.top < wr.top) { - r.bottom += wr.top - r.top; r.top = wr.top; + r.bottom = r.top + sz.cy; } - if(r.bottom > wr.bottom) + if(r.left < wr.left) { + r.left = wr.left; + r.right = r.left + sz.cx; + } + if(r.bottom > wr.bottom) { r.bottom = wr.bottom; + r.top = r.bottom - sz.cy; + } + if(r.right > wr.right) { + r.right = wr.right; + r.left = r.right - sz.cx; + } minsize.cx = min(minsize.cx, r.GetWidth()); minsize.cy = min(minsize.cy, r.GetHeight()); SetRect(r);