4 * This file is part of OpenTTD.
5 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
6 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
7 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
10 /** @file zoom_func.h Functions related to zooming. */
15 #include "zoom_type.h"
18 * Scale by zoom level, usually shift left (when zoom > ZOOM_LVL_NORMAL)
19 * When shifting right, value is rounded up
20 * @param value value to shift
21 * @param zoom zoom level to shift to
22 * @return shifted value
24 static inline int ScaleByZoom(int value
, ZoomLevel zoom
)
26 if (zoom
== ZOOM_LVL_NORMAL
) return value
;
27 int izoom
= zoom
- ZOOM_LVL_NORMAL
;
28 return (zoom
> ZOOM_LVL_NORMAL
) ? value
<< izoom
: (value
+ (1 << -izoom
) - 1) >> -izoom
;
32 * Scale by zoom level, usually shift right (when zoom > ZOOM_LVL_NORMAL)
33 * When shifting right, value is rounded up
34 * @param value value to shift
35 * @param zoom zoom level to shift to
36 * @return shifted value
38 static inline int UnScaleByZoom(int value
, ZoomLevel zoom
)
40 if (zoom
== ZOOM_LVL_NORMAL
) return value
;
41 int izoom
= zoom
- ZOOM_LVL_NORMAL
;
42 return (zoom
> ZOOM_LVL_NORMAL
) ? (value
+ (1 << izoom
) - 1) >> izoom
: value
<< -izoom
;
46 * Scale by zoom level, usually shift left (when zoom > ZOOM_LVL_NORMAL)
47 * @param value value to shift
48 * @param zoom zoom level to shift to
49 * @return shifted value
51 static inline int ScaleByZoomLower(int value
, ZoomLevel zoom
)
53 if (zoom
== ZOOM_LVL_NORMAL
) return value
;
54 int izoom
= zoom
- ZOOM_LVL_NORMAL
;
55 return (zoom
> ZOOM_LVL_NORMAL
) ? value
<< izoom
: value
>> -izoom
;
59 * Scale by zoom level, usually shift right (when zoom > ZOOM_LVL_NORMAL)
60 * @param value value to shift
61 * @param zoom zoom level to shift to
62 * @return shifted value
64 static inline int UnScaleByZoomLower(int value
, ZoomLevel zoom
)
66 if (zoom
== ZOOM_LVL_NORMAL
) return value
;
67 int izoom
= zoom
- ZOOM_LVL_NORMAL
;
68 return (zoom
> ZOOM_LVL_NORMAL
) ? value
>> izoom
: value
<< -izoom
;
71 #endif /* ZOOM_FUNC_H */