File: GraphMesh.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 (131 lines) | stat: -rw-r--r-- 5,982 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
/*
 * Copyright (C) 2024 Linux Studio Plugins Project <https://lsp-plug.in/>
 *           (C) 2024 Vladimir Sadovnikov <sadko4u@gmail.com>
 *
 * This file is part of lsp-tk-lib
 * Created on: 20 авг. 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_GRAPH_GRAPHMESH_H_
#define LSP_PLUG_IN_TK_WIDGETS_GRAPH_GRAPHMESH_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(GraphMesh, GraphItem)
                prop::Integer               sOrigin;        // Index of origin
                prop::Integer               sXAxis;         // Index of X axis
                prop::Integer               sYAxis;         // Index of Y axis
                prop::Integer               sWidth;         // Width of the mesh line
                prop::Integer               sStrobes;       // Number of strobes
                prop::Boolean               sFill;          // Fill poly
                prop::Color                 sColor;         // Mesh color
                prop::Color                 sFillColor;     // Fill color
                prop::GraphMeshData         sData;          // Graph mesh data
            LSP_TK_STYLE_DEF_END
        }

        class GraphMesh: public GraphItem
        {
            public:
                static const w_class_t    metadata;

            public:
                enum coord_t
                {
                    COORD_X,
                    COORD_Y,
                    STROBE
                };

                /**
                 * Waveform transformation function
                 * @param dst destination buffer to store result
                 * @param src source buffer to read result
                 * @param count number of elements to process
                 * @param coord coordinate type
                 * @param data supplementary user data
                 * @return true if modified data has been stored to destination buffer
                 */
                typedef bool transform_t(float *dst, const float *src, size_t count, coord_t coord, void *data);

            protected:
                prop::Integer               sOrigin;        // Index of origin
                prop::Integer               sXAxis;         // Index of X axis
                prop::Integer               sYAxis;         // Index of Y axis
                prop::Integer               sWidth;         // Width of the mesh line
                prop::Integer               sStrobes;       // Number of strobes
                prop::Boolean               sFill;          // Fill poly
                prop::Color                 sColor;         // Mesh color
                prop::Color                 sFillColor;     // Fill color
                prop::GraphMeshData         sData;          // Graph mesh data

                transform_t                *pTransform;     // Transform function
                void                       *pTrData;        // Transform data
                float                      *vBuffer;        // Temporary buffer
                size_t                      nCapacity;      // Capacity of the temporary buffer

            protected:
                void                        do_destroy();
                size_t                      find_offset(size_t *found, const float *v, size_t count, size_t strobes);
                size_t                      get_length(const float *v, size_t off, size_t count);

            protected:
                virtual void                property_changed(Property *prop) override;

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

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

                virtual status_t            init() override;
                virtual void                destroy() override;

            public:
                void                        set_transform(transform_t *func, void *data = NULL);

            public:
                LSP_TK_PROPERTY(Integer,            origin,                     &sOrigin)
                LSP_TK_PROPERTY(Integer,            haxis,                      &sXAxis)
                LSP_TK_PROPERTY(Integer,            vaxis,                      &sYAxis)
                LSP_TK_PROPERTY(Integer,            width,                      &sWidth)
                LSP_TK_PROPERTY(Integer,            strobes,                    &sStrobes)
                LSP_TK_PROPERTY(Boolean,            fill,                       &sFill)
                LSP_TK_PROPERTY(Color,              color,                      &sColor)
                LSP_TK_PROPERTY(Color,              fill_color,                 &sFillColor)
                LSP_TK_PROPERTY(GraphMeshData,      data,                       &sData)

            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_GRAPH_GRAPHMESH_H_ */