mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 07:58:11 +00:00
LibGUI: Add Window::constrain_to_desktop() helper
And a center_within(IntRect const&) overload
This commit is contained in:
parent
2d64147f02
commit
dfe06096c7
2 changed files with 25 additions and 0 deletions
|
@ -24,6 +24,7 @@
|
||||||
#include <LibGUI/Widget.h>
|
#include <LibGUI/Widget.h>
|
||||||
#include <LibGUI/Window.h>
|
#include <LibGUI/Window.h>
|
||||||
#include <LibGfx/Bitmap.h>
|
#include <LibGfx/Bitmap.h>
|
||||||
|
#include <LibGfx/Palette.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -319,6 +320,27 @@ void Window::center_within(Window const& other)
|
||||||
set_rect(rect().centered_within(other.rect()));
|
set_rect(rect().centered_within(other.rect()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Window::center_within(Gfx::IntRect const& other)
|
||||||
|
{
|
||||||
|
set_rect(rect().centered_within(other));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Window::constrain_to_desktop()
|
||||||
|
{
|
||||||
|
auto desktop_rect = Desktop::the().rect().shrunken(0, 0, Desktop::the().taskbar_height(), 0);
|
||||||
|
auto titlebar = Application::the()->palette().window_title_height();
|
||||||
|
auto border = Application::the()->palette().window_border_thickness();
|
||||||
|
auto constexpr margin = 1;
|
||||||
|
|
||||||
|
auto framed_rect = rect().inflated(border + titlebar + margin, border, border, border);
|
||||||
|
if (desktop_rect.contains(framed_rect))
|
||||||
|
return;
|
||||||
|
|
||||||
|
auto constrained = framed_rect.constrained_to(desktop_rect);
|
||||||
|
constrained.shrink(border + titlebar + margin, border, border, border);
|
||||||
|
set_rect(constrained.x(), constrained.y(), rect().width(), rect().height());
|
||||||
|
}
|
||||||
|
|
||||||
void Window::set_window_type(WindowType window_type)
|
void Window::set_window_type(WindowType window_type)
|
||||||
{
|
{
|
||||||
m_window_type = window_type;
|
m_window_type = window_type;
|
||||||
|
|
|
@ -129,7 +129,10 @@ public:
|
||||||
void resize(Gfx::IntSize size) { set_rect({ position(), size }); }
|
void resize(Gfx::IntSize size) { set_rect({ position(), size }); }
|
||||||
|
|
||||||
void center_on_screen();
|
void center_on_screen();
|
||||||
|
void constrain_to_desktop();
|
||||||
|
|
||||||
void center_within(Window const&);
|
void center_within(Window const&);
|
||||||
|
void center_within(Gfx::IntRect const&);
|
||||||
|
|
||||||
virtual void event(Core::Event&) override;
|
virtual void event(Core::Event&) override;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue