-
Notifications
You must be signed in to change notification settings - Fork 298
/
_IoCairoPDFSurface.c
74 lines (59 loc) · 2.01 KB
/
_IoCairoPDFSurface.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*#io
CairoPDFSurface ioDoc(
docCopyright("Daniel Rosengren", 2007)
docLicense("BSD revised")
docCategory("Graphics")
*/
#include "IoCairoPDFSurface.h"
#if CAIRO_HAS_PDF_SURFACE
#include "IoCairoSurface.h"
#include "IoCairoSurface_inline.h"
#include <cairo-pdf.h>
static IoTag *IoCairoPDFSurface_newTag(void *state)
{
IoTag *tag = IoTag_newWithName_("CairoPDFSurface");
IoTag_state_(tag, state);
IoTag_cloneFunc_(tag, (IoTagCloneFunc *)IoCairoPDFSurface_rawClone);
IoTag_freeFunc_(tag, (IoTagFreeFunc *)IoCairoSurface_free);
return tag;
}
IoCairoPDFSurface *IoCairoPDFSurface_proto(void *state)
{
IoObject *self = IoObject_new(state);
IoObject_tag_(self, IoCairoPDFSurface_newTag(state));
IoState_registerProtoWithFunc_(state, self, IoCairoPDFSurface_proto);
IoCairoSurface_addMethods(self);
{
IoMethodTable methodTable[] = {
{"create", IoCairoPDFSurface_create},
{"setSize", IoCairoPDFSurface_setSize},
{NULL, NULL},
};
IoObject_addMethodTable_(self, methodTable);
}
return self;
}
IoCairoPDFSurface *IoCairoPDFSurface_rawClone(IoCairoPDFSurface *proto)
{
IoObject *self = IoObject_rawClonePrimitive(proto);
if (SURFACE(proto))
IoObject_setDataPointer_(self, cairo_surface_reference(SURFACE(proto)));
return self;
}
/* ------------------------------------------------------------------------------------------------*/
IoObject *IoCairoPDFSurface_create(IoCairoPDFSurface *self, IoObject *locals, IoMessage *m)
{
char *filename = CSTRING(IoMessage_locals_symbolArgAt_(m, locals, 0));
double w = IoMessage_locals_doubleArgAt_(m, locals, 1);
double h = IoMessage_locals_doubleArgAt_(m, locals, 2);
return IoCairoSurface_newWithRawSurface_(IOSTATE, m, cairo_pdf_surface_create(filename, w, h));
}
IoObject *IoCairoPDFSurface_setSize(IoCairoPDFSurface *self, IoObject *locals, IoMessage *m)
{
double w = IoMessage_locals_doubleArgAt_(m, locals, 0);
double h = IoMessage_locals_doubleArgAt_(m, locals, 1);
cairo_ps_surface_set_size(SURFACE(self), w, h);
CHECK_STATUS(self);
return self;
}
#endif