1 | /* Pango |
---|---|

2 | * pango-matrix.h: Matrix manipulation routines |

3 | * |

4 | * Copyright (C) 2002, 2006 Red Hat Software |

5 | * |

6 | * This library is free software; you can redistribute it and/or |

7 | * modify it under the terms of the GNU Library General Public |

8 | * License as published by the Free Software Foundation; either |

9 | * version 2 of the License, or (at your option) any later version. |

10 | * |

11 | * This library is distributed in the hope that it will be useful, |

12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |

13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |

14 | * Library General Public License for more details. |

15 | * |

16 | * You should have received a copy of the GNU Library General Public |

17 | * License along with this library; if not, write to the |

18 | * Free Software Foundation, Inc., 59 Temple Place - Suite 330, |

19 | * Boston, MA 02111-1307, USA. |

20 | */ |

21 | |

22 | #ifndef __PANGO_MATRIX_H__ |

23 | #define __PANGO_MATRIX_H__ |

24 | |

25 | #include <glib.h> |

26 | #include <glib-object.h> |

27 | |

28 | G_BEGIN_DECLS |

29 | |

30 | typedef struct _PangoMatrix PangoMatrix; |

31 | |

32 | /** |

33 | * PangoMatrix: |

34 | * @xx: 1st component of the transformation matrix |

35 | * @xy: 2nd component of the transformation matrix |

36 | * @yx: 3rd component of the transformation matrix |

37 | * @yy: 4th component of the transformation matrix |

38 | * @x0: x translation |

39 | * @y0: y translation |

40 | * |

41 | * A `PangoMatrix` specifies a transformation between user-space |

42 | * and device coordinates. |

43 | * |

44 | * The transformation is given by |

45 | * |

46 | * ``` |

47 | * x_device = x_user * matrix->xx + y_user * matrix->xy + matrix->x0; |

48 | * y_device = x_user * matrix->yx + y_user * matrix->yy + matrix->y0; |

49 | * ``` |

50 | * |

51 | * Since: 1.6 |

52 | */ |

53 | struct _PangoMatrix |

54 | { |

55 | double xx; |

56 | double xy; |

57 | double yx; |

58 | double yy; |

59 | double x0; |

60 | double y0; |

61 | }; |

62 | |

63 | #define PANGO_TYPE_MATRIX (pango_matrix_get_type ()) |

64 | |

65 | /** |

66 | * PANGO_MATRIX_INIT: |

67 | * |

68 | * Constant that can be used to initialize a `PangoMatrix` to |

69 | * the identity transform. |

70 | * |

71 | * ``` |

72 | * PangoMatrix matrix = PANGO_MATRIX_INIT; |

73 | * pango_matrix_rotate (&matrix, 45.); |

74 | * ``` |

75 | * |

76 | * Since: 1.6 |

77 | **/ |

78 | #define PANGO_MATRIX_INIT { 1., 0., 0., 1., 0., 0. } |

79 | |

80 | /* for PangoRectangle */ |

81 | #include <pango/pango-types.h> |

82 | |

83 | PANGO_AVAILABLE_IN_1_6 |

84 | GType pango_matrix_get_type (void) G_GNUC_CONST; |

85 | |

86 | PANGO_AVAILABLE_IN_1_6 |

87 | PangoMatrix *pango_matrix_copy (const PangoMatrix *matrix); |

88 | PANGO_AVAILABLE_IN_1_6 |

89 | void pango_matrix_free (PangoMatrix *matrix); |

90 | |

91 | PANGO_AVAILABLE_IN_1_6 |

92 | void pango_matrix_translate (PangoMatrix *matrix, |

93 | double tx, |

94 | double ty); |

95 | PANGO_AVAILABLE_IN_1_6 |

96 | void pango_matrix_scale (PangoMatrix *matrix, |

97 | double scale_x, |

98 | double scale_y); |

99 | PANGO_AVAILABLE_IN_1_6 |

100 | void pango_matrix_rotate (PangoMatrix *matrix, |

101 | double degrees); |

102 | PANGO_AVAILABLE_IN_1_6 |

103 | void pango_matrix_concat (PangoMatrix *matrix, |

104 | const PangoMatrix *new_matrix); |

105 | PANGO_AVAILABLE_IN_1_16 |

106 | void pango_matrix_transform_point (const PangoMatrix *matrix, |

107 | double *x, |

108 | double *y); |

109 | PANGO_AVAILABLE_IN_1_16 |

110 | void pango_matrix_transform_distance (const PangoMatrix *matrix, |

111 | double *dx, |

112 | double *dy); |

113 | PANGO_AVAILABLE_IN_1_16 |

114 | void pango_matrix_transform_rectangle (const PangoMatrix *matrix, |

115 | PangoRectangle *rect); |

116 | PANGO_AVAILABLE_IN_1_16 |

117 | void pango_matrix_transform_pixel_rectangle (const PangoMatrix *matrix, |

118 | PangoRectangle *rect); |

119 | PANGO_AVAILABLE_IN_1_12 |

120 | double pango_matrix_get_font_scale_factor (const PangoMatrix *matrix) G_GNUC_PURE; |

121 | PANGO_AVAILABLE_IN_1_38 |

122 | void pango_matrix_get_font_scale_factors (const PangoMatrix *matrix, |

123 | double *xscale, double *yscale); |

124 | PANGO_AVAILABLE_IN_1_50 |

125 | double pango_matrix_get_slant_ratio (const PangoMatrix *matrix) G_GNUC_PURE; |

126 | |

127 | |

128 | G_END_DECLS |

129 | |

130 | #endif /* __PANGO_MATRIX_H__ */ |

131 |