opuntiaOS - an operating system targeting x86 and ARMv7
at master 1.9 kB view raw
1/* 2 * Copyright (C) 2020-2022 The opuntiaOS Project Authors. 3 * + Contributed by Nikita Melekhin <nimelehin@gmail.com> 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9#pragma once 10#include "../Helpers/TextDrawer.h" 11#include "../Popup/Popup.h" 12#include "MenuItemAnswer.h" 13#include <libfoundation/Logger.h> 14#include <libg/Context.h> 15#include <libg/Font.h> 16#include <string> 17#include <vector> 18 19namespace WinServer { 20 21class MenuDir { 22public: 23 MenuDir(const std::string& title, int id) 24 : m_title(title) 25 , m_id(id) 26 { 27 } 28 29 ~MenuDir() = default; 30 31 inline void set_font(LG::Font& f) { m_font = f; } 32 inline void add_item(PopupItem&& item) { m_items.push_back(std::move(item)); } 33 inline void add_item(const PopupItem& item) { m_items.push_back(item); } 34 35 inline int id() const { return m_id; } 36 inline void set_title(const std::string& title) { m_title = title; } 37 inline void set_title(std::string&& title) { m_title = std::move(title); } 38 inline const std::string& title() const { return m_title; } 39 inline const PopupData& items() const { return m_items; } 40 inline PopupData& items() { return m_items; } 41 42 inline size_t width() const { return Helpers::text_width(m_title, m_font); } 43 44 [[gnu::always_inline]] inline void draw(LG::Context& ctx) 45 { 46 ctx.set_fill_color(LG::Color::Black); 47 Helpers::draw_text(ctx, { 0, 6 }, m_title, m_font); 48 } 49 50 inline MenuItemAnswer mouse_down(int x, int y) 51 { 52 m_active = true; 53 return MenuItemAnswer(MenuItemAnswer::InvalidateMe | MenuItemAnswer::PopupShow); 54 } 55 56 inline MenuItemAnswer mouse_up() 57 { 58 return MenuItemAnswer::InvalidateMe; 59 } 60 61private: 62 int m_id { -1 }; 63 bool m_active { false }; 64 std::string m_title; 65 LG::Font& m_font { LG::Font::system_font() }; 66 PopupData m_items; 67}; 68 69} // namespace WinServer