view libass/ass_cache_template.h @ 34175:a345e7162d0a

Move TranslateFilename() to util/string.c. Now that the Win32 GUI uses symbolic constants for its messages, the code of TranslateFilename() both GUIs use is almost identical. So, share the code.
author ib
date Wed, 26 Oct 2011 15:14:06 +0000
parents 48d020c5ceca
children 6e7f60f6f9d4
line wrap: on
line source

#ifdef CREATE_STRUCT_DEFINITIONS
#undef CREATE_STRUCT_DEFINITIONS
#define START(funcname, structname) \
    typedef struct structname {
#define GENERIC(type, member) \
        type member;
#define FTVECTOR(member) \
        FT_Vector member;
#define BITMAPHASHKEY(member) \
        BitmapHashKey member;
#define END(typedefnamename) \
    } typedefnamename;

#elif defined(CREATE_COMPARISON_FUNCTIONS)
#undef CREATE_COMPARISON_FUNCTIONS
#define START(funcname, structname) \
    static int funcname##_compare(void *key1, void *key2, size_t key_size) \
    { \
        struct structname *a = key1; \
        struct structname *b = key2; \
        return // conditions follow
#define GENERIC(type, member) \
            a->member == b->member &&
#define FTVECTOR(member) \
            a->member.x == b->member.x && a->member.y == b->member.y &&
#define BITMAPHASHKEY(member) \
            bitmap_compare(&a->member, &b->member, sizeof(a->member)) &&
#define END(typedefname) \
            1; \
    }

#elif defined(CREATE_HASH_FUNCTIONS)
#undef CREATE_HASH_FUNCTIONS
#define START(funcname, structname) \
    static unsigned funcname##_hash(void *buf, size_t len) \
    { \
        struct structname *p = buf; \
        unsigned hval = FNV1_32A_INIT;
#define GENERIC(type, member) \
        hval = fnv_32a_buf(&p->member, sizeof(p->member), hval);
#define FTVECTOR(member) GENERIC(, member.x); GENERIC(, member.y);
#define BITMAPHASHKEY(member) { \
        unsigned temp = bitmap_hash(&p->member, sizeof(p->member)); \
        hval = fnv_32a_buf(&temp, sizeof(temp), hval); \
        }
#define END(typedefname) \
        return hval; \
    }

#else
#error missing defines
#endif



// describes a bitmap; bitmaps with equivalents structs are considered identical
START(bitmap, bitmap_hash_key)
    GENERIC(char, bitmap) // bool : true = bitmap, false = outline
    GENERIC(ASS_Font *, font)
    GENERIC(double, size) // font size
    GENERIC(uint32_t, ch) // character code
    FTVECTOR(outline) // border width, 16.16 fixed point value
    GENERIC(int, bold)
    GENERIC(int, italic)
    GENERIC(char, be) // blur edges
    GENERIC(double, blur) // gaussian blur
    GENERIC(unsigned, scale_x) // 16.16
    GENERIC(unsigned, scale_y) // 16.16
    GENERIC(int, frx) // signed 16.16
    GENERIC(int, fry) // signed 16.16
    GENERIC(int, frz) // signed 16.16
    GENERIC(int, fax) // signed 16.16
    GENERIC(int, fay) // signed 16.16
    // shift vector that was added to glyph before applying rotation
    // = 0, if frx = fry = frx = 0
    // = (glyph base point) - (rotation origin), otherwise
    GENERIC(int, shift_x)
    GENERIC(int, shift_y)
    FTVECTOR(advance) // subpixel shift vector
    FTVECTOR(shadow_offset) // shadow subpixel shift
    GENERIC(unsigned, drawing_hash) // hashcode of a drawing
    GENERIC(unsigned, flags)    // glyph decoration
    GENERIC(unsigned, border_style)
END(BitmapHashKey)

// describes an outline glyph
START(glyph, glyph_hash_key)
    GENERIC(ASS_Font *, font)
    GENERIC(double, size) // font size
    GENERIC(uint32_t, ch) // character code
    GENERIC(int, bold)
    GENERIC(int, italic)
    GENERIC(unsigned, scale_x) // 16.16
    GENERIC(unsigned, scale_y) // 16.16
    FTVECTOR(outline) // border width, 16.16
    GENERIC(unsigned, drawing_hash) // hashcode of a drawing
    GENERIC(unsigned, flags)    // glyph decoration flags
    GENERIC(unsigned, border_style)
END(GlyphHashKey)

// Cache for composited bitmaps
START(composite, composite_hash_key)
    GENERIC(int, aw)
    GENERIC(int, ah)
    GENERIC(int, bw)
    GENERIC(int, bh)
    GENERIC(int, ax)
    GENERIC(int, ay)
    GENERIC(int, bx)
    GENERIC(int, by)
    GENERIC(int, as)
    GENERIC(int, bs)
    GENERIC(unsigned char *, a)
    GENERIC(unsigned char *, b)
END(CompositeHashKey)


#undef START
#undef GENERIC
#undef FTVECTOR
#undef BITMAPHASHKEY
#undef END