File: ColorGCP.h

package info (click to toggle)
xfireworks 1.3-16
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,036 kB
  • sloc: ansic: 6,896; makefile: 383; sh: 40
file content (147 lines) | stat: -rw-r--r-- 6,608 bytes parent folder | download
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
146
147
/*****************************************************************************/
/* ColorGC GCと色の管理・問い合わせ用のライブラリ                            */
/*****************************************************************************/

#ifndef _XFIREWORKS_ColorGCP_h_INCLUDED_
#define _XFIREWORKS_ColorGCP_h_INCLUDED_

#include "ColorGC.h"

#define RGB_MAX_VALUE 65535

/*===========================================================================*/
/* XFireworks は,描画の高速化のために,描画に必要な色と GC は,起動時に     */
/* すべて確保するのですが,無駄な X サーバへのリクエストとメモリの浪費を     */
/* 減らすために,いったん確保した色と GC はデータベースに記憶しておき,      */
/* 同じ色が必要になったときには,共有するようにします.                      */
/* (ColorGCDatabase はそのためのクラスです)                                  */
/* これにより,XAllocColor() による色の問い合わせ待ちが減るため,            */
/* 起動が格段に高速になります.                                              */
/* データベースの検索には,ハッシュ,キャッシュ,学習機能を使用することが    */
/* できます.                                                                */
/*===========================================================================*/

/*---------------------------------------------------------------------------*/
/* 以下を有効にすると,同じ色のGCがどれくらい共有されているか調べることが    */
/* できます.                                                                */
/*---------------------------------------------------------------------------*/

/* #define HIT_LIST */

/*---------------------------------------------------------------------------*/
/* 以下を有効にすると,キャッシュのヒット率を調べることができます.          */
/*---------------------------------------------------------------------------*/

/* #define HIT_CACHE */

/*===========================================================================*/
/* GC の実体を管理するクラス                                                 */
/*===========================================================================*/

typedef struct _ColorGCInstance * ColorGCInstance;

typedef struct _ColorGCInstance {
  Disp disp;
  GC gc;
  XColor color;
} _ColorGCInstance;

/*===========================================================================*/
/* GC の実体のリストを管理するクラス                                         */
/* 同一の色のGCは共有したいため,GCの実体をリストで管理し,GCの取得要求に    */
/* 対して,適切な ColorGCInstance を返す.                                   */
/* (すでに存在するのならそれを返し,無ければ Create する)                    */
/*===========================================================================*/

typedef struct _ColorGCList * ColorGCList;

typedef struct _ColorGCList { /* GC の管理用 */
  Disp disp;
  int studying_flag; /* 学習機能のON/OFFのフラグ */
  ObjList list; /* ColorGCInstance のリスト */
} _ColorGCList;

/*===========================================================================*/
/* キャッシュ                                                                */
/*===========================================================================*/

typedef struct _ColorGCCacheBuffer * ColorGCCacheBuffer;
typedef struct _ColorGCCache * ColorGCCache;

/* キャッシュ用バッファ */
typedef struct _ColorGCCacheBuffer {
  ColorGCInstance instance;
} _ColorGCCacheBuffer;

/* キャッシュ */
typedef struct _ColorGCCache {
  int size; /* キャッシュサイズ */
  ColorGCList color_gc_list;
  ObjList buffer_list;
} _ColorGCCache;

/*===========================================================================*/
/* ハッシュ                                                                  */
/*===========================================================================*/

typedef struct _ColorGCHash * ColorGCHash;

typedef struct _ColorGCHash {
  int number; /* ハッシュの個数 */
  int cache_flag; /* キャッシュの使用・未使用のフラグ */
  ColorGCCache * color_gc_cache;
  ColorGCList * color_gc_list;
} _ColorGCHash;

/*===========================================================================*/
/* 色の名前とRGB値の対応を管理するためのクラス                               */
/*===========================================================================*/

typedef struct _ColorName * ColorName;
typedef struct _ColorNameList * ColorNameList;

typedef struct _ColorName {
  char * name;
  XColor color;
} _ColorName;

typedef struct _ColorNameList {
  Disp disp;
  ObjList list; /* ColorName のリスト */
} _ColorNameList;

/*===========================================================================*/
/* 色と GC のデータベース                                                    */
/* GC の検索には,ハッシュを用いる.                                         */
/*===========================================================================*/

typedef struct _ColorGCDatabase { /* GC の管理用 */
  Disp disp;
  ColorGCHash hash; /* ハッシュ */

  ColorNameList color_name_list; /* 色名 → RGB値の変換用 */

  /* 背景色.色名で"none"を指定すると,この色が使用される. */
  ColorGC background_color_gc;

  /* 減色数.16階調にするときには16を指定 */
  /* 10階調や20階調も指定可能             */
  int gradation;

} _ColorGCDatabase;

/*===========================================================================*/
/* GC を管理するクラス                                                       */
/* 同じ色の GC が重複しない用に,ColorGCList で GC を管理して,              */
/* 色の要求時には,ColorGCList から GC をもらうようにする.                  */
/*===========================================================================*/

typedef struct _ColorGC {
  ColorGCInstance instance;
} _ColorGC;

#endif

/*****************************************************************************/
/* End of File                                                               */
/*****************************************************************************/