Line data Source code
1 : /* File: gui_sketch_drag_state.inl; Copyright and License: see below */
2 :
3 0 : static inline void gui_sketch_drag_state_init ( gui_sketch_drag_state_t *this_ )
4 : {
5 0 : (*this_).dragging = false;
6 0 : (*this_).from_x = 0;
7 0 : (*this_).from_y = 0;
8 0 : (*this_).to_x = 0;
9 0 : (*this_).to_y = 0;
10 0 : (*this_).start_dragging_when_move = false;
11 0 : data_full_id_init_void ( &((*this_).dragged_object) );
12 0 : }
13 :
14 0 : static inline void gui_sketch_drag_state_reinit ( gui_sketch_drag_state_t *this_ )
15 : {
16 0 : gui_sketch_drag_state_init( this_ );
17 0 : }
18 :
19 0 : static inline void gui_sketch_drag_state_destroy ( gui_sketch_drag_state_t *this_ )
20 : {
21 0 : data_full_id_destroy ( &((*this_).dragged_object) );
22 0 : }
23 :
24 0 : static inline bool gui_sketch_drag_state_is_dragging ( const gui_sketch_drag_state_t *this_ )
25 : {
26 0 : return ( (*this_).dragging );
27 : }
28 :
29 0 : static inline void gui_sketch_drag_state_stop_dragging ( gui_sketch_drag_state_t *this_ )
30 : {
31 0 : (*this_).dragging = false;
32 0 : (*this_).start_dragging_when_move = false;
33 0 : }
34 :
35 0 : static inline bool gui_sketch_drag_state_is_waiting_for_move ( const gui_sketch_drag_state_t *this_ )
36 : {
37 0 : return ( (*this_).start_dragging_when_move );
38 : }
39 :
40 0 : static inline void gui_sketch_drag_state_start_dragging_when_move ( gui_sketch_drag_state_t *this_,
41 : data_full_id_t dragged_object )
42 : {
43 0 : (*this_).dragged_object = dragged_object;
44 0 : (*this_).start_dragging_when_move = true;
45 0 : }
46 :
47 0 : static inline int32_t gui_sketch_drag_state_get_from_x ( const gui_sketch_drag_state_t *this_ )
48 : {
49 0 : return ( (*this_).from_x );
50 : }
51 :
52 0 : static inline int32_t gui_sketch_drag_state_get_from_y ( const gui_sketch_drag_state_t *this_ )
53 : {
54 0 : return ( (*this_).from_y );
55 : }
56 :
57 0 : static inline void gui_sketch_drag_state_set_from ( gui_sketch_drag_state_t *this_, int32_t from_x, int32_t from_y )
58 : {
59 0 : (*this_).from_x = from_x;
60 0 : (*this_).from_y = from_y;
61 0 : }
62 :
63 0 : static inline int32_t gui_sketch_drag_state_get_to_x ( const gui_sketch_drag_state_t *this_ )
64 : {
65 0 : return ( (*this_).to_x );
66 : }
67 :
68 0 : static inline int32_t gui_sketch_drag_state_get_to_y ( const gui_sketch_drag_state_t *this_ )
69 : {
70 0 : return ( (*this_).to_y );
71 : }
72 :
73 0 : static inline void gui_sketch_drag_state_set_to ( gui_sketch_drag_state_t *this_, int32_t to_x, int32_t to_y )
74 : {
75 0 : (*this_).to_x = to_x;
76 0 : (*this_).to_y = to_y;
77 0 : if ( (*this_).start_dragging_when_move )
78 : {
79 : static const uint32_t ACTIVATION_BORDER = 2;
80 0 : int32_t activation_border_left = (*this_).from_x - ACTIVATION_BORDER;
81 0 : int32_t activation_border_right = (*this_).from_x + ACTIVATION_BORDER;
82 0 : int32_t activation_border_top = (*this_).from_y - ACTIVATION_BORDER;
83 0 : int32_t activation_border_bottom = (*this_).from_y + ACTIVATION_BORDER;
84 0 : if ( ( to_x > activation_border_right ) || ( to_x < activation_border_left )
85 0 : || ( to_y > activation_border_bottom ) || ( to_y < activation_border_top ) )
86 : {
87 0 : (*this_).dragging = true;
88 0 : (*this_).start_dragging_when_move = false;
89 : }
90 : }
91 0 : }
92 :
93 0 : static inline data_full_id_t *gui_sketch_drag_state_get_dragged_object_ptr ( gui_sketch_drag_state_t *this_ )
94 : {
95 0 : return ( &((*this_).dragged_object) );
96 : }
97 :
98 0 : static inline const data_full_id_t *gui_sketch_drag_state_get_dragged_object_const ( const gui_sketch_drag_state_t *this_ )
99 : {
100 0 : return ( &((*this_).dragged_object) );
101 : }
102 :
103 :
104 : /*
105 : Copyright 2016-2025 Andreas Warnke
106 :
107 : Licensed under the Apache License, Version 2.0 (the "License");
108 : you may not use this file except in compliance with the License.
109 : You may obtain a copy of the License at
110 :
111 : http://www.apache.org/licenses/LICENSE-2.0
112 :
113 : Unless required by applicable law or agreed to in writing, software
114 : distributed under the License is distributed on an "AS IS" BASIS,
115 : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
116 : See the License for the specific language governing permissions and
117 : limitations under the License.
118 : */
|