summaryrefslogtreecommitdiff
path: root/src/gdk/cdgdk.h
blob: aea5e8a818fa12c3c5f6905e90ebe075e38a594c (plain)
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
75
76
77
78
79
80
81
82
/** \file
 * \brief Gdk Cairo Base Driver
 *
 * See Copyright Notice in cd.h
 */

#ifndef __CDGDK_H
#define __CDGDK_H

#include <gdk/gdk.h>

#include "cd.h"
#include "cd_private.h"


struct _cdCtxImage {
  unsigned int w, h, depth;
  GdkPixmap* img;
  GdkScreen* scr;
  GdkVisual* vis;
};

struct _cdCtxCanvas {
  cdCanvas* canvas;
  GdkVisual* vis;           /* visual usado pela aplicacao */
  GdkScreen *scr;
  GdkGC* gc;                 /* graphic context */
  GdkDrawable* wnd;          /* drawable */
  GdkColor fg;

  GdkPixmap* last_hatch;     /* ultimo hatch setado pelo usuario */
  GdkPixmap* last_stipple;   /* ultimo stipple setado pelo usuario */
  GdkPixmap* last_pattern;   /* ultimo pattern setado pelo usuario */
  GdkGC* last_stipple_gc;
  int last_stipple_w;
  int last_stipple_h;

  GdkGC* last_pattern_gc;
  int last_pattern_w;
  int last_pattern_h;

  unsigned int depth;    /* depth do canvas */
  GdkPixmap* clip_polygon;   /* poligono de clipping */
  GdkPixmap* new_region;
  GdkPixmap* region_aux;
  GdkGC* region_aux_gc;
  void *data;            /* informacoes especificas do driver */
  long int *xidata;      /* ximage cache */
  int xisize;
  GdkColormap* colormap;      /* colormap para todos os canvas */
  GdkColor* color_table;      /* tabela de cores do colormap */
  int num_colors;             /* tamanho maximo da tabela de cores  */
  int rshift;                 /* constante red para calculo truecolor */
  int gshift;                 /* constante green para calculo truecolor */
  int bshift;                 /* constante blue para calculo truecolor */
  double xmatrix[6];          /* transformation matrix that includes axis inversion */
  float  rotate_angle;
  int    rotate_center_x,
         rotate_center_y;

  cairo_font_face_t* font;     /* fonte de caracteres no X */

  cdImage* image_dbuffer; /* utilizado pelo driver de Double buffer */
  cdCanvas* canvas_dbuffer;
};

#define cdCOLOR8TO16(_x) (_x*257)  /* 65535/255 = 257 */
#define cdCOLOR16TO8(_x) ((unsigned char)(_x/257))

extern GdkColor (*cdgdkGetPixel)(cdCtxCanvas *ctxcanvas, unsigned long rgb);
extern void (*cdxGetRGB)(cdCtxCanvas *ctxcanvas, unsigned long pixel, 
                                                 unsigned char* red, 
                                                 unsigned char* green, 
                                                 unsigned char* blue);

cdCtxCanvas *cdgdkCreateCanvas(cdCanvas* canvas, GdkDrawable* wnd, GdkScreen* scr, GdkVisual* vis);
void cdxInitTable(cdCanvas* canvas);
void cdxKillCanvas(cdCtxCanvas *ctxcanvas);
int cdgdkClip(cdCtxCanvas *ctxcanvas, int clip_mode);
void cdgdkPoly(cdCtxCanvas *ctxcanvas, int mode, cdPoint* poly, int n);

#endif