Debug in progress
[phpCairo.git] / individual_files / phpCairoFont.c
blobb2898184da8aacfb99a03ba0b790d487c90696e9
2 /* {{{ Class CairoFontFace */
4 static zend_class_entry * CairoFontFace_ce_ptr = NULL;
6 /* {{{ Methods */
9 /* {{{ proto void construct()
11 PHP_METHOD(CairoFontFace, __construct)
13 zend_class_entry * _this_ce;
14 zval * _this_zval;
18 if (ZEND_NUM_ARGS()>0) {
19 WRONG_PARAM_COUNT;
23 php_error(E_ERROR,"Please use Context.get_font_face()");
25 /* }}} __construct */
31 static zend_function_entry CairoFontFace_methods[] = {
32 PHP_ME(CairoFontFace, __construct, NULL, /**/ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
33 { NULL, NULL, NULL }
36 /* }}} Methods */
39 static zend_object_handlers CairoFontFace_handlers;
41 static void CairoFontFace_object_dtor(void *object)
43 fontface_object *fontface = (fontface_object *)object;
44 zend_hash_destroy(fontface->std.properties);
45 FREE_HASHTABLE(fontface->std.properties);
47 if(fontface->fontface){
48 cairo_font_face_destroy(fontface->fontface);
50 efree(object);
53 static zend_object_value CairoFontFace_object_new(zend_class_entry *ce)
55 zend_object_value retval;
56 fontface_object *fontface;
57 zval *temp;
58 fontface = emalloc(sizeof(fontface_object));
59 memset(fontface,0,sizeof(fontface_object));
60 fontface->std.ce = ce;
61 ALLOC_HASHTABLE(fontface->std.properties);
62 zend_hash_init(fontface->std.properties, 0, NULL, ZVAL_PTR_DTOR,0);
63 zend_hash_copy(fontface->std.properties, &ce->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &temp, sizeof(zval *));
64 retval.handle = zend_objects_store_put(fontface, NULL, (zend_objects_free_object_storage_t)CairoFontFace_object_dtor, NULL TSRMLS_CC);
65 retval.handlers = &CairoFontFace_handlers;
66 return retval;
70 static void class_init_CairoFontFace(void)
72 zend_class_entry ce;
74 INIT_CLASS_ENTRY(ce, "CairoFontFace", CairoFontFace_methods);
75 CairoFontFace_ce_ptr = zend_register_internal_class(&ce);
76 CairoFontFace_ce_ptr->create_object = CairoFontFace_object_new;
77 memcpy(&CairoFontFace_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
78 CairoFontFace_handlers.clone_obj = NULL;
81 /* }}} Class CairoFontFace */
84 /* {{{ Class CairoFontOptions */
86 static zend_class_entry * CairoFontOptions_ce_ptr = NULL;
88 /* {{{ Methods */
91 /* {{{ proto void construct()
93 PHP_METHOD(CairoFontOptions, __construct)
95 zend_class_entry * _this_ce;
96 zval * _this_zval;
100 if (ZEND_NUM_ARGS()>0) {
101 WRONG_PARAM_COUNT;
103 _this_zval = getThis();
104 fontoptions_object *curr = (fontoptions_object *)zend_objects_get_address(_this_zval TSRMLS_CC);
105 curr->fontoptions = cairo_font_options_create();
108 /* }}} __construct */
112 /* {{{ proto int get_antialias()
114 PHP_METHOD(CairoFontOptions, get_antialias)
116 zend_class_entry * _this_ce;
118 zval * _this_zval = NULL;
119 long x;
122 if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &_this_zval, CairoFontOptions_ce_ptr) == FAILURE) {
123 return;
126 _this_ce = Z_OBJCE_P(_this_zval);
127 fontoptions_object *curr = (fontoptions_object *)zend_objects_get_address(_this_zval TSRMLS_CC);
128 x = cairo_font_options_get_antialias(curr->fontoptions);
130 RETURN_LONG(x);
132 /* }}} get_antialias */
136 /* {{{ proto int get_hint_metrics()
138 PHP_METHOD(CairoFontOptions, get_hint_metrics)
140 zend_class_entry * _this_ce;
142 zval * _this_zval = NULL;
143 long x;
146 if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &_this_zval, CairoFontOptions_ce_ptr) == FAILURE) {
147 return;
150 _this_ce = Z_OBJCE_P(_this_zval);
152 fontoptions_object *curr = (fontoptions_object *)zend_objects_get_address(_this_zval TSRMLS_CC);
154 x = cairo_font_options_get_hint_metrics(curr->fontoptions);
155 RETURN_LONG(x);
157 /* }}} get_hint_metrics */
161 /* {{{ proto int get_hint_style()
163 PHP_METHOD(CairoFontOptions, get_hint_style)
165 zend_class_entry * _this_ce;
167 zval * _this_zval = NULL;
168 long x;
171 if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &_this_zval, CairoFontOptions_ce_ptr) == FAILURE) {
172 return;
175 _this_ce = Z_OBJCE_P(_this_zval);
176 fontoptions_object *curr = (fontoptions_object *)zend_objects_get_address(_this_zval TSRMLS_CC);
178 x = cairo_font_options_get_hint_style(curr->fontoptions);
179 RETURN_LONG(x);
181 /* }}} get_hint_style */
185 /* {{{ proto int get_subpixel_order()
187 PHP_METHOD(CairoFontOptions, get_subpixel_order)
189 zend_class_entry * _this_ce;
191 zval * _this_zval = NULL;
192 long x;
195 if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &_this_zval, CairoFontOptions_ce_ptr) == FAILURE) {
196 return;
199 _this_ce = Z_OBJCE_P(_this_zval);
200 fontoptions_object *curr = (fontoptions_object *)zend_objects_get_address(_this_zval TSRMLS_CC);
202 x = cairo_font_options_get_subpixel_order(curr->fontoptions);
203 RETURN_LONG(x);
205 /* }}} get_subpixel_order */
209 /* {{{ proto void set_antialias([int aa])
211 PHP_METHOD(CairoFontOptions, set_antialias)
213 zend_class_entry * _this_ce;
215 zval * _this_zval = NULL;
216 cairo_antialias_t aa = CAIRO_ANTIALIAS_DEFAULT;
220 if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|l", &_this_zval, CairoFontOptions_ce_ptr, &aa) == FAILURE) {
221 return;
224 _this_ce = Z_OBJCE_P(_this_zval);
225 fontoptions_object *curr = (fontoptions_object *)zend_objects_get_address(_this_zval TSRMLS_CC);
226 cairo_font_options_set_antialias(curr->fontoptions, aa);
227 phpCAIRO_FONTOPTIONS_ERROR(curr->fontoptions);
230 /* }}} set_antialias */
234 /* {{{ proto void set_hint_metrics([int hm])
236 PHP_METHOD(CairoFontOptions, set_hint_metrics)
238 zend_class_entry * _this_ce;
240 zval * _this_zval = NULL;
241 cairo_hint_metrics_t hm = CAIRO_HINT_METRICS_DEFAULT;
245 if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|l", &_this_zval, CairoFontOptions_ce_ptr, &hm) == FAILURE) {
246 return;
249 _this_ce = Z_OBJCE_P(_this_zval);
251 fontoptions_object *curr = (fontoptions_object *)zend_objects_get_address(_this_zval TSRMLS_CC);
252 cairo_font_options_set_hints_metrics(curr->fontoptions, hm);
253 phpCAIRO_FONTOPTIONS_ERROR(curr->fontoptions);
256 /* }}} set_hint_metrics */
260 /* {{{ proto void set_hint_style([int hs])
262 PHP_METHOD(CairoFontOptions, set_hint_style)
264 zend_class_entry * _this_ce;
266 zval * _this_zval = NULL;
267 cairo_hint_style_t hs = CAIRO_HINT_STYLE_DEFAULT;
271 if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|l", &_this_zval, CairoFontOptions_ce_ptr, &hs) == FAILURE) {
272 return;
275 _this_ce = Z_OBJCE_P(_this_zval);
276 fontoptions_object *curr = (fontoptions_object *)zend_objects_get_address(_this_zval TSRMLS_CC);
277 cairo_font_options_set_hint_style(curr->fontoptions, hs);
278 phpCAIRO_FONTOPTIONS_ERROR(curr->fontoptions);
281 /* }}} set_hint_style */
285 /* {{{ proto void set_subpixel_order([int so])
287 PHP_METHOD(CairoFontOptions, set_subpixel_order)
289 zend_class_entry * _this_ce;
291 zval * _this_zval = NULL;
292 cairo_subpixel_order_t so = CAIRO_SUBPIXEL_ORDER_DEFAULT;
296 if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|l", &_this_zval, CairoFontOptions_ce_ptr, &so) == FAILURE) {
297 return;
300 _this_ce = Z_OBJCE_P(_this_zval);
301 fontoptions_object *curr = (fontoptions_object *)zend_objects_get_address(_this_zval TSRMLS_CC);
302 cairo_font_options_set_subpixel_order(curr->fontoptions, so);
303 phpCAIRO_FONTOPTIONS_ERROR(curr->fontoptions);
306 /* }}} set_subpixel_order */
309 static zend_function_entry CairoFontOptions_methods[] = {
310 PHP_ME(CairoFontOptions, __construct, NULL, /**/ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
311 PHP_ME(CairoFontOptions, get_antialias, NULL, /**/ZEND_ACC_PUBLIC)
312 PHP_ME(CairoFontOptions, get_hint_metrics, NULL, /**/ZEND_ACC_PUBLIC)
313 PHP_ME(CairoFontOptions, get_hint_style, NULL, /**/ZEND_ACC_PUBLIC)
314 PHP_ME(CairoFontOptions, get_subpixel_order, NULL, /**/ZEND_ACC_PUBLIC)
315 PHP_ME(CairoFontOptions, set_antialias, CairoFontOptions__set_antialias_args, /**/ZEND_ACC_PUBLIC)
316 PHP_ME(CairoFontOptions, set_hint_metrics, CairoFontOptions__set_hint_metrics_args, /**/ZEND_ACC_PUBLIC)
317 PHP_ME(CairoFontOptions, set_hint_style, CairoFontOptions__set_hint_style_args, /**/ZEND_ACC_PUBLIC)
318 PHP_ME(CairoFontOptions, set_subpixel_order, CairoFontOptions__set_subpixel_order_args, /**/ZEND_ACC_PUBLIC)
319 { NULL, NULL, NULL }
322 /* }}} Methods */
325 static zend_object_handlers CairoFontOptions_handlers;
327 static void CairoFontOptions_object_dtor(void *object)
329 fontoptions_object *fontoptions = (fontoptions_object *)object;
330 zend_hash_destroy(fontoptions->std.properties);
331 FREE_HASHTABLE(fontoptions->std.properties);
333 if(fontoptions->fontoptions){
334 cairo_font_options_destroy(fontoptions->fontoptions);
336 efree(object);
339 static zend_object_value CairoFontOptions_object_new(zend_class_entry *ce)
341 zend_object_value retval;
342 fontoptions_object *fontoptions;
343 zval *temp;
344 fontoptions=emalloc(sizeof(fontoptions_object));
345 memset(fontoptions,0,sizeof(fontoptions_object));
346 fontoptions->std.ce = ce;
347 ALLOC_HASHTABLE(fontoptions->std.properties);
348 zend_hash_init(fontoptions->std.properties, 0, NULL, ZVAL_PTR_DTOR,0);
349 zend_hash_copy(fontoptions->std.properties, &ce->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &temp, sizeof(zval *));
350 retval.handle = zend_objects_store_put(fontoptions, NULL, (zend_objects_free_object_storage_t)CairoFontOptions_object_dtor, NULL TSRMLS_CC);
351 retval.handlers = &CairoFontOptions_handlers;
352 return retval;
356 static void class_init_CairoFontOptions(void)
358 zend_class_entry ce;
360 INIT_CLASS_ENTRY(ce, "CairoFontOptions", CairoFontOptions_methods);
361 CairoFontOptions_ce_ptr = zend_register_internal_class(&ce);
362 CairoFontOptions_ce_ptr->create_object = CairoFontOptions_object_new;
363 memcpy(&CairoFontOptions_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
364 CairoFontOptions_handlers.clone_obj = NULL;
367 /* }}} Class CairoFontOptions */
370 /* {{{ Class CairoScaledFont */
372 static zend_class_entry * CairoScaledFont_ce_ptr = NULL;
374 /* {{{ Methods */
377 /* {{{ proto void construct(object ff, object mx1, object mx2, object fo)
379 PHP_METHOD(CairoScaledFont, __construct)
381 zend_class_entry * _this_ce;
382 zval * _this_zval;
384 zval * ff = NULL;
385 zval * mx1 = NULL;
386 zval * mx2 = NULL;
387 zval * fo = NULL;
391 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "oooo", &ff, &mx1, &mx2, &fo) == FAILURE) {
392 return;
395 _this_zval = getThis();
396 _this_ce = Z_OBJCE_P(_this_zval);
397 scaledfont_object *curr = (scaledfont_object *)zend_objects_get_address(_this_zval TSRMLS_CC);
398 fontface_object *ffobj = (fontface_object *)zend_objects_get_address(ff TSRMLS_CC);
399 matrix_object *mobj1 = (matrix_object *)zend_objects_get_address(mx1 TSRMLS_CC);
400 matrix_object *mobj2 = (matrix_object *)zend_objects_get_address(mx2 TSRMLS_CC);
401 fontoptions_object *foobj = (fontoptions_object *)zend_objects_get_address(fo TSRMLS_CC);
402 curr->scaledfont = cairo_scaled_font_create(ffobj->fontface, &mobj1->matrix, &mobj2->matrix, foobj->fontoptions);
405 /* }}} __construct */
409 /* {{{ proto array extents()
411 PHP_METHOD(CairoScaledFont, extents)
413 zend_class_entry * _this_ce;
415 zval * _this_zval = NULL;
417 cairo_font_extents_t e;
419 if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &_this_zval, CairoScaledFont_ce_ptr) == FAILURE) {
420 return;
423 _this_ce = Z_OBJCE_P(_this_zval);
424 scaledfont_object *curr = (scaledfont_object *)zend_objects_get_address(_this_zval TSRMLS_CC);
425 cairo_scaled_font_extents(curr->scaledfont, &e);
427 phpCAIRO_SCALEDFONT_ERROR(curr->scaledfont);
428 array_init(return_value);
429 add_assoc_double(return_value, "ascent", e.ascent);
430 add_assoc_double(return_value, "descent", e.descent);
431 add_assoc_double(return_value, "height", e.height);
432 add_assoc_double(return_value, "max_x_advance", e.max_x_advance);
433 add_assoc_double(return_value, "max_y_advance", e.max_y_advance);
436 /* }}} extents */
440 /* {{{ proto object get_font_face()
442 PHP_METHOD(CairoScaledFont, get_font_face)
444 zend_class_entry * _this_ce;
446 zval * _this_zval = NULL;
450 if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &_this_zval, CairoScaledFont_ce_ptr) == FAILURE) {
451 return;
454 _this_ce = Z_OBJCE_P(_this_zval);
455 scaledfont_object *curr = (scaledfont_object *)zend_objects_get_address(_this_zval TSRMLS_CC);
457 object_init_ex(return_value, CairoFontFace_ce_ptr);
458 fontface_object *ffobj = (fontface_object *)zend_objects_get_address(return_value);
459 ffobj->fontface = cairo_font_face_reference(cairo_scaled_font_get_font_face(curr->scaledfont));
462 /* }}} get_font_face */
466 /* {{{ proto array text_extents(string str)
468 PHP_METHOD(CairoScaledFont, text_extents)
470 zend_class_entry * _this_ce;
472 zval * _this_zval = NULL;
473 const char * str = NULL;
474 int str_len = 0;
475 cairo_text_extents_t extents;
479 if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &_this_zval, CairoScaledFont_ce_ptr, &str, &str_len) == FAILURE) {
480 return;
483 _this_ce = Z_OBJCE_P(_this_zval);
484 scaledfont_object *curr = (scaledfont_object *)zend_objects_get_address(_this_zval TSRMLS_CC);
486 cairo_scaled_font_text_extents(curr->scaledfont, str, &extents);
487 phpCAIRO_SCALEDFONT_ERROR(curr->scaledfont);
489 array_init(return_value);
490 add_assoc_double(return_value, "x_bearing", extents.x_bearing);
491 add_assoc_double(return_value, "y_bearing", extents.y_bearing);
492 add_assoc_double(return_value, "width", extents.width);
493 add_assoc_double(return_value, "height", extents.height);
494 add_assoc_double(return_value, "x_advance", extents.x_advance);
495 add_assoc_double(return_value, "y_advance", extents.y_advance);
498 /* }}} text_extents */
501 static zend_function_entry CairoScaledFont_methods[] = {
502 PHP_ME(CairoScaledFont, __construct, CairoScaledFont____construct_args, /**/ZEND_ACC_PUBLIC | ZEND_ACC_CTOR)
503 PHP_ME(CairoScaledFont, extents, NULL, /**/ZEND_ACC_PUBLIC)
504 PHP_ME(CairoScaledFont, get_font_face, NULL, /**/ZEND_ACC_PUBLIC)
505 PHP_ME(CairoScaledFont, text_extents, CairoScaledFont__text_extents_args, /**/ZEND_ACC_PUBLIC)
506 { NULL, NULL, NULL }
509 /* }}} Methods */
512 static zend_object_handlers CairoScaledFont_handlers;
514 static void CairoScaledFont_object_dtor(void *object)
516 scaledfont_object *scaledfont = (scaledfont_object *)object;
517 zend_hash_destroy(scaledfont->std.properties);
518 FREE_HASHTABLE(scaledfont->std.properties);
520 if(scaledfont->scaledfont){
521 cairo_scaled_font_destroy(scaledfont->scaledfont);
523 efree(object);
526 static zend_object_value CairoScaledFont_object_new(zend_class_entry *ce)
528 zend_object_value retval;
529 scaledfont_object *scaledfont;
530 zval *temp;
531 scaledfont=emalloc(sizeof(scaledfont_object));
532 memset(scaledfont,0,sizeof(scaledfont_object));
533 scaledfont->std.ce = ce;
534 ALLOC_HASHTABLE(scaledfont->std.properties);
535 zend_hash_init(scaledfont->std.properties, 0, NULL, ZVAL_PTR_DTOR,0);
536 zend_hash_copy(scaledfont->std.properties, &ce->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &temp, sizeof(zval *));
537 retval.handle = zend_objects_store_put(scaledfont, NULL, (zend_objects_free_object_storage_t)CairoScaledFont_object_dtor, NULL TSRMLS_CC);
538 retval.handlers = &CairoScaledFont_handlers;
539 return retval;
543 static void class_init_CairoScaledFont(void)
545 zend_class_entry ce;
547 INIT_CLASS_ENTRY(ce, "CairoScaledFont", CairoScaledFont_methods);
548 CairoScaledFont_ce_ptr = zend_register_internal_class(&ce);
549 CairoScaledFont_ce_ptr->create_object = CairoScaledFont_object_new;
550 memcpy(&CairoScaledFont_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
551 CairoScaledFont_handlers.clone_obj = NULL;
554 /* }}} Class CairoScaledFont */