(root)/
harfbuzz-8.3.0/
src/
hb-draw.h
       1  /*
       2   * Copyright © 2019-2020  Ebrahim Byagowi
       3   *
       4   *  This is part of HarfBuzz, a text shaping library.
       5   *
       6   * Permission is hereby granted, without written agreement and without
       7   * license or royalty fees, to use, copy, modify, and distribute this
       8   * software and its documentation for any purpose, provided that the
       9   * above copyright notice and the following two paragraphs appear in
      10   * all copies of this software.
      11   *
      12   * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
      13   * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
      14   * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
      15   * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
      16   * DAMAGE.
      17   *
      18   * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
      19   * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
      20   * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
      21   * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
      22   * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
      23   */
      24  
      25  #if !defined(HB_H_IN) && !defined(HB_NO_SINGLE_HEADER_ERROR)
      26  #error "Include <hb.h> instead."
      27  #endif
      28  
      29  #ifndef HB_DRAW_H
      30  #define HB_DRAW_H
      31  
      32  #include "hb.h"
      33  
      34  HB_BEGIN_DECLS
      35  
      36  
      37  /**
      38   * hb_draw_state_t
      39   * @path_open: Whether there is an open path
      40   * @path_start_x: X component of the start of current path
      41   * @path_start_y: Y component of the start of current path
      42   * @current_x: X component of current point
      43   * @current_y: Y component of current point
      44   *
      45   * Current drawing state.
      46   *
      47   * Since: 4.0.0
      48   **/
      49  typedef struct hb_draw_state_t {
      50    hb_bool_t path_open;
      51  
      52    float path_start_x;
      53    float path_start_y;
      54  
      55    float current_x;
      56    float current_y;
      57  
      58    /*< private >*/
      59    hb_var_num_t   reserved1;
      60    hb_var_num_t   reserved2;
      61    hb_var_num_t   reserved3;
      62    hb_var_num_t   reserved4;
      63    hb_var_num_t   reserved5;
      64    hb_var_num_t   reserved6;
      65    hb_var_num_t   reserved7;
      66  } hb_draw_state_t;
      67  
      68  /**
      69   * HB_DRAW_STATE_DEFAULT:
      70   *
      71   * The default #hb_draw_state_t at the start of glyph drawing.
      72   */
      73  #define HB_DRAW_STATE_DEFAULT {0, 0.f, 0.f, 0.f, 0.f, {0.}, {0.}, {0.}}
      74  
      75  
      76  /**
      77   * hb_draw_funcs_t:
      78   *
      79   * Glyph draw callbacks.
      80   *
      81   * #hb_draw_move_to_func_t, #hb_draw_line_to_func_t and
      82   * #hb_draw_cubic_to_func_t calls are necessary to be defined but we translate
      83   * #hb_draw_quadratic_to_func_t calls to #hb_draw_cubic_to_func_t if the
      84   * callback isn't defined.
      85   *
      86   * Since: 4.0.0
      87   **/
      88  
      89  typedef struct hb_draw_funcs_t hb_draw_funcs_t;
      90  
      91  
      92  /**
      93   * hb_draw_move_to_func_t:
      94   * @dfuncs: draw functions object
      95   * @draw_data: The data accompanying the draw functions in hb_font_draw_glyph()
      96   * @st: current draw state
      97   * @to_x: X component of target point
      98   * @to_y: Y component of target point
      99   * @user_data: User data pointer passed to hb_draw_funcs_set_move_to_func()
     100   *
     101   * A virtual method for the #hb_draw_funcs_t to perform a "move-to" draw
     102   * operation.
     103   *
     104   * Since: 4.0.0
     105   *
     106   **/
     107  typedef void (*hb_draw_move_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data,
     108  					hb_draw_state_t *st,
     109  					float to_x, float to_y,
     110  					void *user_data);
     111  
     112  /**
     113   * hb_draw_line_to_func_t:
     114   * @dfuncs: draw functions object
     115   * @draw_data: The data accompanying the draw functions in hb_font_draw_glyph()
     116   * @st: current draw state
     117   * @to_x: X component of target point
     118   * @to_y: Y component of target point
     119   * @user_data: User data pointer passed to hb_draw_funcs_set_line_to_func()
     120   *
     121   * A virtual method for the #hb_draw_funcs_t to perform a "line-to" draw
     122   * operation.
     123   *
     124   * Since: 4.0.0
     125   *
     126   **/
     127  typedef void (*hb_draw_line_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data,
     128  					hb_draw_state_t *st,
     129  					float to_x, float to_y,
     130  					void *user_data);
     131  
     132  /**
     133   * hb_draw_quadratic_to_func_t:
     134   * @dfuncs: draw functions object
     135   * @draw_data: The data accompanying the draw functions in hb_font_draw_glyph()
     136   * @st: current draw state
     137   * @control_x: X component of control point
     138   * @control_y: Y component of control point
     139   * @to_x: X component of target point
     140   * @to_y: Y component of target point
     141   * @user_data: User data pointer passed to hb_draw_funcs_set_quadratic_to_func()
     142   *
     143   * A virtual method for the #hb_draw_funcs_t to perform a "quadratic-to" draw
     144   * operation.
     145   *
     146   * Since: 4.0.0
     147   *
     148   **/
     149  typedef void (*hb_draw_quadratic_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data,
     150  					     hb_draw_state_t *st,
     151  					     float control_x, float control_y,
     152  					     float to_x, float to_y,
     153  					     void *user_data);
     154  
     155  /**
     156   * hb_draw_cubic_to_func_t:
     157   * @dfuncs: draw functions object
     158   * @draw_data: The data accompanying the draw functions in hb_font_draw_glyph()
     159   * @st: current draw state
     160   * @control1_x: X component of first control point
     161   * @control1_y: Y component of first control point
     162   * @control2_x: X component of second control point
     163   * @control2_y: Y component of second control point
     164   * @to_x: X component of target point
     165   * @to_y: Y component of target point
     166   * @user_data: User data pointer passed to hb_draw_funcs_set_cubic_to_func()
     167   *
     168   * A virtual method for the #hb_draw_funcs_t to perform a "cubic-to" draw
     169   * operation.
     170   *
     171   * Since: 4.0.0
     172   *
     173   **/
     174  typedef void (*hb_draw_cubic_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data,
     175  					 hb_draw_state_t *st,
     176  					 float control1_x, float control1_y,
     177  					 float control2_x, float control2_y,
     178  					 float to_x, float to_y,
     179  					 void *user_data);
     180  
     181  /**
     182   * hb_draw_close_path_func_t:
     183   * @dfuncs: draw functions object
     184   * @draw_data: The data accompanying the draw functions in hb_font_draw_glyph()
     185   * @st: current draw state
     186   * @user_data: User data pointer passed to hb_draw_funcs_set_close_path_func()
     187   *
     188   * A virtual method for the #hb_draw_funcs_t to perform a "close-path" draw
     189   * operation.
     190   *
     191   * Since: 4.0.0
     192   *
     193   **/
     194  typedef void (*hb_draw_close_path_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data,
     195  					   hb_draw_state_t *st,
     196  					   void *user_data);
     197  
     198  /**
     199   * hb_draw_funcs_set_move_to_func:
     200   * @dfuncs: draw functions object
     201   * @func: (closure user_data) (destroy destroy) (scope notified): move-to callback
     202   * @user_data: Data to pass to @func
     203   * @destroy: (nullable): The function to call when @user_data is not needed anymore
     204   *
     205   * Sets move-to callback to the draw functions object.
     206   *
     207   * Since: 4.0.0
     208   **/
     209  HB_EXTERN void
     210  hb_draw_funcs_set_move_to_func (hb_draw_funcs_t        *dfuncs,
     211  				hb_draw_move_to_func_t  func,
     212  				void *user_data, hb_destroy_func_t destroy);
     213  
     214  /**
     215   * hb_draw_funcs_set_line_to_func:
     216   * @dfuncs: draw functions object
     217   * @func: (closure user_data) (destroy destroy) (scope notified): line-to callback
     218   * @user_data: Data to pass to @func
     219   * @destroy: (nullable): The function to call when @user_data is not needed anymore
     220   *
     221   * Sets line-to callback to the draw functions object.
     222   *
     223   * Since: 4.0.0
     224   **/
     225  HB_EXTERN void
     226  hb_draw_funcs_set_line_to_func (hb_draw_funcs_t        *dfuncs,
     227  				hb_draw_line_to_func_t  func,
     228  				void *user_data, hb_destroy_func_t destroy);
     229  
     230  /**
     231   * hb_draw_funcs_set_quadratic_to_func:
     232   * @dfuncs: draw functions object
     233   * @func: (closure user_data) (destroy destroy) (scope notified): quadratic-to callback
     234   * @user_data: Data to pass to @func
     235   * @destroy: (nullable): The function to call when @user_data is not needed anymore
     236   *
     237   * Sets quadratic-to callback to the draw functions object.
     238   *
     239   * Since: 4.0.0
     240   **/
     241  HB_EXTERN void
     242  hb_draw_funcs_set_quadratic_to_func (hb_draw_funcs_t             *dfuncs,
     243  				     hb_draw_quadratic_to_func_t  func,
     244  				     void *user_data, hb_destroy_func_t destroy);
     245  
     246  /**
     247   * hb_draw_funcs_set_cubic_to_func:
     248   * @dfuncs: draw functions
     249   * @func: (closure user_data) (destroy destroy) (scope notified): cubic-to callback
     250   * @user_data: Data to pass to @func
     251   * @destroy: (nullable): The function to call when @user_data is not needed anymore
     252   *
     253   * Sets cubic-to callback to the draw functions object.
     254   *
     255   * Since: 4.0.0
     256   **/
     257  HB_EXTERN void
     258  hb_draw_funcs_set_cubic_to_func (hb_draw_funcs_t         *dfuncs,
     259  				 hb_draw_cubic_to_func_t  func,
     260  				 void *user_data, hb_destroy_func_t destroy);
     261  
     262  /**
     263   * hb_draw_funcs_set_close_path_func:
     264   * @dfuncs: draw functions object
     265   * @func: (closure user_data) (destroy destroy) (scope notified): close-path callback
     266   * @user_data: Data to pass to @func
     267   * @destroy: (nullable): The function to call when @user_data is not needed anymore
     268   *
     269   * Sets close-path callback to the draw functions object.
     270   *
     271   * Since: 4.0.0
     272   **/
     273  HB_EXTERN void
     274  hb_draw_funcs_set_close_path_func (hb_draw_funcs_t           *dfuncs,
     275  				   hb_draw_close_path_func_t  func,
     276  				   void *user_data, hb_destroy_func_t destroy);
     277  
     278  
     279  HB_EXTERN hb_draw_funcs_t *
     280  hb_draw_funcs_create (void);
     281  
     282  HB_EXTERN hb_draw_funcs_t *
     283  hb_draw_funcs_get_empty (void);
     284  
     285  HB_EXTERN hb_draw_funcs_t *
     286  hb_draw_funcs_reference (hb_draw_funcs_t *dfuncs);
     287  
     288  HB_EXTERN void
     289  hb_draw_funcs_destroy (hb_draw_funcs_t *dfuncs);
     290  
     291  HB_EXTERN hb_bool_t
     292  hb_draw_funcs_set_user_data (hb_draw_funcs_t *dfuncs,
     293  			     hb_user_data_key_t *key,
     294  			     void *              data,
     295  			     hb_destroy_func_t   destroy,
     296  			     hb_bool_t           replace);
     297  
     298  
     299  HB_EXTERN void *
     300  hb_draw_funcs_get_user_data (const hb_draw_funcs_t *dfuncs,
     301  			     hb_user_data_key_t       *key);
     302  
     303  HB_EXTERN void
     304  hb_draw_funcs_make_immutable (hb_draw_funcs_t *dfuncs);
     305  
     306  HB_EXTERN hb_bool_t
     307  hb_draw_funcs_is_immutable (hb_draw_funcs_t *dfuncs);
     308  
     309  
     310  HB_EXTERN void
     311  hb_draw_move_to (hb_draw_funcs_t *dfuncs, void *draw_data,
     312  		 hb_draw_state_t *st,
     313  		 float to_x, float to_y);
     314  
     315  HB_EXTERN void
     316  hb_draw_line_to (hb_draw_funcs_t *dfuncs, void *draw_data,
     317  		 hb_draw_state_t *st,
     318  		 float to_x, float to_y);
     319  
     320  HB_EXTERN void
     321  hb_draw_quadratic_to (hb_draw_funcs_t *dfuncs, void *draw_data,
     322  		      hb_draw_state_t *st,
     323  		      float control_x, float control_y,
     324  		      float to_x, float to_y);
     325  
     326  HB_EXTERN void
     327  hb_draw_cubic_to (hb_draw_funcs_t *dfuncs, void *draw_data,
     328  		  hb_draw_state_t *st,
     329  		  float control1_x, float control1_y,
     330  		  float control2_x, float control2_y,
     331  		  float to_x, float to_y);
     332  
     333  HB_EXTERN void
     334  hb_draw_close_path (hb_draw_funcs_t *dfuncs, void *draw_data,
     335  		    hb_draw_state_t *st);
     336  
     337  
     338  HB_END_DECLS
     339  
     340  #endif /* HB_DRAW_H */