Translations update
[openttd/fttd.git] / src / zoom_func.h
blobaa4bf3d69f5ad70f3417f4ab77dc24719f8aae14
1 /* $Id$ */
3 /*
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/>.
8 */
10 /** @file zoom_func.h Functions related to zooming. */
12 #ifndef ZOOM_FUNC_H
13 #define ZOOM_FUNC_H
15 #include "zoom_type.h"
17 /**
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;
31 /**
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;
45 /**
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;
58 /**
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 */