Files @ r7921:8e674055514f
Branch filter:

Location: cpp/openttd-patchpack/source/src/zoom.hpp - annotation

belugas
(svn r11474) -Feature: Allow to resize on creation the smallmap gui in order to show all the types industry available.
-Feature: Allow to enable/disable individually or all at once, the industries shown on small map.
This will permit to easily find those that are of some interest for the player.
Heavily based on gule's patch
r6624:8e8cb5121304
r6624:8e8cb5121304
r6624:8e8cb5121304
r6624:8e8cb5121304
r6624:8e8cb5121304
r6624:8e8cb5121304
r6624:8e8cb5121304
r6624:8e8cb5121304
r6624:8e8cb5121304
r6624:8e8cb5121304
r6624:8e8cb5121304
r6624:8e8cb5121304
r6653:8767c847638f
r6624:8e8cb5121304
r6624:8e8cb5121304
r6624:8e8cb5121304
r6624:8e8cb5121304
r6624:8e8cb5121304
r6624:8e8cb5121304
r6624:8e8cb5121304
r6624:8e8cb5121304
r6624:8e8cb5121304
r6624:8e8cb5121304
r6624:8e8cb5121304
r6624:8e8cb5121304
r6626:a882a4aaa61c
r6852:5b6b567a9e32
r6626:a882a4aaa61c
r6626:a882a4aaa61c
r6853:39397cc729b3
r6624:8e8cb5121304
r6624:8e8cb5121304
r6624:8e8cb5121304
r6624:8e8cb5121304
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r6626:a882a4aaa61c
r6626:a882a4aaa61c
r6653:8767c847638f
r6626:a882a4aaa61c
r6833:49cfb0cbd58d
r6626:a882a4aaa61c
r6626:a882a4aaa61c
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r6626:a882a4aaa61c
r6626:a882a4aaa61c
r6653:8767c847638f
r6626:a882a4aaa61c
r6831:5a8208bdbe9b
r6626:a882a4aaa61c
r6626:a882a4aaa61c
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r7905:248f62044329
r6624:8e8cb5121304
/* $Id$ */

/** @file zoom.hpp */

#ifndef ZOOM_HPP
#define ZOOM_HPP

enum ZoomLevel {
	/* Our possible zoom-levels */
	ZOOM_LVL_NORMAL = 0,
	ZOOM_LVL_OUT_2X,
	ZOOM_LVL_OUT_4X,
	ZOOM_LVL_OUT_8X,
	ZOOM_LVL_END,

	/* Here we define in which zoom viewports are */
	ZOOM_LVL_VIEWPORT = ZOOM_LVL_NORMAL,
	ZOOM_LVL_NEWS     = ZOOM_LVL_NORMAL,
	ZOOM_LVL_INDUSTRY = ZOOM_LVL_OUT_2X,
	ZOOM_LVL_TOWN     = ZOOM_LVL_OUT_2X,
	ZOOM_LVL_AIRCRAFT = ZOOM_LVL_NORMAL,
	ZOOM_LVL_SHIP     = ZOOM_LVL_NORMAL,
	ZOOM_LVL_TRAIN    = ZOOM_LVL_NORMAL,
	ZOOM_LVL_ROADVEH  = ZOOM_LVL_NORMAL,
	ZOOM_LVL_WORLD_SCREENSHOT = ZOOM_LVL_NORMAL,

	ZOOM_LVL_DETAIL   = ZOOM_LVL_OUT_2X, ///< All zoomlevels below or equal to this, will result in details on the screen, like road-work, ...

	ZOOM_LVL_MIN      = ZOOM_LVL_NORMAL,
	ZOOM_LVL_MAX      = ZOOM_LVL_OUT_8X,
};

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 = (int)zoom - (int)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 = (int)zoom - (int)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 = (int)zoom - (int)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 = (int)zoom - (int)ZOOM_LVL_NORMAL;
	return (zoom > ZOOM_LVL_NORMAL) ? value >> izoom : value << -izoom;
}

#endif /* ZOOM_HPP */