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 */
/*****************************************************************************/
|