LCOV - code coverage report
Current view: top level - pencil/include/draw - draw_stereotype_icon.inl (source / functions) Coverage Total Hit
Test: crystal-facet-uml_v1.67.0_covts Lines: 56.1 % 41 23
Test Date: 2025-11-06 17:22:08 Functions: 57.1 % 7 4

            Line data    Source code
       1              : /* File: draw_stereotype_icon.inl; Copyright and License: see below */
       2              : 
       3              : #include "u8/u8_log.h"
       4              : #include <math.h>
       5              : #include <assert.h>
       6              : 
       7            6 : static inline void draw_stereotype_icon_init( draw_stereotype_icon_t *this_ )
       8              : {
       9            6 :     (*this_).dummy = 0;  /* prevent warnings on uninitialized usage */
      10            6 : }
      11              : 
      12            6 : static inline void draw_stereotype_icon_destroy( draw_stereotype_icon_t *this_ )
      13              : {
      14              : 
      15            6 : }
      16              : 
      17              : static const double DRAW_STEREOTYPE_ICON_REL_SIZE = 1.5;
      18              : 
      19            0 : static inline geometry_dimensions_t draw_stereotype_icon_get_dimensions( const draw_stereotype_icon_t *this_,
      20              :                                                                           const pencil_size_t *pencil_size )
      21              : {
      22            0 :     assert( pencil_size != NULL );
      23              :     geometry_dimensions_t result;
      24              : 
      25            0 :     const double image_height = DRAW_STEREOTYPE_ICON_REL_SIZE * pencil_size_get_title_font_size( pencil_size );
      26            0 :     geometry_dimensions_init ( &result, DRAW_STEREOTYPE_ICON_WIDTH_TO_HEIGHT * image_height, image_height );
      27              : 
      28            0 :     return result;
      29              : }
      30              : 
      31            0 : static inline geometry_rectangle_t draw_stereotype_icon_get_bounds ( const draw_stereotype_icon_t *this_,
      32              :                                                                      double x,
      33              :                                                                      double y,
      34              :                                                                      geometry_h_align_t h_align,
      35              :                                                                      geometry_v_align_t v_align,
      36              :                                                                      const pencil_size_t *pencil_size )
      37              : {
      38              :     geometry_rectangle_t result;
      39              : 
      40            0 :     const double image_height = DRAW_STEREOTYPE_ICON_REL_SIZE * pencil_size_get_title_font_size( pencil_size );
      41            0 :     const double image_width = DRAW_STEREOTYPE_ICON_WIDTH_TO_HEIGHT * image_height;
      42            0 :     geometry_rectangle_init( &result,
      43              :                              geometry_h_align_get_left( &h_align, image_width, x, 0.0 ),
      44              :                              geometry_v_align_get_top( &v_align, image_height, y, 0.0 ),
      45              :                              image_width,
      46              :                              image_height
      47              :                            );
      48              : 
      49            0 :     return result;
      50              : }
      51              : 
      52          256 : static inline bool draw_stereotype_icon_exists( const draw_stereotype_icon_t *this_,
      53              :                                                 const char *stereotype,
      54              :                                                 const data_profile_part_t *profile )
      55              : {
      56          256 :     assert( stereotype != NULL );
      57          256 :     assert( profile != NULL );
      58          256 :     bool result = false;
      59              : 
      60          256 :     const utf8stringview_t stereotype_view = UTF8STRINGVIEW_STR(stereotype);
      61              :     const data_classifier_t *const optional_stereotype
      62          256 :         = data_profile_part_get_stereotype_by_name_const( profile, &stereotype_view );
      63          256 :     if ( optional_stereotype != NULL )
      64              :     {
      65            0 :         U8_TRACE_INFO_STR( "stereotype", stereotype );
      66            0 :         const char *const drawing_directives = data_classifier_get_description_const( optional_stereotype );
      67            0 :         result = draw_stereotype_icon_private_exists( this_, drawing_directives );
      68              :     }
      69              : 
      70          256 :     return result;
      71              : }
      72              : 
      73            0 : static inline bool draw_stereotype_icon_private_exists( const draw_stereotype_icon_t *this_,
      74              :                                                         const char *drawing_directives )
      75              : {
      76            0 :     assert( drawing_directives != NULL );
      77              :     /* TODO allow namespaces, e.g. <ns:path; check for end of nmtoken to prevent finding <pathfinder */
      78            0 :     const char *pattern = "<path";
      79            0 :     const bool exists = utf8string_contains_str( drawing_directives, pattern );
      80            0 :     return exists;
      81              : }
      82              : 
      83           29 : static inline u8_error_t draw_stereotype_icon_parse_svg_xml( const draw_stereotype_icon_t *this_,
      84              :                                                              const char *drawing_directives,
      85              :                                                              geometry_rectangle_t *out_view_rect,
      86              :                                                              u8_error_info_t *out_err_info )
      87              : {
      88           29 :     assert( drawing_directives != NULL );
      89           29 :     assert( out_view_rect != NULL );
      90           29 :     assert( out_err_info != NULL );
      91              : 
      92              :     geometry_rectangle_t target_bounds;
      93           29 :     geometry_rectangle_init_empty( &target_bounds );
      94           29 :     geometry_rectangle_init_empty( out_view_rect );
      95           29 :     const GdkRGBA default_color = { .red = 0.0, .green = 0.0, .blue = 0.0, .alpha = 0.0 };
      96           29 :     u8_error_info_init_void( out_err_info );
      97              : 
      98              :     const u8_error_t result
      99           29 :         = draw_stereotype_icon_private_parse_svg_xml( this_,
     100              :                                                       false,  /* draw */
     101              :                                                       drawing_directives,
     102              :                                                       out_view_rect,
     103              :                                                       &default_color,
     104              :                                                       out_err_info,
     105              :                                                       &target_bounds,
     106              :                                                       NULL  /* cr */
     107              :                                                     );
     108           29 :     return result;
     109              : }
     110              : 
     111              : 
     112              : /*
     113              : Copyright 2023-2025 Andreas Warnke
     114              : 
     115              : Licensed under the Apache License, Version 2.0 (the "License");
     116              : you may not use this file except in compliance with the License.
     117              : You may obtain a copy of the License at
     118              : 
     119              :     http://www.apache.org/licenses/LICENSE-2.0
     120              : 
     121              : Unless required by applicable law or agreed to in writing, software
     122              : distributed under the License is distributed on an "AS IS" BASIS,
     123              : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     124              : See the License for the specific language governing permissions and
     125              : limitations under the License.
     126              : */
        

Generated by: LCOV version 2.0-1