Serenity Operating System
1/*
2 * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
3 * Copyright (c) 2022, the SerenityOS developers.
4 *
5 * SPDX-License-Identifier: BSD-2-Clause
6 */
7
8#include <LibGUI/Painter.h>
9#include <LibGUI/ResizeCorner.h>
10#include <LibGUI/Window.h>
11#include <LibGfx/CharacterBitmap.h>
12#include <LibGfx/Palette.h>
13
14namespace GUI {
15
16static constexpr Gfx::CharacterBitmap s_resize_corner_shadows_bitmap {
17
18 " "
19 " ## "
20 " # "
21 " "
22 " ## ## "
23 " # # "
24 " "
25 " ## ## ## "
26 " # # # "
27 " "
28 " ## ## ## ## "
29 " # # # # "
30 " "
31 " ## ## ## ## ## "
32 " # # # # # "
33 " "sv,
34 16, 16
35};
36
37static constexpr Gfx::CharacterBitmap s_resize_corner_highlights_bitmap {
38 " "
39 " "
40 " # "
41 " "
42 " "
43 " # # "
44 " "
45 " "
46 " # # # "
47 " "
48 " "
49 " # # # # "
50 " "
51 " "
52 " # # # # # "
53 " "sv,
54 16, 16
55};
56
57ResizeCorner::ResizeCorner()
58{
59 set_override_cursor(Gfx::StandardCursor::ResizeDiagonalTLBR);
60 set_background_role(ColorRole::Button);
61 set_fixed_size(16, 18);
62}
63
64void ResizeCorner::paint_event(PaintEvent& event)
65{
66 Painter painter(*this);
67 painter.add_clip_rect(event.rect());
68 painter.fill_rect(rect(), palette().color(background_role()));
69
70 painter.draw_bitmap({ 0, 2 }, s_resize_corner_shadows_bitmap, palette().threed_shadow1());
71 painter.draw_bitmap({ 0, 2 }, s_resize_corner_highlights_bitmap, palette().threed_highlight());
72
73 Widget::paint_event(event);
74}
75
76void ResizeCorner::mousedown_event(MouseEvent& event)
77{
78 if (event.button() == MouseButton::Primary)
79 window()->start_interactive_resize(ResizeDirection::DownRight);
80 Widget::mousedown_event(event);
81}
82
83}