|
1 /* $Id$ */ |
|
2 |
|
3 /** @file zoom_func.hpp */ |
|
4 |
|
5 #ifndef ZOOM_FUNC_H |
|
6 #define ZOOM_FUNC_H |
|
7 |
|
8 #include "zoom_type.h" |
|
9 |
|
10 extern ZoomLevel _saved_scrollpos_zoom; |
|
11 |
|
12 /** |
|
13 * Scale by zoom level, usually shift left (when zoom > ZOOM_LVL_NORMAL) |
|
14 * When shifting right, value is rounded up |
|
15 * @param value value to shift |
|
16 * @param zoom zoom level to shift to |
|
17 * @return shifted value |
|
18 */ |
|
19 static inline int ScaleByZoom(int value, ZoomLevel zoom) |
|
20 { |
|
21 if (zoom == ZOOM_LVL_NORMAL) return value; |
|
22 int izoom = zoom - ZOOM_LVL_NORMAL; |
|
23 return (zoom > ZOOM_LVL_NORMAL) ? value << izoom : (value + (1 << -izoom) - 1) >> -izoom; |
|
24 } |
|
25 |
|
26 /** |
|
27 * Scale by zoom level, usually shift right (when zoom > ZOOM_LVL_NORMAL) |
|
28 * When shifting right, value is rounded up |
|
29 * @param value value to shift |
|
30 * @param zoom zoom level to shift to |
|
31 * @return shifted value |
|
32 */ |
|
33 static inline int UnScaleByZoom(int value, ZoomLevel zoom) |
|
34 { |
|
35 if (zoom == ZOOM_LVL_NORMAL) return value; |
|
36 int izoom = zoom - ZOOM_LVL_NORMAL; |
|
37 return (zoom > ZOOM_LVL_NORMAL) ? (value + (1 << izoom) - 1) >> izoom : value << -izoom; |
|
38 } |
|
39 |
|
40 /** |
|
41 * Scale by zoom level, usually shift left (when zoom > ZOOM_LVL_NORMAL) |
|
42 * @param value value to shift |
|
43 * @param zoom zoom level to shift to |
|
44 * @return shifted value |
|
45 */ |
|
46 static inline int ScaleByZoomLower(int value, ZoomLevel zoom) |
|
47 { |
|
48 if (zoom == ZOOM_LVL_NORMAL) return value; |
|
49 int izoom = zoom - ZOOM_LVL_NORMAL; |
|
50 return (zoom > ZOOM_LVL_NORMAL) ? value << izoom : value >> -izoom; |
|
51 } |
|
52 |
|
53 /** |
|
54 * Scale by zoom level, usually shift right (when zoom > ZOOM_LVL_NORMAL) |
|
55 * @param value value to shift |
|
56 * @param zoom zoom level to shift to |
|
57 * @return shifted value |
|
58 */ |
|
59 static inline int UnScaleByZoomLower(int value, ZoomLevel zoom) |
|
60 { |
|
61 if (zoom == ZOOM_LVL_NORMAL) return value; |
|
62 int izoom = zoom - ZOOM_LVL_NORMAL; |
|
63 return (zoom > ZOOM_LVL_NORMAL) ? value >> izoom : value << -izoom; |
|
64 } |
|
65 |
|
66 #endif /* ZOOM_FUNC_H */ |