1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 05:05:08 +00:00
serenity/Userland/Services/WindowServer/ScreenLayout.h
Tom a9906cfcd1 WindowServer: Try to auto-add unconfigured framebuffer devices
This will try to auto-add framebuffer devices that haven't been
explicitly configured to the right-hand side.
2021-06-27 09:46:27 +02:00

60 lines
1.5 KiB
C++

/*
* Copyright (c) 2020, the SerenityOS developers.
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/String.h>
#include <AK/Vector.h>
#include <LibCore/ConfigFile.h>
#include <LibGfx/Rect.h>
#include <LibGfx/Size.h>
#include <LibIPC/Forward.h>
namespace WindowServer {
class ScreenLayout {
public:
struct Screen {
String device;
Gfx::IntPoint location;
Gfx::IntSize resolution;
int scale_factor;
Gfx::IntRect virtual_rect() const
{
return { location, { resolution.width() / scale_factor, resolution.height() / scale_factor } };
}
auto operator<=>(const Screen&) const = default;
};
Vector<Screen> screens;
unsigned main_screen_index { 0 };
bool is_valid(String* error_msg = nullptr) const;
void normalize();
bool load_config(const Core::ConfigFile& config_file, String* error_msg = nullptr);
bool save_config(Core::ConfigFile& config_file, bool sync = true) const;
bool try_auto_add_framebuffer(String const&);
// TODO: spaceship operator
bool operator!=(const ScreenLayout& other) const;
bool operator==(const ScreenLayout& other) const
{
return !(*this != other);
}
};
}
namespace IPC {
bool encode(Encoder&, const WindowServer::ScreenLayout::Screen&);
bool decode(Decoder&, WindowServer::ScreenLayout::Screen&);
bool encode(Encoder&, const WindowServer::ScreenLayout&);
bool decode(Decoder&, WindowServer::ScreenLayout&);
}