blob: 98face00f7431761bb041107e7b0eff3dda33b69 (
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
|
/** \file
* \brief Cairo Native Window Driver
*
* See Copyright Notice in cd.h
*/
#include <stdlib.h>
#include <stdio.h>
#include <gdk/gdk.h>
#include "cdcairoctx.h"
#include "cdnative.h"
static void cdkillcanvas(cdCtxCanvas *ctxcanvas)
{
cdcairoKillCanvas(ctxcanvas);
}
int cdactivate(cdCtxCanvas *ctxcanvas)
{
gdk_drawable_get_size(ctxcanvas->drawable, &ctxcanvas->canvas->w, &ctxcanvas->canvas->h);
ctxcanvas->canvas->w_mm = ((double)ctxcanvas->canvas->w) / ctxcanvas->canvas->xres;
ctxcanvas->canvas->h_mm = ((double)ctxcanvas->canvas->h) / ctxcanvas->canvas->yres;
return CD_OK;
}
static void cdcreatecanvas(cdCanvas* canvas, void *data)
{
cdCtxCanvas *ctxcanvas;
cairo_t* cr;
GdkScreen* screen;
GdkDrawable* drawable = (GdkDrawable*)data;
cr = gdk_cairo_create(drawable);
if (!cr)
return;
screen = gdk_drawable_get_screen(drawable);
canvas->bpp = gdk_drawable_get_depth(drawable);
canvas->xres = ((double)gdk_screen_get_width(screen) / (double)gdk_screen_get_width_mm(screen));
canvas->yres = ((double)gdk_screen_get_height(screen) / (double)gdk_screen_get_height_mm(screen));
gdk_drawable_get_size(drawable, &canvas->w, &canvas->h);
canvas->w_mm = ((double)canvas->w) / canvas->xres;
canvas->h_mm = ((double)canvas->h) / canvas->yres;
ctxcanvas = cdcairoCreateCanvas(canvas, cr);
ctxcanvas->drawable = drawable;
}
static void cdinittable(cdCanvas* canvas)
{
cdcairoInitTable(canvas);
canvas->cxKillCanvas = cdkillcanvas;
canvas->cxActivate = cdactivate;
}
/******************************************************/
static cdContext cdNativeWindowContext =
{
CD_CAP_ALL & ~(CD_CAP_PLAY | CD_CAP_YAXIS | CD_CAP_REGION | CD_CAP_WRITEMODE | CD_CAP_PALETTE | CD_CAP_FPRIMTIVES),
1,
cdcreatecanvas,
cdinittable,
NULL,
NULL,
};
cdContext* cdContextCairoNativeWindow(void)
{
return &cdNativeWindowContext;
}
|