summaryrefslogtreecommitdiff
path: root/src/zoom_func.h
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2007-12-23 10:56:02 +0000
committerrubidium <rubidium@openttd.org>2007-12-23 10:56:02 +0000
commita773d45885eac803e794c622a4dfae3f03cc5cb1 (patch)
tree38db428e795daef4055965543d541fc03dc4b9d8 /src/zoom_func.h
parent82d240e300e6fb01b79a90c5948942466b6a442d (diff)
downloadopenttd-a773d45885eac803e794c622a4dfae3f03cc5cb1.tar.xz
(svn r11684) -Codechange: split gfx.h in a type and functional header.
Diffstat (limited to 'src/zoom_func.h')
-rw-r--r--src/zoom_func.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/zoom_func.h b/src/zoom_func.h
new file mode 100644
index 000000000..4a4fe83ff
--- /dev/null
+++ b/src/zoom_func.h
@@ -0,0 +1,66 @@
+/* $Id$ */
+
+/** @file zoom.hpp */
+
+#ifndef ZOOM_FUNC_H
+#define ZOOM_FUNC_H
+
+#include "zoom_type.h"
+
+extern ZoomLevel _saved_scrollpos_zoom;
+
+/**
+ * Scale by zoom level, usually shift left (when zoom > ZOOM_LVL_NORMAL)
+ * When shifting right, value is rounded up
+ * @param value value to shift
+ * @param zoom zoom level to shift to
+ * @return shifted value
+ */
+static inline int ScaleByZoom(int value, ZoomLevel zoom)
+{
+ if (zoom == ZOOM_LVL_NORMAL) return value;
+ int izoom = zoom - ZOOM_LVL_NORMAL;
+ return (zoom > ZOOM_LVL_NORMAL) ? value << izoom : (value + (1 << -izoom) - 1) >> -izoom;
+}
+
+/**
+ * Scale by zoom level, usually shift right (when zoom > ZOOM_LVL_NORMAL)
+ * When shifting right, value is rounded up
+ * @param value value to shift
+ * @param zoom zoom level to shift to
+ * @return shifted value
+ */
+static inline int UnScaleByZoom(int value, ZoomLevel zoom)
+{
+ if (zoom == ZOOM_LVL_NORMAL) return value;
+ int izoom = zoom - ZOOM_LVL_NORMAL;
+ return (zoom > ZOOM_LVL_NORMAL) ? (value + (1 << izoom) - 1) >> izoom : value << -izoom;
+}
+
+/**
+ * Scale by zoom level, usually shift left (when zoom > ZOOM_LVL_NORMAL)
+ * @param value value to shift
+ * @param zoom zoom level to shift to
+ * @return shifted value
+ */
+static inline int ScaleByZoomLower(int value, ZoomLevel zoom)
+{
+ if (zoom == ZOOM_LVL_NORMAL) return value;
+ int izoom = zoom - ZOOM_LVL_NORMAL;
+ return (zoom > ZOOM_LVL_NORMAL) ? value << izoom : value >> -izoom;
+}
+
+/**
+ * Scale by zoom level, usually shift right (when zoom > ZOOM_LVL_NORMAL)
+ * @param value value to shift
+ * @param zoom zoom level to shift to
+ * @return shifted value
+ */
+static inline int UnScaleByZoomLower(int value, ZoomLevel zoom)
+{
+ if (zoom == ZOOM_LVL_NORMAL) return value;
+ int izoom = zoom - ZOOM_LVL_NORMAL;
+ return (zoom > ZOOM_LVL_NORMAL) ? value >> izoom : value << -izoom;
+}
+
+#endif /* ZOOM_FUNC_H */