Line data Source code
1 : /* File: layout_visible_classifier.inl; Copyright and License: see below */
2 :
3 : #include <assert.h>
4 :
5 151 : static inline void layout_visible_classifier_init ( layout_visible_classifier_t *this_, const data_visible_classifier_t *visible_classifier_data )
6 : {
7 151 : assert ( NULL != visible_classifier_data );
8 :
9 151 : geometry_rectangle_init_empty( &((*this_).symbol_box) );
10 151 : geometry_rectangle_init_empty( &((*this_).space) );
11 151 : geometry_rectangle_init_empty( &((*this_).label_box) );
12 151 : geometry_rectangle_init_empty( &((*this_).icon_box) );
13 151 : geometry_rectangle_init_empty( &((*this_).envelope_box_cache) );
14 151 : (*this_).label_h_anchor = GEOMETRY_H_ALIGN_CENTER; /* most labels are centered */
15 151 : (*this_).label_v_anchor = GEOMETRY_V_ALIGN_TOP; /* most labels are fixed to the top */
16 151 : (*this_).data = visible_classifier_data;
17 151 : }
18 :
19 0 : static inline void layout_visible_classifier_copy( layout_visible_classifier_t *this_, const layout_visible_classifier_t *original )
20 : {
21 0 : assert ( NULL != original );
22 0 : assert ( NULL != (*original).data );
23 :
24 0 : geometry_rectangle_copy( &((*this_).symbol_box), &((*original).symbol_box) );
25 0 : geometry_rectangle_copy( &((*this_).space), &((*original).space) );
26 0 : geometry_rectangle_copy( &((*this_).label_box), &((*original).label_box) );
27 0 : geometry_rectangle_copy( &((*this_).icon_box), &((*original).icon_box) );
28 0 : geometry_rectangle_copy( &((*this_).envelope_box_cache), &((*original).envelope_box_cache) );
29 0 : (*this_).label_h_anchor = (*original).label_h_anchor;
30 0 : (*this_).label_v_anchor = (*original).label_v_anchor;
31 0 : (*this_).data = (*original).data;
32 0 : }
33 :
34 : static inline void layout_visible_classifier_move( layout_visible_classifier_t *this_, layout_visible_classifier_t *that )
35 : {
36 : assert ( NULL != that );
37 : assert ( NULL != (*that).data );
38 :
39 : geometry_rectangle_move( &((*this_).symbol_box), &((*that).symbol_box) );
40 : geometry_rectangle_move( &((*this_).space), &((*that).space) );
41 : geometry_rectangle_move( &((*this_).label_box), &((*that).label_box) );
42 : geometry_rectangle_move( &((*this_).icon_box), &((*that).icon_box) );
43 : geometry_rectangle_move( &((*this_).envelope_box_cache), &((*that).envelope_box_cache) );
44 : (*this_).label_h_anchor = (*that).label_h_anchor;
45 : (*this_).label_v_anchor = (*that).label_v_anchor;
46 : (*this_).data = (*that).data;
47 :
48 : (*that).data = NULL;
49 : }
50 :
51 : static inline void layout_visible_classifier_replace( layout_visible_classifier_t *this_, const layout_visible_classifier_t *original )
52 : {
53 : assert ( NULL != original );
54 : assert ( NULL != (*original).data );
55 :
56 : geometry_rectangle_replace( &((*this_).symbol_box), &((*original).symbol_box) );
57 : geometry_rectangle_replace( &((*this_).space), &((*original).space) );
58 : geometry_rectangle_replace( &((*this_).label_box), &((*original).label_box) );
59 : geometry_rectangle_replace( &((*this_).icon_box), &((*original).icon_box) );
60 : geometry_rectangle_replace( &((*this_).envelope_box_cache), &((*original).envelope_box_cache) );
61 : (*this_).label_h_anchor = (*original).label_h_anchor;
62 : (*this_).label_v_anchor = (*original).label_v_anchor;
63 : (*this_).data = (*original).data;
64 : }
65 :
66 0 : static inline void layout_visible_classifier_replacemove( layout_visible_classifier_t *this_, layout_visible_classifier_t *that )
67 : {
68 0 : assert ( NULL != that );
69 0 : assert ( NULL != (*that).data );
70 :
71 0 : geometry_rectangle_replacemove( &((*this_).symbol_box), &((*that).symbol_box) );
72 0 : geometry_rectangle_replacemove( &((*this_).space), &((*that).space) );
73 0 : geometry_rectangle_replacemove( &((*this_).label_box), &((*that).label_box) );
74 0 : geometry_rectangle_replacemove( &((*this_).icon_box), &((*that).icon_box) );
75 0 : geometry_rectangle_replacemove( &((*this_).envelope_box_cache), &((*that).envelope_box_cache) );
76 0 : (*this_).label_h_anchor = (*that).label_h_anchor;
77 0 : (*this_).label_v_anchor = (*that).label_v_anchor;
78 0 : (*this_).data = (*that).data;
79 :
80 0 : (*that).data = NULL;
81 0 : }
82 :
83 151 : static inline void layout_visible_classifier_destroy ( layout_visible_classifier_t *this_ )
84 : {
85 151 : geometry_rectangle_destroy( &((*this_).symbol_box) );
86 151 : geometry_rectangle_destroy( &((*this_).space) );
87 151 : geometry_rectangle_destroy( &((*this_).label_box) );
88 151 : geometry_rectangle_destroy( &((*this_).icon_box) );
89 151 : geometry_rectangle_destroy( &((*this_).envelope_box_cache) );
90 151 : (*this_).data = NULL;
91 151 : }
92 :
93 4432 : static inline bool layout_visible_classifier_is_valid ( const layout_visible_classifier_t *this_ )
94 : {
95 : bool result;
96 4432 : if ( (*this_).data == NULL )
97 : {
98 0 : result = false; /* cannot happen on initialized objects */
99 : }
100 : else
101 : {
102 4432 : result = data_visible_classifier_is_valid( (*this_).data );
103 : }
104 4432 : return result;
105 : }
106 :
107 366 : static inline const geometry_rectangle_t *layout_visible_classifier_get_symbol_box_const ( const layout_visible_classifier_t *this_ )
108 : {
109 366 : return &((*this_).symbol_box);
110 : }
111 :
112 192 : static inline void layout_visible_classifier_set_symbol_box ( layout_visible_classifier_t *this_, const geometry_rectangle_t *symbol_box )
113 : {
114 192 : geometry_rectangle_replace( &((*this_).symbol_box), symbol_box );
115 :
116 : /* update the cached value of envelope_box */
117 192 : layout_visible_classifier_private_update_envelope_box( this_ );
118 192 : }
119 :
120 302 : static inline const geometry_rectangle_t *layout_visible_classifier_get_space_const ( const layout_visible_classifier_t *this_ )
121 : {
122 302 : return &((*this_).space);
123 : }
124 :
125 192 : static inline void layout_visible_classifier_set_space ( layout_visible_classifier_t *this_, const geometry_rectangle_t *space )
126 : {
127 192 : geometry_rectangle_replace( &((*this_).space), space );
128 :
129 : /* update the cached value of envelope_box */
130 192 : layout_visible_classifier_private_update_envelope_box( this_ );
131 192 : }
132 :
133 174 : static inline const geometry_rectangle_t *layout_visible_classifier_get_label_box_const ( const layout_visible_classifier_t *this_ )
134 : {
135 174 : return &((*this_).label_box);
136 : }
137 :
138 192 : static inline void layout_visible_classifier_set_label_box ( layout_visible_classifier_t *this_, const geometry_rectangle_t *label_box )
139 : {
140 192 : geometry_rectangle_replace( &((*this_).label_box), label_box );
141 :
142 : /* update the cached value of envelope_box */
143 192 : layout_visible_classifier_private_update_envelope_box( this_ );
144 192 : }
145 :
146 192 : static inline void layout_visible_classifier_set_label_anchor ( layout_visible_classifier_t *this_,
147 : geometry_h_align_t label_h_anchor,
148 : geometry_v_align_t label_v_anchor )
149 : {
150 192 : (*this_).label_h_anchor = label_h_anchor;
151 192 : (*this_).label_v_anchor = label_v_anchor;
152 192 : }
153 :
154 0 : static inline const geometry_rectangle_t *layout_visible_classifier_get_icon_box_const ( const layout_visible_classifier_t *this_ )
155 : {
156 0 : return &((*this_).icon_box);
157 : }
158 :
159 192 : static inline void layout_visible_classifier_set_icon_box ( layout_visible_classifier_t *this_, const geometry_rectangle_t *icon_box )
160 : {
161 192 : geometry_rectangle_replace( &((*this_).icon_box), icon_box );
162 :
163 : /* update the cached value of envelope_box */
164 192 : layout_visible_classifier_private_update_envelope_box( this_ );
165 192 : }
166 :
167 128 : static inline geometry_rectangle_t layout_visible_classifier_get_envelope_box ( const layout_visible_classifier_t *this_ )
168 : {
169 128 : return (*this_).envelope_box_cache;
170 : }
171 :
172 0 : static inline const geometry_rectangle_t *layout_visible_classifier_get_envelope_box_const ( const layout_visible_classifier_t *this_ )
173 : {
174 : /* return the cached value */
175 0 : return &((*this_).envelope_box_cache);
176 : }
177 :
178 64 : static inline void layout_visible_classifier_shift ( layout_visible_classifier_t *this_, const geometry_offset_t *offset )
179 : {
180 64 : assert( offset != NULL );
181 64 : const double delta_x = geometry_offset_get_dx( offset );
182 64 : const double delta_y = geometry_offset_get_dy( offset );
183 :
184 64 : geometry_rectangle_shift( &((*this_).symbol_box), delta_x, delta_y );
185 64 : geometry_rectangle_shift( &((*this_).space), delta_x, delta_y );
186 64 : geometry_rectangle_shift( &((*this_).label_box), delta_x, delta_y );
187 64 : geometry_rectangle_shift( &((*this_).icon_box), delta_x, delta_y );
188 :
189 : /* update the cached value of envelope_box */
190 64 : geometry_rectangle_shift( &((*this_).envelope_box_cache), delta_x, delta_y );
191 64 : }
192 :
193 33494 : static inline const data_visible_classifier_t *layout_visible_classifier_get_data_const ( const layout_visible_classifier_t *this_ )
194 : {
195 33494 : return (*this_).data;
196 : }
197 :
198 0 : static inline const data_classifier_t *layout_visible_classifier_get_classifier_const ( const layout_visible_classifier_t *this_ )
199 : {
200 0 : return data_visible_classifier_get_classifier_const ( (*this_).data );
201 : }
202 :
203 0 : static inline const data_diagramelement_t *layout_visible_classifier_get_diagramelement_const ( const layout_visible_classifier_t *this_ )
204 : {
205 0 : return data_visible_classifier_get_diagramelement_const ( (*this_).data );
206 : }
207 :
208 152477 : static inline data_row_t layout_visible_classifier_get_classifier_id ( const layout_visible_classifier_t *this_ )
209 : {
210 152477 : return data_classifier_get_row_id( data_visible_classifier_get_classifier_const ( (*this_).data ) );
211 : }
212 :
213 0 : static inline data_row_t layout_visible_classifier_get_diagramelement_id ( const layout_visible_classifier_t *this_ )
214 : {
215 0 : return data_diagramelement_get_row_id( data_visible_classifier_get_diagramelement_const ( (*this_).data ) );
216 : }
217 :
218 0 : static inline bool layout_visible_classifier_is_equal_diagramelement_id ( const layout_visible_classifier_t *this_,
219 : const layout_visible_classifier_t *that )
220 : {
221 0 : const data_row_t this_diagele_id = layout_visible_classifier_get_diagramelement_id( this_ );
222 0 : const data_row_t that_diagele_id = layout_visible_classifier_get_diagramelement_id( that );
223 0 : return ( this_diagele_id == that_diagele_id );
224 : }
225 :
226 768 : static inline void layout_visible_classifier_private_update_envelope_box ( layout_visible_classifier_t *this_ )
227 : {
228 : geometry_rectangle_t intermediate;
229 768 : geometry_rectangle_init_by_bounds( &intermediate, &((*this_).symbol_box), &((*this_).label_box) );
230 : /* Note: the icon_box is always contained within the symbol_box */
231 768 : geometry_rectangle_init_by_bounds( &((*this_).envelope_box_cache), &intermediate, &((*this_).space) );
232 768 : }
233 :
234 :
235 : /*
236 : Copyright 2018-2025 Andreas Warnke
237 :
238 : Licensed under the Apache License, Version 2.0 (the "License");
239 : you may not use this file except in compliance with the License.
240 : You may obtain a copy of the License at
241 :
242 : http://www.apache.org/licenses/LICENSE-2.0
243 :
244 : Unless required by applicable law or agreed to in writing, software
245 : distributed under the License is distributed on an "AS IS" BASIS,
246 : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
247 : See the License for the specific language governing permissions and
248 : limitations under the License.
249 : */
|