1 #include "EXTERN.h"
2 #include "perl.h"
3 #include "XSUB.h"
4 
5 #include <SDL.h>
6 
7 #ifdef HAVE_SDL_PANGO
8 #include <SDL_Pango.h>
9 
10 SDLPango_Matrix _MATRIX_DEFAULT
11     = {0, 255, 0, 0,
12        0, 255, 0, 0,
13        0, 255, 0, 0,
14        0, 255, 0, 0,};
15 
16 SDLPango_Matrix *MATRIX_DEFAULT = &_MATRIX_DEFAULT;
17 
18 #endif
19 
20 MODULE = SDL::Pango	PACKAGE = SDL::Pango	PREFIX = pango_
21 
22 =for documentation
23 
24 See L<http:/*sdlpango.sourceforge.net/> */
25 
26 =cut
27 
28 #ifdef HAVE_SDL_PANGO
29 
30 int
31 pango_init()
32 	CODE:
33 		RETVAL = SDLPango_Init();
34 	OUTPUT:
35 		RETVAL
36 
37 int
38 pango_was_init()
39 	CODE:
40 		RETVAL = SDLPango_WasInit();
41 	OUTPUT:
42 		RETVAL
43 
44 void
45 pango_draw(context, surface, x, y)
46 	SDLPango_Context *context
47 	SDL_Surface *surface
48 	int x
49 	int y
50 	CODE:
51 		SDLPango_Draw(context, surface, x, y);
52 
53 int
54 pango_get_layout_width(context)
55 	SDLPango_Context *context
56 	CODE:
57 		RETVAL = SDLPango_GetLayoutWidth(context);
58 	OUTPUT:
59 		RETVAL
60 
61 int
62 pango_get_layout_height(context)
63 	SDLPango_Context *context
64 	CODE:
65 		RETVAL = SDLPango_GetLayoutHeight(context);
66 	OUTPUT:
67 		RETVAL
68 
69 void
70 pango_set_default_color(context, ...)
71 	SDLPango_Context *context
72 	CODE:
73 		if(items == 3) /* context, foreground, background */
74 		{
75 			Uint32 fg = SvIV(ST(1));
76 			Uint32 bg = SvIV(ST(2));
77 			MATRIX_DEFAULT->m[0][1] = (fg >> 24) & 0xFF; /* fg red */
78 			MATRIX_DEFAULT->m[1][1] = (fg >> 16) & 0xFF; /* fg green */
79 			MATRIX_DEFAULT->m[2][1] = (fg >>  8) & 0xFF; /* fg blue */
80 			MATRIX_DEFAULT->m[3][1] =  fg        & 0xFF; /* fg alpha */
81 			MATRIX_DEFAULT->m[0][0] = (bg >> 24) & 0xFF; /* bg red */
82 			MATRIX_DEFAULT->m[1][0] = (bg >> 16) & 0xFF; /* bg green */
83 			MATRIX_DEFAULT->m[2][0] = (bg >>  8) & 0xFF; /* bg blue */
84 			MATRIX_DEFAULT->m[3][0] =  bg        & 0xFF; /* bg alpha */
85 			SDLPango_SetDefaultColor(context, MATRIX_DEFAULT);
86 		}
87 		else if(items == 9) /* context, fr, fg, fb, fa, br, bg, bb, ba */
88 		{
89 			MATRIX_DEFAULT->m[0][1] = SvIV(ST(1)); /* fg red */
90 			MATRIX_DEFAULT->m[1][1] = SvIV(ST(2)); /* fg green */
91 			MATRIX_DEFAULT->m[2][1] = SvIV(ST(3)); /* fg blue */
92 			MATRIX_DEFAULT->m[3][1] = SvIV(ST(4)); /* fg alpha */
93 			MATRIX_DEFAULT->m[0][0] = SvIV(ST(5)); /* bg red */
94 			MATRIX_DEFAULT->m[1][0] = SvIV(ST(6)); /* bg green */
95 			MATRIX_DEFAULT->m[2][0] = SvIV(ST(7)); /* bg blue */
96 			MATRIX_DEFAULT->m[3][0] = SvIV(ST(8)); /* bg alpha */
97 			SDLPango_SetDefaultColor(context, MATRIX_DEFAULT);
98 		}
99 		else
100 			croak("Usage: SDL::Pango::set_default_color(context, fg, bg) or (context, r, g, b, a, r, g, b, a)");
101 
102 void
103 pango_set_markup(context, markup, length)
104 	SDLPango_Context *context
105 	const char *markup
106 	int length
107 	CODE:
108 		SDLPango_SetMarkup(context, markup, length);
109 
110 void
111 pango_set_minimum_size(context, width, height)
112 	SDLPango_Context *context
113 	int width
114 	int height
115 	CODE:
116 		SDLPango_SetMinimumSize(context, width, height);
117 
118 void
119 pango_set_surface_create_args(context, flags, depth, Rmask, Gmask, Bmask, Amask)
120 	SDLPango_Context *context
121 	Uint32 flags
122     int depth
123     Uint32 Rmask
124 	Uint32 Gmask
125 	Uint32 Bmask
126 	Uint32 Amask
127 	CODE:
128 		SDLPango_SetSurfaceCreateArgs(context, flags, depth, Rmask, Gmask, Bmask, Amask);
129 
130 SDL_Surface *
131 pango_create_surface_draw(context)
132 	SDLPango_Context *context
133 	PREINIT:
134 		char* CLASS = "SDL::Surface";
135 	CODE:
136 		RETVAL = SDLPango_CreateSurfaceDraw(context);
137 	OUTPUT:
138 		RETVAL
139 
140 void
141 pango_set_dpi(context, dpi_x, dpi_y)
142 	SDLPango_Context *context
143 	double dpi_x
144 	double dpi_y
145 	CODE:
146 		SDLPango_SetDpi(context, dpi_x, dpi_y);
147 
148 void
149 pango_set_text(context, markup, length, alignment = SDLPANGO_ALIGN_LEFT)
150 	SDLPango_Context *context
151 	const char *markup
152 	int length
153 	SDLPango_Alignment alignment
154 	CODE:
155 		SDLPango_SetText_GivenAlignment(context, markup, length, alignment);
156 
157 void
158 pango_set_language(context, language_tag)
159 	SDLPango_Context *context
160 	const char *language_tag
161 	CODE:
162 		SDLPango_SetLanguage(context, language_tag);
163 
164 void
165 pango_set_base_direction(context, direction)
166 	SDLPango_Context *context
167 	int direction
168 	CODE:
169 		SDLPango_SetBaseDirection(context, direction);
170 
171 #endif
172