XColorGCP.h 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. /*****************************************************************************/
  2. /* XColorGC GCと色の管理・問い合わせ用のライブラリ */
  3. /*****************************************************************************/
  4. #ifndef _XColorGCP_h_INCLUDED_
  5. #define _XColorGCP_h_INCLUDED_
  6. #include "XColorGC.h"
  7. #define RGB_MAX_VALUE 65535
  8. /*===========================================================================*/
  9. /* XFireworks は,描画の高速化のために,描画に必要な色と GC は,起動時に */
  10. /* すべて確保するのですが,無駄な X サーバへのリクエストとメモリの浪費を */
  11. /* 減らすために,いったん確保した色と GC はデータベースに記憶しておき, */
  12. /* 同じ色が必要になったときには,共有するようにします. */
  13. /* (XColorGCDatabase はそのためのクラスです) */
  14. /* これにより,XAllocColor() による色の問い合わせ待ちが減るため, */
  15. /* 起動が格段に高速になります. */
  16. /* データベースの検索には,ハッシュ,キャッシュ,学習機能を使用することが */
  17. /* できます. */
  18. /*===========================================================================*/
  19. /*---------------------------------------------------------------------------*/
  20. /* 以下を有効にすると,同じ色のGCがどれくらい共有されているか調べることが */
  21. /* できます. */
  22. /*---------------------------------------------------------------------------*/
  23. /* #define HIT_LIST */
  24. /*---------------------------------------------------------------------------*/
  25. /* 以下を有効にすると,キャッシュのヒット率を調べることができます. */
  26. /*---------------------------------------------------------------------------*/
  27. /* #define HIT_CACHE */
  28. /*===========================================================================*/
  29. /* GC の実体を管理するクラス */
  30. /*===========================================================================*/
  31. typedef struct _XColorGCInstance * XColorGCInstance;
  32. typedef struct _XColorGCInstance {
  33. XDisplay x_display;
  34. GC gc;
  35. XColor color;
  36. } _XColorGCInstance;
  37. /*===========================================================================*/
  38. /* GC の実体のリストを管理するクラス */
  39. /* 同一の色のGCは共有したいため,GCの実体をリストで管理し,GCの取得要求に */
  40. /* 対して,適切な XColorGCInstance を返す. */
  41. /* (すでに存在するのならそれを返し,無ければ Create する) */
  42. /*===========================================================================*/
  43. typedef struct _XColorGCList * XColorGCList;
  44. typedef struct _XColorGCList { /* GC の管理用 */
  45. XDisplay x_display;
  46. int studying_flag; /* 学習機能のON/OFFのフラグ */
  47. ObjList list; /* XColorGCInstance のリスト */
  48. } _XColorGCList;
  49. /*===========================================================================*/
  50. /* キャッシュ */
  51. /*===========================================================================*/
  52. typedef struct _XColorGCCacheBuffer * XColorGCCacheBuffer;
  53. typedef struct _XColorGCCache * XColorGCCache;
  54. /* キャッシュ用バッファ */
  55. typedef struct _XColorGCCacheBuffer {
  56. XColorGCInstance instance;
  57. } _XColorGCCacheBuffer;
  58. /* キャッシュ */
  59. typedef struct _XColorGCCache {
  60. int size; /* キャッシュサイズ */
  61. XColorGCList color_gc_list;
  62. ObjList buffer_list;
  63. } _XColorGCCache;
  64. /*===========================================================================*/
  65. /* ハッシュ */
  66. /*===========================================================================*/
  67. typedef struct _XColorGCHash * XColorGCHash;
  68. typedef struct _XColorGCHash {
  69. int number; /* ハッシュの個数 */
  70. int cache_flag; /* キャッシュの使用・未使用のフラグ */
  71. XColorGCCache * color_gc_cache;
  72. XColorGCList * color_gc_list;
  73. } _XColorGCHash;
  74. /*===========================================================================*/
  75. /* 色の名前とRGB値の対応を管理するためのクラス */
  76. /*===========================================================================*/
  77. typedef struct _ColorName * ColorName;
  78. typedef struct _ColorNameList * ColorNameList;
  79. typedef struct _ColorName {
  80. char * name;
  81. XColor color;
  82. } _ColorName;
  83. typedef struct _ColorNameList {
  84. XDisplay x_display;
  85. ObjList list; /* ColorName のリスト */
  86. } _ColorNameList;
  87. /*===========================================================================*/
  88. /* 色と GC のデータベース */
  89. /* GC の検索には,ハッシュを用いる. */
  90. /*===========================================================================*/
  91. typedef struct _XColorGCDatabase { /* GC の管理用 */
  92. XDisplay x_display;
  93. XColorGCHash hash; /* ハッシュ */
  94. ColorNameList color_name_list; /* 色名 → RGB値の変換用 */
  95. /* 背景色.色名で"none"を指定すると,この色が使用される. */
  96. XColorGC background_color_gc;
  97. /* 減色数.16階調にするときには16を指定 */
  98. /* 10階調や20階調も指定可能 */
  99. int gradation;
  100. } _XColorGCDatabase;
  101. /*===========================================================================*/
  102. /* GC を管理するクラス */
  103. /* 同じ色の GC が重複しない用に,XColorGCList で GC を管理して, */
  104. /* 色の要求時には,XColorGCList から GC をもらうようにする. */
  105. /*===========================================================================*/
  106. typedef struct _XColorGC {
  107. XColorGCInstance instance;
  108. } _XColorGC;
  109. #endif
  110. /*****************************************************************************/
  111. /* End of File */
  112. /*****************************************************************************/