all repos — openbox @ cd12a2eae5b5b72df08d588ac71d1f6cf6725dfb

openbox fork - make it a bit more like ryudo

render/render.h (raw)

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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#ifndef __render_h
#define __render_h

#include <X11/Xlib.h>
#define _XFT_NO_COMPAT_ /* no Xft 1 API */
#include <X11/Xft/Xft.h>
#include <glib.h>
#include "color.h"
#include "kernel/geom.h"

typedef enum {
    Flat,
    Raised,
    Sunken
} ReliefType;

typedef enum {
    Bevel1,
    Bevel2
} BevelType;

typedef enum {
    Background_ParentRelative,
    Background_Solid,
    Background_Horizontal,
    Background_Vertical,
    Background_Diagonal,
    Background_CrossDiagonal,
    Background_PipeCross,
    Background_Rectangle,
    Background_Pyramid
} SurfaceColorType;

typedef enum {
    Bitmask,
    Text,
    RGBA,
    NoTexture
} TextureType;

struct Appearance;

typedef struct Surface {
    SurfaceColorType grad;
    ReliefType relief;
    BevelType bevel;
    color_rgb *primary;
    color_rgb *secondary;
    color_rgb *border_color;
    color_rgb *bevel_dark; 
    color_rgb *bevel_light;
    gboolean interlaced;
    gboolean border;
    struct Appearance *parent;
    int parentx;
    int parenty;
    pixel32 *pixel_data;
} Surface;

typedef struct {
    XftFont *xftfont;
    int elipses_length;
} ObFont;

typedef enum {
    Justify_Center,
    Justify_Left,
    Justify_Right
} Justify;

typedef struct TextureText {
    ObFont *font;
    Justify justify;
    int shadow;
    char tint;
    unsigned char offset;
    color_rgb *color;
    char *string;
} TextureText;   

typedef struct {
    Pixmap mask;
    guint w, h;
    char *data;
} pixmap_mask;

typedef struct TextureMask {
    color_rgb *color;
    pixmap_mask *mask;
} TextureMask;

typedef struct TextureRGBA {
    guint width;
    guint height;
    pixel32 *data;
/* cached scaled so we don't have to scale often */
    guint cwidth;
    guint cheight;
    pixel32 *cache;
} TextureRGBA;

typedef union {
    TextureRGBA rgba;
    TextureText text;
    TextureMask mask;
} TextureData;

typedef struct Texture {
    TextureType type;
    TextureData data;
} Texture;

typedef struct Appearance {
    Surface surface;
    int textures;
    Texture *texture;
    Pixmap pixmap;
    XftDraw *xftdraw;

    /* cached for internal use */
    int w, h;
} Appearance;

extern Visual *render_visual;
extern XVisualInfo render_visual_info;
extern int render_depth;
extern Colormap render_colormap;

void render_startup(void);
void init_appearance(Appearance *l);
void paint(Window win, Appearance *l, int w, int h);
void render_shutdown(void);
Appearance *appearance_new(int numtex);
Appearance *appearance_copy(Appearance *a);
void appearance_free(Appearance *a);
void truecolor_startup(void);
void pseudocolor_startup(void);
void pixel32_to_pixmap(pixel32 *in, Pixmap out, int x, int y, int w, int h);

void appearance_minsize(Appearance *l, int *w, int *h);

gboolean render_pixmap_to_rgba(Pixmap pmap, Pixmap mask,
                               int *w, int *h, pixel32 **data);

#endif /*__render_h*/