Line data Source code
1 : /* File: pencil_size.inl; Copyright and License: see below */ 2 : 3 : #include "u8/u8_log.h" 4 : #include <assert.h> 5 : 6 5 : static inline void pencil_size_init( pencil_size_t *this_, double width, double height ) 7 : { 8 5 : pencil_size_init_empty( this_ ); 9 5 : pencil_size_reinit( this_, width, height); 10 5 : } 11 : 12 9 : static inline void pencil_size_destroy( pencil_size_t *this_ ) 13 : { 14 9 : pango_font_description_free ( (*this_).footnote_font_description ); 15 9 : (*this_).footnote_font_description = NULL; 16 9 : pango_font_description_free ( (*this_).standard_font_description ); 17 9 : (*this_).standard_font_description = NULL; 18 9 : pango_font_description_free ( (*this_).title_font_description ); 19 9 : (*this_).title_font_description = NULL; 20 9 : } 21 : 22 : static const char *PENCIL_SIZE_FONT_FAMILY = "Sans"; 23 : 24 9 : static inline void pencil_size_init_empty( pencil_size_t *this_ ) 25 : { 26 9 : (*this_).standard_color.red = 0.0; 27 9 : (*this_).standard_color.green = 0.0; 28 9 : (*this_).standard_color.blue = 0.0; 29 9 : (*this_).standard_color.alpha = 1.0; 30 : 31 9 : (*this_).select_color.red = 1.0; 32 9 : (*this_).select_color.green = 0.3; 33 9 : (*this_).select_color.blue = 0.8; 34 9 : (*this_).select_color.alpha = 1.0; 35 : 36 9 : (*this_).highlight_color.red = 0.0; 37 9 : (*this_).highlight_color.green = 0.6; 38 9 : (*this_).highlight_color.blue = 0.4; 39 9 : (*this_).highlight_color.alpha = 1.0; 40 : 41 9 : (*this_).focus_color.red = 0.9; 42 9 : (*this_).focus_color.green = 0.85; 43 9 : (*this_).focus_color.blue = 0.0; 44 9 : (*this_).focus_color.alpha = 1.0; 45 : 46 9 : (*this_).emphasized_bgcolor.red = 1.0; 47 9 : (*this_).emphasized_bgcolor.green = 1.0; 48 9 : (*this_).emphasized_bgcolor.blue = 0.3; 49 9 : (*this_).emphasized_bgcolor.alpha = 1.0; 50 : 51 9 : (*this_).gray_out_color.red = 0.7; 52 9 : (*this_).gray_out_color.green = 0.7; 53 9 : (*this_).gray_out_color.blue = 0.7; 54 9 : (*this_).gray_out_color.alpha = 1.0; 55 : 56 : /* guess some default values: */ 57 9 : (*this_).footnote_font_size = 9.0; 58 9 : (*this_).footnote_font_description = pango_font_description_new (); 59 9 : pango_font_description_set_family_static ( (*this_).footnote_font_description, PENCIL_SIZE_FONT_FAMILY ); 60 9 : pango_font_description_set_style ( (*this_).footnote_font_description, PANGO_STYLE_NORMAL ); 61 9 : pango_font_description_set_weight ( (*this_).footnote_font_description, PANGO_WEIGHT_MEDIUM ); 62 9 : pango_font_description_set_stretch ( (*this_).footnote_font_description, PANGO_STRETCH_NORMAL ); 63 9 : pango_font_description_set_size ( (*this_).footnote_font_description, 9 * PANGO_SCALE ); 64 : 65 9 : (*this_).standard_font_size = 12.0; 66 9 : (*this_).standard_font_description = pango_font_description_new (); 67 9 : pango_font_description_set_family_static ( (*this_).standard_font_description, PENCIL_SIZE_FONT_FAMILY ); 68 9 : pango_font_description_set_style ( (*this_).standard_font_description, PANGO_STYLE_NORMAL ); 69 9 : pango_font_description_set_weight ( (*this_).standard_font_description, PANGO_WEIGHT_MEDIUM ); 70 9 : pango_font_description_set_stretch ( (*this_).standard_font_description, PANGO_STRETCH_NORMAL ); 71 9 : pango_font_description_set_size ( (*this_).standard_font_description, 12 * PANGO_SCALE ); 72 : 73 9 : (*this_).title_font_size = 14.0; 74 9 : (*this_).title_font_description = pango_font_description_new (); 75 9 : pango_font_description_set_family_static ( (*this_).title_font_description, PENCIL_SIZE_FONT_FAMILY ); 76 9 : pango_font_description_set_style ( (*this_).title_font_description, PANGO_STYLE_NORMAL ); 77 9 : pango_font_description_set_weight ( (*this_).title_font_description, PANGO_WEIGHT_BOLD ); 78 9 : pango_font_description_set_stretch ( (*this_).title_font_description, PANGO_STRETCH_NORMAL ); 79 9 : pango_font_description_set_size ( (*this_).title_font_description, 14 * PANGO_SCALE ); 80 : 81 9 : (*this_).standard_line_width = 1.0; 82 9 : (*this_).bold_line_width = 2.0; 83 9 : (*this_).line_dash_length = 5.0; 84 9 : (*this_).standard_object_border = 4.0; 85 9 : (*this_).arrow_stroke_length = 10.0; 86 9 : (*this_).arrow_stroke_087_length = 8.66; 87 9 : (*this_).preferred_object_distance = 20.0; 88 9 : (*this_).classifier_symbol_height = 24.0; 89 9 : } 90 : 91 5 : static inline void pencil_size_reinit( pencil_size_t *this_, double width, double height ) 92 : { 93 5 : double smaller_border = (width<height) ? width : height; 94 : 95 5 : (*this_).footnote_font_size = smaller_border/80.0; 96 5 : if ( (*this_).footnote_font_size < 1.0 ) 97 : { 98 0 : (*this_).footnote_font_size = 1.0; 99 : } 100 5 : pango_font_description_set_size ( (*this_).footnote_font_description, ((int)((*this_).footnote_font_size * PANGO_SCALE) )); 101 : 102 5 : (*this_).standard_font_size = smaller_border/56.0; 103 5 : if ( (*this_).standard_font_size < 1.0 ) 104 : { 105 0 : (*this_).standard_font_size = 1.0; 106 : } 107 5 : pango_font_description_set_size ( (*this_).standard_font_description, ((int)((*this_).standard_font_size * PANGO_SCALE) )); 108 : 109 5 : (*this_).title_font_size = smaller_border/48.0; 110 5 : if ( (*this_).title_font_size < 1.0 ) 111 : { 112 0 : (*this_).title_font_size = 1.0; 113 : } 114 5 : pango_font_description_set_size ( (*this_).title_font_description, ((int)((*this_).title_font_size * PANGO_SCALE) )); 115 : 116 5 : (*this_).standard_line_width = smaller_border/800.0; 117 5 : (*this_).bold_line_width = smaller_border/400.0; 118 5 : (*this_).line_dash_length = smaller_border/80.0; 119 5 : (*this_).standard_object_border = smaller_border/200.0; 120 5 : (*this_).arrow_stroke_length = smaller_border/67; 121 5 : (*this_).arrow_stroke_087_length = (*this_).arrow_stroke_length*0.866025403784; /* =sqrt(0.75) */ 122 5 : (*this_).preferred_object_distance = smaller_border/33.0; 123 5 : (*this_).classifier_symbol_height = smaller_border/20.0; 124 5 : } 125 : 126 : static inline double pencil_size_get_footnote_font_size( const pencil_size_t *this_ ) 127 : { 128 : return (*this_).footnote_font_size; 129 : } 130 : 131 0 : static inline const PangoFontDescription *pencil_size_get_footnote_font_description( const pencil_size_t *this_ ) 132 : { 133 0 : return (*this_).footnote_font_description; 134 : } 135 : 136 52 : static inline double pencil_size_get_standard_font_size( const pencil_size_t *this_ ) 137 : { 138 52 : return (*this_).standard_font_size; 139 : } 140 : 141 268 : static inline const PangoFontDescription *pencil_size_get_standard_font_description( const pencil_size_t *this_ ) 142 : { 143 268 : return (*this_).standard_font_description; 144 : } 145 : 146 16 : static inline double pencil_size_get_title_font_size( const pencil_size_t *this_ ) 147 : { 148 16 : return (*this_).title_font_size; 149 : } 150 : 151 256 : static inline const PangoFontDescription *pencil_size_get_title_font_description( const pencil_size_t *this_ ) 152 : { 153 256 : return (*this_).title_font_description; 154 : } 155 : 156 0 : static inline double pencil_size_get_font_tab_size( const pencil_size_t *this_ ) 157 : { 158 0 : return 3.0 * (*this_).standard_font_size; 159 : } 160 : 161 256 : static inline double pencil_size_get_font_line_gap( const pencil_size_t *this_ ) 162 : { 163 256 : return (*this_).standard_line_width; /* equals the standard line width */ 164 : } 165 : 166 0 : static inline double pencil_size_get_standard_line_width( const pencil_size_t *this_ ) 167 : { 168 0 : return (*this_).standard_line_width; 169 : } 170 : 171 0 : static inline double pencil_size_get_bold_line_width( const pencil_size_t *this_ ) 172 : { 173 0 : return (*this_).bold_line_width; 174 : } 175 : 176 0 : static inline double pencil_size_get_line_dash_length( const pencil_size_t *this_ ) 177 : { 178 0 : return (*this_).line_dash_length; 179 : } 180 : 181 802 : static inline double pencil_size_get_standard_object_border( const pencil_size_t *this_ ) 182 : { 183 802 : return (*this_).standard_object_border; 184 : } 185 : 186 0 : static inline double pencil_size_get_arrow_stroke_length( const pencil_size_t *this_ ) 187 : { 188 0 : return (*this_).arrow_stroke_length; 189 : } 190 : 191 0 : static inline double pencil_size_get_arrow_stroke_087_length( const pencil_size_t *this_ ) 192 : { 193 0 : return (*this_).arrow_stroke_087_length; 194 : } 195 : 196 0 : static inline double pencil_size_get_preferred_object_distance( const pencil_size_t *this_ ) 197 : { 198 0 : return (*this_).preferred_object_distance; 199 : } 200 : 201 108 : static inline double pencil_size_get_classifier_symbol_height( const pencil_size_t *this_ ) 202 : { 203 108 : return (*this_).classifier_symbol_height; 204 : } 205 : 206 0 : static inline GdkRGBA pencil_size_get_standard_color( const pencil_size_t *this_ ) 207 : { 208 0 : return (*this_).standard_color; 209 : } 210 : 211 : static inline GdkRGBA pencil_size_get_select_color( const pencil_size_t *this_ ) 212 : { 213 : return (*this_).select_color; 214 : } 215 : 216 0 : static inline GdkRGBA pencil_size_get_highlight_color( const pencil_size_t *this_ ) 217 : { 218 0 : return (*this_).highlight_color; 219 : } 220 : 221 : static inline GdkRGBA pencil_size_get_focus_color( const pencil_size_t *this_ ) 222 : { 223 : return (*this_).focus_color; 224 : } 225 : 226 0 : static inline GdkRGBA pencil_size_get_emphasized_bgcolor( const pencil_size_t *this_ ) 227 : { 228 0 : return (*this_).emphasized_bgcolor; 229 : } 230 : 231 0 : static inline GdkRGBA pencil_size_get_gray_out_color( const pencil_size_t *this_ ) 232 : { 233 0 : return (*this_).gray_out_color; 234 : } 235 : 236 : 237 : /* 238 : Copyright 2016-2024 Andreas Warnke 239 : 240 : Licensed under the Apache License, Version 2.0 (the "License"); 241 : you may not use this file except in compliance with the License. 242 : You may obtain a copy of the License at 243 : 244 : http://www.apache.org/licenses/LICENSE-2.0 245 : 246 : Unless required by applicable law or agreed to in writing, software 247 : distributed under the License is distributed on an "AS IS" BASIS, 248 : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 249 : See the License for the specific language governing permissions and 250 : limitations under the License. 251 : */