File: Group.h

package info (click to toggle)
lsp-plugins 1.2.21-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 120,408 kB
  • sloc: cpp: 589,849; xml: 74,078; makefile: 13,396; php: 1,268; sh: 185
file content (142 lines) | stat: -rw-r--r-- 6,001 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/*
 * Copyright (C) 2023 Linux Studio Plugins Project <https://lsp-plug.in/>
 *           (C) 2023 Vladimir Sadovnikov <sadko4u@gmail.com>
 *
 * This file is part of lsp-tk-lib
 * Created on: 26 июн. 2020 г.
 *
 * lsp-tk-lib is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * any later version.
 *
 * lsp-tk-lib is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with lsp-tk-lib. If not, see <https://www.gnu.org/licenses/>.
 */

#ifndef LSP_PLUG_IN_TK_WIDGETS_CONTAINERS_GROUP_H_
#define LSP_PLUG_IN_TK_WIDGETS_CONTAINERS_GROUP_H_

#ifndef LSP_PLUG_IN_TK_IMPL
    #error "use <lsp-plug.in/tk/tk.h>"
#endif

namespace lsp
{
    namespace tk
    {
        // Style definition
        namespace style
        {
            LSP_TK_STYLE_DEF_BEGIN(Group, Align)
                prop::Font              sFont;
                prop::TextAdjust        sTextAdjust;
                prop::Color             sColor;
                prop::Color             sIBGColor;
                prop::Color             sTextColor;
                prop::String            sText;
                prop::Boolean           sShowText;
                prop::Integer           sBorder;
                prop::Padding           sTextPadding;
                prop::Integer           sRadius;
                prop::Integer           sTextRadius;
                prop::Embedding         sEmbedding;
                prop::Padding           sIPadding;
                prop::Alignment         sHeading;
                prop::Boolean           sIBGInherit;
                prop::Float             sIBGBrightness;
            LSP_TK_STYLE_DEF_END
        }

        /**
         * Widget group, implements a single widget container that aligns the child widget
         * according to the layout settings. The container ignores allocation() property
         * of the child widget.
         */
        class Group: public Align
        {
            public:
                static const w_class_t    metadata;

            protected:
                typedef struct alloc_t
                {
                    ws::rectangle_t         text;
                    ws::rectangle_t         rtext;
                    padding_t               pad;
                    padding_t               xpad;
                } alloc_t;

            protected:
                ws::rectangle_t         sLabel;
                ws::rectangle_t         sArea;

                prop::Font              sFont;
                prop::TextAdjust        sTextAdjust;
                prop::Color             sColor;
                prop::Color             sIBGColor;
                prop::Color             sTextColor;
                prop::String            sText;
                prop::Boolean           sShowText;
                prop::Integer           sBorder;
                prop::Padding           sTextPadding;
                prop::Integer           sRadius;
                prop::Integer           sTextRadius;
                prop::Embedding         sEmbedding;
                prop::Padding           sIPadding;
                prop::Alignment         sHeading;
                prop::Boolean           sIBGInherit;
                prop::Float             sIBGBrightness;

            protected:
                void                    allocate(alloc_t *alloc);

            protected:
                virtual void            property_changed(Property *prop) override;
                virtual void            size_request(ws::size_limit_t *r) override;
                virtual void            realize(const ws::rectangle_t *r) override;

                virtual void            get_child_bg_color(lsp::Color *color) const override;
                virtual void            get_child_bg_color(lsp::Color &color) const override;

            public:
                explicit Group(Display *dpy);
                Group(const Group &) = delete;
                Group(Group &&) = delete;
                virtual ~Group() override;

                Group & operator = (const Group &) = delete;
                Group & operator = (Group &&) = delete;

                virtual status_t        init() override;

            public:
                LSP_TK_PROPERTY(Font,       font,           &sFont)
                LSP_TK_PROPERTY(TextAdjust, text_adjust,    &sTextAdjust)
                LSP_TK_PROPERTY(Color,      color,          &sColor)
                LSP_TK_PROPERTY(Color,      ibg_color,      &sIBGColor)
                LSP_TK_PROPERTY(Color,      text_color,     &sTextColor)
                LSP_TK_PROPERTY(String,     text,           &sText)
                LSP_TK_PROPERTY(Boolean,    show_text,      &sShowText)
                LSP_TK_PROPERTY(Integer,    border_size,    &sBorder)
                LSP_TK_PROPERTY(Padding,    text_padding,   &sTextPadding)
                LSP_TK_PROPERTY(Integer,    border_radius,  &sRadius)
                LSP_TK_PROPERTY(Integer,    text_radius,    &sTextRadius)
                LSP_TK_PROPERTY(Embedding,  embedding,      &sEmbedding)
                LSP_TK_PROPERTY(Padding,    ipadding,       &sIPadding)
                LSP_TK_PROPERTY(Alignment,  heading,        &sHeading)
                LSP_TK_PROPERTY(Boolean,    ibg_inherit,    &sIBGInherit)
                LSP_TK_PROPERTY(Float,      ibg_brightness, &sIBGBrightness)

            public:
                virtual void            render(ws::ISurface *s, const ws::rectangle_t *area, bool force) override;
        };
    } /* namespace tk */
} /* namespace lsp */

#endif /* LSP_PLUG_IN_TK_WIDGETS_CONTAINERS_GROUP_H_ */