205 lines
5.9 KiB
C++
205 lines
5.9 KiB
C++
/*
|
|
* libcaca++ C++ bindings for libcaca
|
|
* Copyright © 2006—2007 Jean-Yves Lamoureux <jylam@lnxscene.org>
|
|
* 2009—2018 Sam Hocevar <sam@hocevar.net>
|
|
* All Rights Reserved
|
|
*
|
|
* This library is free software. It comes without any warranty, to
|
|
* the extent permitted by applicable law. You can redistribute it
|
|
* and/or modify it under the terms of the Do What the Fuck You Want
|
|
* to Public License, Version 2, as published by Sam Hocevar. See
|
|
* http://www.wtfpl.net/ for more details.
|
|
*/
|
|
|
|
/** \file caca++.h
|
|
* \author Jean-Yves Lamoureux <jylam@lnxscene.org>
|
|
* \brief The \e libcaca++ public header.
|
|
*
|
|
* This header contains the public types and functions that applications
|
|
* using \e libcaca++ may use.
|
|
*/
|
|
#ifndef _CACA_PP_H
|
|
#define _CACA_PP_H
|
|
|
|
#include <caca.h>
|
|
|
|
#undef __class
|
|
#if defined(_WIN32) && defined(__LIBCACA_PP__)
|
|
# define __class class __declspec(dllexport)
|
|
#elif defined CACA_ENABLE_VISIBILITY
|
|
# define __class class __attribute__((visibility("default")))
|
|
#else
|
|
# define __class class
|
|
#endif
|
|
|
|
class Canvas;
|
|
|
|
__class Charset
|
|
{
|
|
public:
|
|
uint32_t utf8ToUtf32(char const *, size_t *);
|
|
size_t utf32ToUtf8(char *, uint32_t);
|
|
uint8_t utf32ToCp437(uint32_t);
|
|
uint32_t cp437ToUtf32(uint8_t);
|
|
};
|
|
|
|
/* Ugly, I know */
|
|
__class Font
|
|
{
|
|
public:
|
|
~Font();
|
|
Font(void const *, unsigned int);
|
|
char const *const * getList(void);
|
|
unsigned int getWidth();
|
|
unsigned int getHeight();
|
|
void renderCanvas(Canvas *, uint8_t *, unsigned int,
|
|
unsigned int, unsigned int);
|
|
uint32_t const *getBlocks();
|
|
|
|
private:
|
|
caca_font *font;
|
|
};
|
|
|
|
__class Dither
|
|
{
|
|
public:
|
|
Dither(unsigned int, unsigned int, unsigned int, unsigned int,
|
|
unsigned int, unsigned int, unsigned int, unsigned int);
|
|
~Dither();
|
|
|
|
void setPalette(uint32_t r[], uint32_t g[],
|
|
uint32_t b[], uint32_t a[]);
|
|
void setBrightness(float);
|
|
void setGamma(float);
|
|
void setContrast(float);
|
|
void setAntialias(char const *);
|
|
char const *const * getAntialiasList();
|
|
void setColor(char const *);
|
|
char const *const * getColorList();
|
|
void setCharset(char const *);
|
|
char const *const * getCharsetList();
|
|
void setMode(char const *);
|
|
char const *const * getModeList();
|
|
void Bitmap(Canvas *, int, int, int, int, void *);
|
|
|
|
private:
|
|
caca_dither *dither;
|
|
};
|
|
|
|
__class Canvas
|
|
{
|
|
friend class Caca;
|
|
friend class Dither;
|
|
friend class Font;
|
|
public:
|
|
Canvas();
|
|
Canvas(int width, int height);
|
|
~Canvas();
|
|
|
|
void setSize(unsigned int w, unsigned int h);
|
|
unsigned int getWidth(void);
|
|
unsigned int getHeight(void);
|
|
uint32_t getAttr(int, int);
|
|
int setAttr(uint32_t);
|
|
int setColorANSI(uint8_t f, uint8_t b);
|
|
int setColorARGB(unsigned int f, unsigned int b);
|
|
void Printf(int x, int y , char const * format, ...);
|
|
void putChar(int x, int y, uint32_t ch);
|
|
uint32_t getChar(int, int);
|
|
void putStr(int x, int y, char *str);
|
|
void Clear(void);
|
|
void Blit(int, int, Canvas* c1, Canvas* c2);
|
|
void Invert();
|
|
void Flip();
|
|
void Flop();
|
|
void Rotate180();
|
|
void RotateLeft();
|
|
void RotateRight();
|
|
void drawLine(int, int, int, int, uint32_t);
|
|
void drawPolyline(int const x[], int const y[], int, uint32_t);
|
|
void drawThinLine(int, int, int, int);
|
|
void drawThinPolyline(int const x[], int const y[], int);
|
|
void drawCircle(int, int, int, uint32_t);
|
|
void drawEllipse(int, int, int, int, uint32_t);
|
|
void drawThinEllipse(int, int, int, int);
|
|
void fillEllipse(int, int, int, int, uint32_t);
|
|
void drawBox(int, int, int, int, uint32_t);
|
|
void drawThinBox(int, int, int, int);
|
|
void drawCP437Box(int, int, int, int);
|
|
void fillBox(int, int, int, int, uint32_t);
|
|
void drawTriangle(int, int, int, int, int, int, uint32_t);
|
|
void drawThinTriangle(int, int, int, int, int, int);
|
|
void fillTriangle(int, int, int, int, int, int, uint32_t);
|
|
void fillTriangleTextured(int coords[6], Canvas *tex, float uv[6]);
|
|
int setBoundaries(caca_canvas_t *, int, int, unsigned int, unsigned int);
|
|
unsigned int getFrameCount();
|
|
int setFrame(unsigned int);
|
|
int createFrame(unsigned int);
|
|
int freeFrame(unsigned int);
|
|
|
|
char const * const * getImportList(void);
|
|
long int importFromMemory(void const *, size_t, char const *);
|
|
long int importFromFile(char const *, char const *);
|
|
char const * const * getExportList(void);
|
|
void *exportToMemory(char const *, size_t *);
|
|
|
|
static int Rand(int, int);
|
|
static char const * getVersion();
|
|
|
|
protected:
|
|
caca_canvas_t *get_caca_canvas_t();
|
|
|
|
private:
|
|
caca_canvas_t *cv;
|
|
};
|
|
|
|
__class Event
|
|
{
|
|
friend class Caca;
|
|
public:
|
|
enum caca_event_type
|
|
{
|
|
CACA_EVENT_NONE = 0x0000, /**< No event. */
|
|
|
|
CACA_EVENT_KEY_PRESS = 0x0001, /**< A key was pressed. */
|
|
CACA_EVENT_KEY_RELEASE = 0x0002, /**< A key was released. */
|
|
CACA_EVENT_MOUSE_PRESS = 0x0004, /**< A mouse button was pressed. */
|
|
CACA_EVENT_MOUSE_RELEASE = 0x0008, /**< A mouse button was released. */
|
|
CACA_EVENT_MOUSE_MOTION = 0x0010, /**< The mouse was moved. */
|
|
CACA_EVENT_RESIZE = 0x0020, /**< The window was resized. */
|
|
|
|
CACA_EVENT_ANY = 0xffff /**< Bitmask for any event. */
|
|
} type;
|
|
|
|
protected:
|
|
caca_event_t e;
|
|
};
|
|
|
|
__class Caca
|
|
{
|
|
public:
|
|
Caca();
|
|
Caca(Canvas *cv);
|
|
~Caca();
|
|
|
|
void Attach(Canvas *cv);
|
|
void Detach();
|
|
void setDisplayTime(unsigned int);
|
|
|
|
void Display();
|
|
unsigned int getDisplayTime();
|
|
unsigned int getWidth();
|
|
unsigned int getHeight();
|
|
int setTitle(char const *);
|
|
int getEvent(unsigned int, Event*, int);
|
|
unsigned int getMouseX();
|
|
unsigned int getMouseY();
|
|
void setMouse(int);
|
|
|
|
static char const * getVersion();
|
|
private:
|
|
caca_display_t *dp;
|
|
};
|
|
|
|
#endif /* _CACA_PP_H */
|