1 #ifdef CREATE_STRUCT_DEFINITIONS 2 #undef CREATE_STRUCT_DEFINITIONS 3 #define START(funcname, structname) \ 4 typedef struct structname { 5 #define GENERIC(type, member) \ 6 type member; 7 #define STRING(member) \ 8 char *member; 9 #define FTVECTOR(member) \ 10 FT_Vector member; 11 #define BITMAPHASHKEY(member) \ 12 BitmapHashKey member; 13 #define END(typedefnamename) \ 14 } typedefnamename; 15 16 #elif defined(CREATE_COMPARISON_FUNCTIONS) 17 #undef CREATE_COMPARISON_FUNCTIONS 18 #define START(funcname, structname) \ 19 static unsigned funcname##_compare(void *key1, void *key2, size_t key_size) \ 20 { \ 21 struct structname *a = key1; \ 22 struct structname *b = key2; \ 23 return // conditions follow 24 #define GENERIC(type, member) \ 25 a->member == b->member && 26 #define STRING(member) \ 27 strcmp(a->member, b->member) == 0 && 28 #define FTVECTOR(member) \ 29 a->member.x == b->member.x && a->member.y == b->member.y && 30 #define BITMAPHASHKEY(member) \ 31 bitmap_compare(&a->member, &b->member, sizeof(a->member)) && 32 #define END(typedefname) \ 33 1; \ 34 } 35 36 #elif defined(CREATE_HASH_FUNCTIONS) 37 #undef CREATE_HASH_FUNCTIONS 38 #define START(funcname, structname) \ 39 static unsigned funcname##_hash(void *buf, size_t len) \ 40 { \ 41 struct structname *p = buf; \ 42 unsigned hval = FNV1_32A_INIT; 43 #define GENERIC(type, member) \ 44 hval = fnv_32a_buf(&p->member, sizeof(p->member), hval); 45 #define STRING(member) \ 46 hval = fnv_32a_str(p->member, hval); 47 #define FTVECTOR(member) GENERIC(, member.x); GENERIC(, member.y); 48 #define BITMAPHASHKEY(member) { \ 49 unsigned temp = bitmap_hash(&p->member, sizeof(p->member)); \ 50 hval = fnv_32a_buf(&temp, sizeof(temp), hval); \ 51 } 52 #define END(typedefname) \ 53 return hval; \ 54 } 55 56 #else 57 #error missing defines 58 #endif 59 60 61 62 // describes an outline bitmap 63 START(outline_bitmap, outline_bitmap_hash_key) 64 GENERIC(OutlineHashValue *, outline) 65 GENERIC(char, be) // blur edges 66 GENERIC(double, blur) // gaussian blur 67 GENERIC(int, frx) // signed 16.16 68 GENERIC(int, fry) // signed 16.16 69 GENERIC(int, frz) // signed 16.16 70 GENERIC(int, fax) // signed 16.16 71 GENERIC(int, fay) // signed 16.16 72 // shift vector that was added to glyph before applying rotation 73 // = 0, if frx = fry = frx = 0 74 // = (glyph base point) - (rotation origin), otherwise 75 GENERIC(int, shift_x) 76 GENERIC(int, shift_y) 77 FTVECTOR(advance) // subpixel shift vector 78 FTVECTOR(shadow_offset) // shadow subpixel shift 79 END(OutlineBitmapHashKey) 80 81 // describe a clip mask bitmap 82 START(clip_bitmap, clip_bitmap_hash_key) 83 STRING(text) 84 END(ClipMaskHashKey) 85 86 // describes an outline glyph 87 START(glyph, glyph_hash_key) 88 GENERIC(ASS_Font *, font) 89 GENERIC(double, size) // font size 90 GENERIC(int, face_index) 91 GENERIC(int, glyph_index) 92 GENERIC(int, bold) 93 GENERIC(int, italic) 94 GENERIC(unsigned, scale_x) // 16.16 95 GENERIC(unsigned, scale_y) // 16.16 96 FTVECTOR(outline) // border width, 16.16 97 GENERIC(unsigned, flags) // glyph decoration flags 98 GENERIC(unsigned, border_style) 99 END(GlyphHashKey) 100 101 START(glyph_metrics, glyph_metrics_hash_key) 102 GENERIC(ASS_Font *, font) 103 GENERIC(double, size) 104 GENERIC(int, face_index) 105 GENERIC(int, glyph_index) 106 GENERIC(unsigned, scale_x) 107 GENERIC(unsigned, scale_y) 108 END(GlyphMetricsHashKey) 109 110 // describes an outline drawing 111 START(drawing, drawing_hash_key) 112 GENERIC(unsigned, scale_x) 113 GENERIC(unsigned, scale_y) 114 GENERIC(int, pbo) 115 FTVECTOR(outline) 116 GENERIC(unsigned, border_style) 117 GENERIC(int, scale) 118 GENERIC(unsigned, hash) 119 STRING(text) 120 END(DrawingHashKey) 121 122 // Cache for composited bitmaps 123 START(composite, composite_hash_key) 124 GENERIC(int, aw) 125 GENERIC(int, ah) 126 GENERIC(int, bw) 127 GENERIC(int, bh) 128 GENERIC(int, ax) 129 GENERIC(int, ay) 130 GENERIC(int, bx) 131 GENERIC(int, by) 132 GENERIC(int, as) 133 GENERIC(int, bs) 134 GENERIC(unsigned char *, a) 135 GENERIC(unsigned char *, b) 136 END(CompositeHashKey) 137 138 139 #undef START 140 #undef GENERIC 141 #undef STRING 142 #undef FTVECTOR 143 #undef BITMAPHASHKEY 144 #undef END 145