src/zoom.hpp
author rubidium
Sat, 17 Nov 2007 12:42:15 +0000
changeset 7898 7c6a9c9030b5
parent 6853 011888c570df
child 7905 d78686954e4b
permissions -rw-r--r--
(svn r11449) -Fix [FS#1160]: trams could deadlock themselves. As of now trams will turn as roadvehicles do when the player cannot build a tram track piece on the next tile without destroying anything. It will not turn when the player can build the before mentioned track piece on the 'next' tile.
6624
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
     1
/* $Id$ */
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
     2
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
     3
/** @file zoom.hpp */
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
     4
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
     5
#ifndef ZOOM_HPP
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
     6
#define ZOOM_HPP
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
     7
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
     8
enum ZoomLevel {
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
     9
	/* Our possible zoom-levels */
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    10
	ZOOM_LVL_NORMAL = 0,
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    11
	ZOOM_LVL_OUT_2X,
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    12
	ZOOM_LVL_OUT_4X,
6653
b20fcfed0847 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 6628
diff changeset
    13
	ZOOM_LVL_OUT_8X,
6624
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    14
	ZOOM_LVL_END,
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    15
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    16
	/* Here we define in which zoom viewports are */
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    17
	ZOOM_LVL_VIEWPORT = ZOOM_LVL_NORMAL,
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    18
	ZOOM_LVL_NEWS     = ZOOM_LVL_NORMAL,
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    19
	ZOOM_LVL_INDUSTRY = ZOOM_LVL_OUT_2X,
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    20
	ZOOM_LVL_TOWN     = ZOOM_LVL_OUT_2X,
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    21
	ZOOM_LVL_AIRCRAFT = ZOOM_LVL_NORMAL,
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    22
	ZOOM_LVL_SHIP     = ZOOM_LVL_NORMAL,
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    23
	ZOOM_LVL_TRAIN    = ZOOM_LVL_NORMAL,
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    24
	ZOOM_LVL_ROADVEH  = ZOOM_LVL_NORMAL,
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    25
	ZOOM_LVL_WORLD_SCREENSHOT = ZOOM_LVL_NORMAL,
6626
207875b9069a (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 6624
diff changeset
    26
6852
439563b70fd3 (svn r10092) -Codechange: code-seperated the spriteloader and blitter from the rest of the code
truelight
parents: 6833
diff changeset
    27
	ZOOM_LVL_DETAIL   = ZOOM_LVL_OUT_2X, ///< All zoomlevels below or equal to this, will result in details on the screen, like road-work, ...
6626
207875b9069a (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 6624
diff changeset
    28
207875b9069a (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 6624
diff changeset
    29
	ZOOM_LVL_MIN      = ZOOM_LVL_NORMAL,
6853
011888c570df (svn r10093) -Revert: removed 16x zoom-out as it is broken beyond repair
truelight
parents: 6852
diff changeset
    30
	ZOOM_LVL_MAX      = ZOOM_LVL_OUT_8X,
6624
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    31
};
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    32
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    33
extern ZoomLevel _saved_scrollpos_zoom;
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    34
6626
207875b9069a (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 6624
diff changeset
    35
static inline int ScaleByZoom(int value, ZoomLevel zoom)
207875b9069a (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 6624
diff changeset
    36
{
6653
b20fcfed0847 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 6628
diff changeset
    37
	if (zoom == ZOOM_LVL_NORMAL) return value;
6626
207875b9069a (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 6624
diff changeset
    38
	int izoom = (int)zoom - (int)ZOOM_LVL_NORMAL;
6833
fe44d16dc50e (svn r10072) -Fix r10070: typo in zoom.hpp
truelight
parents: 6831
diff changeset
    39
	return (zoom > ZOOM_LVL_NORMAL) ? value << izoom : (value + (1 << -izoom) - 1) >> -izoom;
6626
207875b9069a (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 6624
diff changeset
    40
}
207875b9069a (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 6624
diff changeset
    41
207875b9069a (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 6624
diff changeset
    42
static inline int UnScaleByZoom(int value, ZoomLevel zoom)
207875b9069a (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 6624
diff changeset
    43
{
6653
b20fcfed0847 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 6628
diff changeset
    44
	if (zoom == ZOOM_LVL_NORMAL) return value;
6626
207875b9069a (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 6624
diff changeset
    45
	int izoom = (int)zoom - (int)ZOOM_LVL_NORMAL;
6831
cf918fdb9e8a (svn r10070) -Fix: fix the rounding problem of zoom-levels in zoom.hpp, so it is global for every call
truelight
parents: 6704
diff changeset
    46
	return (zoom > ZOOM_LVL_NORMAL) ? (value + (1 << izoom) - 1) >> izoom : value << -izoom;
6626
207875b9069a (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 6624
diff changeset
    47
}
207875b9069a (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 6624
diff changeset
    48
6624
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    49
#endif /* ZOOM_HPP */