Xy Flyweight. [Part 3]
[xy_vsfilter.git] / src / subtitles / subpixel_position_controler.h
blobabf620ee5d3de9d58030fa957822df9d46f0eaaf
1 /************************************************************************/
2 /* author: xy */
3 /* date: 20110926 */
4 /************************************************************************/
5 #ifndef __SUBPIXEL_POSITION_CONTROLER_H_61444994_2880_4407_9308_4B17D0259B2C__
6 #define __SUBPIXEL_POSITION_CONTROLER_H_61444994_2880_4407_9308_4B17D0259B2C__
8 #include <atltypes.h>
10 class SubpixelPositionControler
12 public:
13 enum SUBPIXEL_LEVEL
15 NONE = 0,
16 TWO_X_TWO = 1,
17 FOUR_X_FOUR = 2,
18 EIGHT_X_EIGHT = 3,
19 EIGHT_X_EIGHT_INTERPOLATE = 4,
20 MAX_COUNT
22 enum SUBPIXEL_MASK
24 NONE_MASK = 0,
25 TWO_X_TWO_MASK = 4,
26 FOUR_X_FOUR_MASK = 6,
27 EIGHT_X_EIGHT_MASK = 7,
28 EIGHT_X_EIGHT_INTERPOLATE_MASK = 0,
30 SUBPIXEL_LEVEL SetSubpixelLevel(SUBPIXEL_LEVEL subpixel_level);
31 inline SUBPIXEL_LEVEL GetSubpixelLevel()
33 return _subpixel_level;
35 inline CPoint GetSubpixel(const CPoint& p)
37 CPoint result(p.x & _subpixel_mask, p.y & _subpixel_mask);
38 return result;
40 inline bool UseBilinearShift() { return _subpixel_level==EIGHT_X_EIGHT_INTERPOLATE; }
42 static SubpixelPositionControler& GetGlobalControler()
44 return s_subpixel_position_controler;
47 private:
48 SubpixelPositionControler()
50 _subpixel_level = EIGHT_X_EIGHT;
51 _subpixel_mask = EIGHT_X_EIGHT_MASK;
53 SUBPIXEL_LEVEL _subpixel_level;
54 SUBPIXEL_MASK _subpixel_mask;
55 static SubpixelPositionControler s_subpixel_position_controler;
58 #endif // end of __SUBPIXEL_POSITION_CONTROLER_H_61444994_2880_4407_9308_4B17D0259B2C__