src/zoom.hpp
author bjarni
Mon, 28 May 2007 21:40:40 +0000
changeset 6735 dd792fed65e2
parent 6704 c18d958abfdb
child 6831 cf918fdb9e8a
permissions -rw-r--r--
(svn r9967) -Fix (r9938): autoreplace would in certain conditions move dualheaded engines in a train (usually to the rear)
-Change: moving an engine in between the two ends of a dualheaded engine will now move the rear dualheaded engine to the front of the newly added engine (instead of moving the new engine to the rear of the rear dualheaded engine)
This can make a difference if there are wagons in the train
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,
b20fcfed0847 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 6628
diff changeset
    14
	ZOOM_LVL_OUT_16X,
6624
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    15
	ZOOM_LVL_END,
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    16
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    17
	/* Here we define in which zoom viewports are */
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    18
	ZOOM_LVL_VIEWPORT = ZOOM_LVL_NORMAL,
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    19
	ZOOM_LVL_NEWS     = ZOOM_LVL_NORMAL,
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    20
	ZOOM_LVL_INDUSTRY = ZOOM_LVL_OUT_2X,
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    21
	ZOOM_LVL_TOWN     = ZOOM_LVL_OUT_2X,
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    22
	ZOOM_LVL_AIRCRAFT = ZOOM_LVL_NORMAL,
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    23
	ZOOM_LVL_SHIP     = ZOOM_LVL_NORMAL,
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    24
	ZOOM_LVL_TRAIN    = ZOOM_LVL_NORMAL,
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    25
	ZOOM_LVL_ROADVEH  = ZOOM_LVL_NORMAL,
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    26
	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
    27
207875b9069a (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 6624
diff changeset
    28
	ZOOM_LVL_DETAIL   = ZOOM_LVL_OUT_2X, //! All zoomlevels below or equal to this, will result in details on the screen, like road-work, ...
207875b9069a (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 6624
diff changeset
    29
207875b9069a (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 6624
diff changeset
    30
	ZOOM_LVL_MIN      = ZOOM_LVL_NORMAL,
6653
b20fcfed0847 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 6628
diff changeset
    31
	ZOOM_LVL_MAX      = ZOOM_LVL_OUT_16X,
6624
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
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    34
extern ZoomLevel _saved_scrollpos_zoom;
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    35
6626
207875b9069a (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 6624
diff changeset
    36
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
    37
{
6653
b20fcfed0847 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 6628
diff changeset
    38
	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
    39
	int izoom = (int)zoom - (int)ZOOM_LVL_NORMAL;
6704
c18d958abfdb (svn r9936) -Fix: (Un)ScaleByZoom missed a minus sign in some cases
truelight
parents: 6653
diff changeset
    40
	return (zoom > ZOOM_LVL_NORMAL) ? value << 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
    41
}
207875b9069a (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 6624
diff changeset
    42
207875b9069a (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 6624
diff changeset
    43
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
    44
{
6653
b20fcfed0847 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 6628
diff changeset
    45
	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
    46
	int izoom = (int)zoom - (int)ZOOM_LVL_NORMAL;
6704
c18d958abfdb (svn r9936) -Fix: (Un)ScaleByZoom missed a minus sign in some cases
truelight
parents: 6653
diff changeset
    47
	return (zoom > ZOOM_LVL_NORMAL) ? value >> 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
    48
}
207875b9069a (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 6624
diff changeset
    49
6624
880e29b1f25e (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents:
diff changeset
    50
#endif /* ZOOM_HPP */