GadgetSeed  0.9.6
graphics.h
[詳解]
1 /** @file
2  @brief グラフィックライブラリ
3 
4  @date 2007.03.20
5  @author Takashi SHUDO
6 */
7 
8 #ifndef GRAPHICS_H
9 #define GRAPHICS_H
10 
11 #include "sysconfig.h"
12 #include "device.h"
13 
14 #define MAX_FRAMEBUF 2 ///< 最大フレームバッファ数
15 
16 #ifdef GSC_GRAPHICS_COLOR_16BIT ///< $gsc グラフィックデバイスは16ビットカラー
17 typedef unsigned short PIXEL_DATA;
18 #endif
19 #ifdef GSC_GRAPHICS_COLOR_24BIT ///< $gsc グラフィックデバイスは24ビットカラー
20 typedef unsigned int PIXEL_DATA;
21 #endif
22 #ifdef GSC_GRAPHICS_COLOR_32BIT ///< $gsc グラフィックデバイスは32ビットカラー
23 typedef unsigned int PIXEL_DATA;
24 #endif
25 
26 // 16bitカラー変換
27 #define RGB16(r,g,b) (unsigned int)(((b) >> 3) | (((g) >> 2) << 5) | (((r) >> 3) << 11))
28 
29 // 24bitカラー変換
30 #define RGB24(r,g,b) (unsigned int)((b) | ((g) << 8) | ((r) << 16))
31 #define RGB24_TO_R(c) (unsigned char)(((c) >> 16) & 0xff)
32 #define RGB24_TO_G(c) (unsigned char)(((c) >> 8) & 0xff)
33 #define RGB24_TO_B(c) (unsigned char)(((c) >> 0) & 0xff)
34 
35 // 32bitカラー変換(ARGB)
36 #define RGB32(r,g,b) (unsigned int)(0xff000000 | (b) | ((g) << 8) | ((r) << 16))
37 #define RGB32_TO_R(c) (unsigned char)(((c) >> 16) & 0xff)
38 #define RGB32_TO_G(c) (unsigned char)(((c) >> 8) & 0xff)
39 #define RGB32_TO_B(c) (unsigned char)(((c) >> 0) & 0xff)
40 
41 // 色変換
42 #if defined(GSC_GRAPHICS_COLOR_16BIT)
43 #define RGB RGB16
44 #elif defined(GSC_GRAPHICS_COLOR_24BIT)
45 #define RGB RGB24
46 #define RGB_TO_R RGB24_TO_R
47 #define RGB_TO_G RGB24_TO_G
48 #define RGB_TO_B RGB24_TO_B
49 #elif defined(GSC_GRAPHICS_COLOR_32BIT)
50 #define RGB RGB32
51 #define RGB_TO_R RGB32_TO_R
52 #define RGB_TO_G RGB32_TO_G
53 #define RGB_TO_B RGB32_TO_B
54 #endif
55 
56 // set_draw_mode(mode)
57 /*
58  "fore color" & "back color"
59  */
60 #define GRP_DRAWMODE_NORMAL 0 ///< Draw the foreground with fore color. Draw the background with back color.
61 #define GRP_DRAWMODE_REVERSE 1 ///< Draw the foreground with back color. Draw the background with fore color.
62 #define GRP_DRAWMODE_FOREONLY 2 ///< Draw the foreground with back color. No draw the background.
63 
64 struct st_rect {
65  short left; ///< 左上頂点のX座標
66  short top; ///< 左上頂点のY座標
67  short right; ///< 右下頂点のX座標
68  short bottom; ///< 右下頂点のY座標
69 }; ///< 矩形
70 
71 struct st_position {
72  short x; ///< X座標
73  short y; ///< Y座標
74 }; ///< 位置
75 
76 struct st_surface {
77  short width; ///< 幅
78  short height; ///< 高さ
79 }; ///< 面
80 
81 struct st_box {
82  struct st_position pos; ///< 左上頂点の位置
83  struct st_surface sur; ///< 面の大きさ
84 }; ///< 長(正)方形
85 
86 struct st_bitmap {
87  short width; ///< 幅
88  short height; ///< 高さ
89  unsigned char *data; ///< ビットマップデータポインタ
90 }; ///< ビットマップグラフィックデータ
91 
93  struct st_device *fb_dev;
94  short screen_width;
95  short screen_height;
96  unsigned short color_depth;
97  unsigned short frame_num;
98  unsigned char *frame_buf_ptr[MAX_FRAMEBUF];
99  unsigned int mem_size;
100  unsigned int pen_color;
101  unsigned int back_color;
102  unsigned char pen_mode;
103  struct st_rect i_clip_rect;
104  struct st_rect clip_rect;
105  unsigned char pen_pat[8];
106 }; ///< [TODO] 複数グラフィックデバイスに対応したい
107 
108 extern int register_graphics_dev(struct st_device *dev);
109 extern int init_graphics(char *devname);
110 
111 extern int get_frame_num(void);
112 extern int set_display_frame(int fnum);
113 extern int get_display_frame(void);
114 extern int set_draw_frame(int fnum);
115 extern int get_draw_frame(void);
116 extern void get_screen_info(short *width, short *height);
117 
118 extern void clear_screen(void);
119 extern void set_forecolor(unsigned int color);
120 extern unsigned int get_forecolor(void);
121 extern void set_backcolor(unsigned int color);
122 extern unsigned int get_backcolor(void);
123 extern void set_draw_mode(unsigned char mode);
124 extern unsigned char get_draw_mode(void);
125 
126 extern void and_rect(struct st_rect *a, struct st_rect *s1, struct st_rect *s2);
127 extern short empty_rect(struct st_rect *r);
128 extern void correct_rect(struct st_rect *rect);
129 extern void clear_clip_rect(void);
130 extern void set_clip_rect(struct st_rect *rect);
131 extern void set_clip_box(struct st_box *box);
132 extern void get_clip_rect(struct st_rect *rect);
133 
134 extern void draw_point(short x, short y);
135 extern void draw_h_line(short x, short y, short width);
136 extern void draw_v_line(short x, short y, short height);
137 extern void draw_line(short x, short y, short xe, short ye);
138 extern void draw_rect(struct st_rect *rect);
139 extern void draw_fill_rect(struct st_rect *rect);
140 extern void draw_bitdata(short px, short py, short width, short height, unsigned char *data, short dw);
141 
142 extern void draw_enlarged_bitdata(short px, short py, short width, short height, unsigned char *data, short dw, int rate);
143 extern void draw_bitmap(short px, short py, struct st_bitmap *bitmap);
144 extern void draw_enlarged_bitmap(short px, short py, struct st_bitmap *bitmap, int rate);
145 
146 extern void draw_circle(short x0, short y0, short r);
147 extern void draw_fill_circle(short x0, short y0, short r);
148 extern void draw_ellipse(short xc, short yc, short rx, short ry);
149 extern void draw_fill_ellipse(short xc, short yc, short rx, short ry);
150 #if 0
151 extern void scroll_screen(short x, short y);
152 #endif
153 
154 extern void draw_box(struct st_box *box);
155 extern void draw_round_box(struct st_box *box, short r);
156 extern void draw_fill_box(struct st_box *box);
157 extern void draw_round_fill_box(struct st_box *box, short r);
158 extern void draw_vertex4_region(short x0, short y0, short x1, short y1, short x2, short y2, short x3, short y3);
159 
160 extern void draw_round_rect(struct st_rect *rect, short r);
161 extern void draw_round_fill_rect(struct st_rect *rect, short r);
162 extern void draw_quarter_circle(short x0, short y0, short r, char q);
163 extern void draw_sector(short x, short y, short er, short ir, char q);
164 
165 extern int is_point_in_rect(short x, short y, struct st_rect *rect);
166 extern int is_point_in_box(short x, short y, struct st_box *box);
167 
168 extern void box2rect(struct st_rect *rect, struct st_box *box);
169 
170 extern void draw_image(short px, short py, short width, short height, void *image, short dw);
171 
172 extern void scroll_rect_v(struct st_rect *rect, short pixcel);
173 
174 extern void resize_image(void *dst_image, short dwidth, short dheight,
175  void *src_image, short swidth, short sheight);
176 
177 #endif // GRAPHICS_H
void draw_point(short x, short y)
点を描画する
Definition: graphics.c:447
unsigned char get_draw_mode(void)
描画モードを取得する
Definition: graphics.c:426
void draw_round_box(struct st_box *box, short r)
角の丸い四角を描画する
Definition: graphics.c:1406
short y
Y座標
Definition: graphics.h:73
void clear_clip_rect(void)
クリッピングエリアを無効にする
Definition: graphics.c:254
void draw_round_fill_box(struct st_box *box, short r)
塗りつぶした角の丸い四角を描画する
Definition: graphics.c:1421
void draw_image(short px, short py, short width, short height, void *image, short dw)
イメージデータを描画する
Definition: graphics.c:1840
void draw_round_rect(struct st_rect *rect, short r)
角の丸い矩形を描画する
Definition: graphics.c:748
void draw_bitmap(short px, short py, struct st_bitmap *bitmap)
ビットマップデータを描画する
Definition: graphics.c:1146
矩形
Definition: graphics.h:64
short height
高さ
Definition: graphics.h:78
void set_clip_box(struct st_box *box)
クリッピングエリアを四角形で指定する
Definition: graphics.c:279
void set_backcolor(unsigned int color)
描画の背景色を設定する
Definition: graphics.c:392
void draw_sector(short x, short y, short er, short ir, char q)
扇形を描画する
Definition: graphics.c:1732
short top
左上頂点のY座標
Definition: graphics.h:66
void get_clip_rect(struct st_rect *rect)
クリッピングエリアを矩形で取得する
Definition: graphics.c:293
unsigned int get_forecolor(void)
描画の色を取得する
Definition: graphics.c:382
short bottom
右下頂点のY座標
Definition: graphics.h:68
short left
左上頂点のX座標
Definition: graphics.h:65
ビットマップグラフィックデータ
Definition: graphics.h:86
長(正)方形
Definition: graphics.h:81
位置
Definition: graphics.h:71
void get_screen_info(short *width, short *height)
スクリーンのサイズ情報を取得する
Definition: graphics.c:329
[TODO] 複数グラフィックデバイスに対応したい
Definition: graphics.h:92
unsigned char * data
ビットマップデータポインタ
Definition: graphics.h:89
short width
Definition: graphics.h:77
short right
右下頂点のX座標
Definition: graphics.h:67
void draw_line(short x, short y, short xe, short ye)
直線を描画する
Definition: graphics.c:664
void draw_h_line(short x, short y, short width)
水平線を描画する
Definition: graphics.c:477
void draw_rect(struct st_rect *rect)
矩形を描画する
Definition: graphics.c:694
void scroll_rect_v(struct st_rect *rect, short pixcel)
矩形範囲を縦方向にスクロールする
Definition: graphics.c:1882
int is_point_in_box(short x, short y, struct st_box *box)
座標が四角の内部か調べる
Definition: graphics_op.c:144
int is_point_in_rect(short x, short y, struct st_rect *rect)
座標が矩形の内部か調べる
Definition: graphics_op.c:114
int register_graphics_dev(struct st_device *dev)
グラフィックライブラリにデバイスを登録する
Definition: graphics.c:148
void draw_bitdata(short px, short py, short width, short height, unsigned char *data, short dw)
ビットデータを描画する
Definition: graphics.c:1041
void draw_fill_rect(struct st_rect *rect)
塗りつぶした矩形を描画する
Definition: graphics.c:821
#define MAX_FRAMEBUF
最大フレームバッファ数
Definition: graphics.h:14
void draw_box(struct st_box *box)
四角を描画する
Definition: graphics.c:1391
void draw_enlarged_bitdata(short px, short py, short width, short height, unsigned char *data, short dw, int rate)
拡大したビットデータを描画する
Definition: graphics.c:1086
int get_draw_frame(void)
描画するフレームバッファ番号を取得する
Definition: graphics.c:246
void set_draw_mode(unsigned char mode)
描画モードを設定する
Definition: graphics.c:414
void set_forecolor(unsigned int color)
描画の色を設定する
Definition: graphics.c:370
int get_display_frame(void)
表示しているフレームバッファ番号を取得する
Definition: graphics.c:214
void draw_fill_ellipse(short xc, short yc, short rx, short ry)
塗りつぶした楕円を描画する
Definition: graphics.c:1335
void draw_fill_box(struct st_box *box)
塗りつぶした四角を描画する
Definition: graphics.c:1435
Definition: graphics.h:76
int set_display_frame(int fnum)
表示するフレームバッファ番号を設定する
Definition: graphics.c:204
short height
高さ
Definition: graphics.h:88
void box2rect(struct st_rect *rect, struct st_box *box)
box -> rect 変換
Definition: graphics_op.c:162
void set_clip_rect(struct st_rect *rect)
クリッピングエリアを矩形で指定する
Definition: graphics.c:264
void draw_quarter_circle(short x0, short y0, short r, char q)
1/4の円を描画する
Definition: graphics.c:1207
unsigned int get_backcolor(void)
描画の背景色を取得する
Definition: graphics.c:404
int set_draw_frame(int fnum)
描画するフレームバッファ番号を設定する
Definition: graphics.c:236
void clear_screen(void)
画面を全て0で描画する
Definition: graphics.c:338
void and_rect(struct st_rect *a, struct st_rect *s1, struct st_rect *s2)
2つの矩形のアンドを求める
Definition: graphics_op.c:24
short empty_rect(struct st_rect *r)
矩形が0か調べる
Definition: graphics_op.c:70
void draw_vertex4_region(short x0, short y0, short x1, short y1, short x2, short y2, short x3, short y3)
塗りつぶした4頂点の領域を描画する
Definition: graphics.c:1510
void draw_fill_circle(short x0, short y0, short r)
塗りつぶした円を描画する
Definition: graphics.c:1253
void resize_image(void *dst_image, short dwidth, short dheight, void *src_image, short swidth, short sheight)
イメージデータのサイズを変更する
Definition: graphics_op.c:180
int get_frame_num(void)
フレームバッファ数を取得する
Definition: graphics.c:224
デバイスドライバAPI
デバイスドライバ構造体
Definition: device.h:25
void draw_enlarged_bitmap(short px, short py, struct st_bitmap *bitmap, int rate)
拡大したビットマップデータを描画する
Definition: graphics.c:1160
int init_graphics(char *devname)
グラフィックスライブラリを初期化する
Definition: graphics.c:305
void draw_v_line(short x, short y, short height)
垂直線を描画する
Definition: graphics.c:511
void correct_rect(struct st_rect *rect)
矩形を修正する
Definition: graphics_op.c:88
short width
Definition: graphics.h:87
void draw_circle(short x0, short y0, short r)
円を描画する
Definition: graphics.c:1173
void draw_round_fill_rect(struct st_rect *rect, short r)
角の丸い塗りつぶした矩形を描画する
Definition: graphics.c:838
short x
X座標
Definition: graphics.h:72
void draw_ellipse(short xc, short yc, short rx, short ry)
楕円を描画する
Definition: graphics.c:1283