source: libcaca/trunk/cxx/cucul++.cpp @ 1278

Last change on this file since 1278 was 1277, checked in by Sam Hocevar, 13 years ago
  • Implemented putChar() and updated getChar()'s prototype.
  • Property svn:keywords set to Id
File size: 8.3 KB
Line 
1/*
2 *  libcucul++    C++ bindings for libcucul
3 *  Copyright (c) 2006 Jean-Yves Lamoureux <jylam@lnxscene.org>
4 *                All Rights Reserved
5 *
6 *  $Id: cucul++.cpp 1277 2006-11-05 18:06:09Z sam $
7 *
8 *  This library is free software; you can redistribute it and/or
9 *  modify it under the terms of the Do What The Fuck You Want To
10 *  Public License, Version 2, as published by Sam Hocevar. See
11 *  http://sam.zoy.org/wtfpl/COPYING for more details.
12 */
13
14/*
15 *  This file contains the main functions used by \e libcucul++ applications
16 *  to initialise a drawing context.
17 */
18
19#include "config.h"
20
21#include <stdio.h> // BUFSIZ
22#include <stdarg.h> // va_*
23
24#include "cucul++.h"
25
26
27unsigned long int Charset::utf8ToUtf32(char const *s, unsigned int *read)
28{
29    return cucul_utf8_to_utf32(s, read);
30}
31unsigned int Charset::utf32ToUtf8(char *buf, unsigned long int ch)
32{
33    return cucul_utf32_to_utf8(buf, ch);
34}
35unsigned char Charset::utf32ToCp437(unsigned long int ch)
36{
37    return cucul_utf32_to_cp437(ch);
38}
39unsigned long int Charset::cp437ToUtf32(unsigned char ch)
40{
41    return cucul_cp437_to_utf32(ch);
42}
43
44
45Cucul::Cucul()
46{
47    cv = cucul_create_canvas(0, 0);
48    if(!cv)
49        throw -1;
50}
51
52Cucul::Cucul(int width, int height)
53{
54    cv = cucul_create_canvas(width, height);
55    if(!cv) throw -1;
56}
57
58Cucul::Cucul(Buffer *b, char const *format)
59{
60    cv = cucul_import_canvas(b->getBuffer(), format);
61    if(!cv) throw -1;
62}
63
64Cucul::~Cucul()
65{
66    if(cv)
67        cucul_free_canvas(cv);
68}
69
70cucul_canvas_t *Cucul::get_cucul_canvas_t()
71{
72    return cv;
73}
74
75void Cucul::setSize(unsigned int width, unsigned int height)
76{
77    cucul_set_canvas_size(cv, width, height);
78}
79
80unsigned int Cucul::getWidth(void)
81{
82    return cucul_get_canvas_width(cv);
83}
84
85unsigned int Cucul::getHeight(void)
86{
87    return cucul_get_canvas_height(cv);
88}
89
90int Cucul::setColorANSI(unsigned char f, unsigned char b)
91{
92    return cucul_set_color_ansi(cv, f, b);
93}
94
95int  Cucul::setColorARGB(unsigned int f, unsigned int b)
96{
97    return cucul_set_color_argb(cv, f, b);
98}
99
100void Cucul::putChar(int x, int y, unsigned long int ch)
101{
102    cucul_putchar(cv, x, y, ch);
103}
104
105unsigned long int Cucul::getChar(int x, int y)
106{
107    return cucul_getchar(cv, x, y);
108}
109
110void Cucul::putStr(int x, int y, char *str)
111{
112    cucul_putstr(cv, x, y, str);
113}
114
115void Cucul::Printf(int x, int y, char const * format,...)
116{
117    char tmp[BUFSIZ];
118    char *buf = tmp;
119    va_list args;
120
121    va_start(args, format);
122#if defined(HAVE_VSNPRINTF)
123    vsnprintf(buf, getWidth() - x + 1, format, args);
124#else
125    vsprintf(buf, format, args);
126#endif
127    buf[getWidth() - x] = '\0';
128    va_end(args);
129
130    putStr(x, y, buf);
131}
132
133void Cucul::Clear(void)
134{
135    cucul_clear_canvas(cv);
136}
137
138void Cucul::Blit(int x, int y, Cucul* c1, Cucul* c2)
139{
140    cucul_blit(cv, x, y, c1->get_cucul_canvas_t(),
141                         c2 ? c2->get_cucul_canvas_t() : NULL);
142}
143
144void Cucul::Invert()
145{
146    cucul_invert(cv);
147}
148
149void Cucul::Flip()
150{
151    cucul_flip(cv);
152}
153
154void Cucul::Flop()
155{
156    cucul_flop(cv);
157}
158
159void Cucul::Rotate()
160{
161    cucul_rotate(cv);
162}
163
164void Cucul::drawLine(int x1, int y1, int x2, int y2, char const *ch)
165{
166    cucul_draw_line(cv, x1, y1, x2, y2, ch);
167}
168
169void Cucul::drawPolyline(int const x[], int const y[], int f, char const *ch)
170{
171    cucul_draw_polyline(cv, x, y, f, ch);
172}
173
174void Cucul::drawThinLine(int x1, int y1, int x2, int y2)
175{
176    cucul_draw_thin_line(cv, x1, y1, x2, y2);
177}
178
179void Cucul::drawThinPolyline(int const x[], int const y[], int f)
180{
181    cucul_draw_thin_polyline(cv, x, y, f);
182}
183
184void Cucul::drawCircle(int x, int y, int d, char const *ch)
185{
186    cucul_draw_circle(cv, x, y, d, ch);
187}
188
189void Cucul::drawEllipse(int x, int y, int d1, int d2, char const *ch)
190{
191    cucul_draw_ellipse(cv, x, y, d1, d2, ch);
192}
193
194void Cucul::drawThinEllipse(int x, int y, int d1, int d2)
195{
196    cucul_draw_thin_ellipse(cv, x, y, d1, d2);
197}
198
199void Cucul::fillEllipse(int x, int y, int d1, int d2, char const *ch)
200{
201    cucul_fill_ellipse(cv, x, y, d1, d2, ch);
202}
203
204void Cucul::drawBox(int x, int y, int w, int h, char const *ch)
205{
206    cucul_draw_box(cv, x, y, w, h, ch);
207}
208
209void Cucul::drawThinBox(int x, int y, int w, int h)
210{
211    cucul_draw_thin_box(cv, x, y, w, h);
212}
213
214void Cucul::fillBox(int x, int y, int w, int h, char const *ch)
215{
216    cucul_fill_box(cv, x, y, w, h, ch);
217}
218
219void Cucul::drawTriangle(int x1, int y1, int x2, int y2, int x3, int y3, char const *ch)
220{
221    cucul_draw_triangle(cv, x1, y1, x2, y2, x3, y3, ch);
222}
223
224void Cucul::drawThinTriangle(int x1, int y1, int x2, int y2, int x3, int y3)
225{
226    cucul_draw_thin_triangle(cv, x1, y1, x2, y2, x3, y3);
227}
228
229void Cucul::fillTriangle(int x1, int y1, int x2, int y2, int x3, int y3, const char *ch)
230{
231    cucul_fill_triangle(cv, x1, y1, x2, y2, x3, y3, ch);
232}
233
234int Cucul::Rand(int min, int max)
235{
236    return cucul_rand(min, max);
237}
238
239int Cucul::setAttr(unsigned long int attr)
240{
241    return cucul_set_attr(cv, attr);
242}
243
244unsigned long int Cucul::getAttr(int x, int y)
245{
246    return cucul_get_attr(cv, x, y);
247}
248
249int Cucul::setBoundaries(cucul_canvas_t *, int x, int y,
250                         unsigned int w, unsigned int h)
251{
252    return cucul_set_canvas_boundaries(cv, x, y, h, w);
253}
254
255unsigned int Cucul::getFrameCount()
256{
257    return cucul_get_canvas_frame_count(cv);
258}
259int Cucul::setFrame(unsigned int f)
260{
261    return cucul_set_canvas_frame(cv, f);
262}
263int Cucul::createFrame(unsigned int f)
264{
265    return cucul_create_canvas_frame(cv, f);
266}
267int Cucul::freeFrame(unsigned int f)
268{
269    return cucul_create_canvas_frame(cv, f);
270}
271
272Dither::Dither(unsigned int v1, unsigned int v2, unsigned int v3, unsigned int v4, unsigned int v5, unsigned int v6, unsigned int v7, unsigned int v8)
273{
274    dither = cucul_create_dither(v1, v2, v3, v4, v5, v6, v7, v8);
275}
276Dither::~Dither()
277{
278    cucul_free_dither(dither);
279}
280
281void Dither::setPalette(unsigned int r[], unsigned int g[], unsigned int b[], unsigned int a[])
282{
283    cucul_set_dither_palette(dither, r, g, b, a);
284}
285
286void Dither::setBrightness(float f)
287{
288    cucul_set_dither_brightness(dither, f);
289}
290
291void Dither::setGamma(float f)
292{
293    cucul_set_dither_gamma(dither, f);
294}
295
296void Dither::setContrast(float f)
297{
298    cucul_set_dither_contrast(dither, f);
299}
300
301void Dither::setInvert(int i)
302{
303    cucul_set_dither_invert(dither, i);
304}
305
306void Dither::setAntialias(char const *cv)
307{
308    cucul_set_dither_antialias(dither, cv);
309}
310
311char const *const * Dither::getAntialiasList()
312{
313    return cucul_get_dither_antialias_list(dither);
314}
315
316void Dither::setColor(char const *cv)
317{
318    cucul_set_dither_color(dither, cv);
319}
320
321char const *const * Dither::getColorList()
322{
323    return cucul_get_dither_color_list(dither);
324}
325
326void Dither::setCharset(char const *cv)
327{
328    cucul_set_dither_charset(dither, cv);
329}
330
331char const *const * Dither::getCharsetList()
332{
333    return cucul_get_dither_charset_list(dither);
334}
335
336void Dither::setMode(char const *cv)
337{
338    cucul_set_dither_mode(dither, cv);
339}
340
341char const *const * Dither::getModeList(void)
342{
343    return cucul_get_dither_mode_list(dither);
344}
345
346void Dither::Bitmap(Cucul *cv, int x, int y, int w, int h, void *v)
347{
348    cucul_dither_bitmap(cv->get_cucul_canvas_t(), x, y, w, h, dither, v);
349}
350
351Font::Font(void const *s, unsigned int v)
352{
353    font = cucul_load_font(s, v);
354    if(!font) throw -1;
355}
356
357char const *const * Font::getList(void)
358{
359    return cucul_get_font_list();
360}
361
362unsigned int Font::getWidth()
363{
364    return cucul_get_font_width(font);
365}
366
367unsigned int Font::getHeight()
368{
369    return cucul_get_font_height(font);
370}
371
372void Font::renderCanvas(Cucul *cv, unsigned char *buf, unsigned int x, unsigned int y, unsigned int w)
373{
374    cucul_render_canvas(cv->get_cucul_canvas_t(), font, buf, x, y, w);
375}
376
377unsigned long int const *Font::getBlocks()
378{
379    return cucul_get_font_blocks(font);
380}
381
382Font::~Font()
383{
384    cucul_free_font(font);
385}
386
387Buffer::Buffer()
388{
389    buffer_ = NULL;
390}
391
392Buffer::~Buffer()
393{
394    if(buffer_)
395        cucul_free_buffer(buffer_);
396}
397
398char const *const * Buffer::getExportList(void)
399{
400    return cucul_get_export_list();
401}
402
403void *Buffer::getData(void)
404{
405    return cucul_get_buffer_data(buffer_);
406}
407
408void Buffer::loadMemory(void *buf, unsigned long int size)
409{
410    buffer_ = cucul_load_memory(buf, size);
411    if(buffer_ == NULL)
412        throw -1;
413}
414
415void Buffer::loadFile(char const *filename)
416{
417    buffer_ = cucul_load_file(filename);
418    if(buffer_ == NULL)
419        throw -1;
420}
421
422unsigned long int Buffer::getSize()
423{
424    return cucul_get_buffer_size(buffer_);
425}
426
427cucul_buffer *Buffer::getBuffer()
428{
429    return buffer_;
430}
Note: See TracBrowser for help on using the repository browser.