ladybird/Userland/Libraries/LibGUI/Desktop.h
Tom 7984c2836d WindowServer: Add API to change virtual desktop settings
This also adds the ability to query how many virtual desktops are
set up, and for the Taskbar to be notified when the active virtual
desktop has changed.
2021-07-03 12:27:23 +02:00

54 lines
1.6 KiB
C++

/*
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/Function.h>
#include <AK/String.h>
#include <LibGUI/Forward.h>
#include <LibGfx/Rect.h>
#include <Services/Taskbar/TaskbarWindow.h>
#include <Services/WindowServer/ScreenLayout.h>
namespace GUI {
using ScreenLayout = WindowServer::ScreenLayout;
class Desktop {
public:
// Most people will probably have 4 screens or less
static constexpr size_t default_screen_rect_count = 4;
static Desktop& the();
Desktop();
void set_background_color(const StringView& background_color);
void set_wallpaper_mode(const StringView& mode);
String wallpaper() const;
bool set_wallpaper(const StringView& path, bool save_config = true);
Gfx::IntRect rect() const { return m_bounding_rect; }
const Vector<Gfx::IntRect, 4>& rects() const { return m_rects; }
size_t main_screen_index() const { return m_main_screen_index; }
unsigned virtual_desktop_rows() const { return m_virtual_desktop_rows; }
unsigned virtual_desktop_columns() const { return m_virtual_desktop_columns; }
int taskbar_height() const { return TaskbarWindow::taskbar_height(); }
void did_receive_screen_rects(Badge<WindowServerConnection>, const Vector<Gfx::IntRect, 4>&, size_t, unsigned, unsigned);
private:
Vector<Gfx::IntRect, default_screen_rect_count> m_rects;
size_t m_main_screen_index { 0 };
Gfx::IntRect m_bounding_rect;
unsigned m_virtual_desktop_rows { 1 };
unsigned m_virtual_desktop_columns { 1 };
};
}