src/viewport_type.h
author richk
Sun, 20 Apr 2008 17:30:24 +0000
branchNewGRF_ports
changeset 10275 5e46b660ca6c
parent 10184 fcf5fb2548eb
child 10724 68a692eacf22
permissions -rw-r--r--
(svn r12807) [NewGRF_ports] -Fix: New files failed to get added to svn on last merge.
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
     1
/* $Id$ */
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
     2
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
     3
/** @file viewport_type.h Types related to viewports. */
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
     4
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
     5
#ifndef VIEWPORT_TYPE_H
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
     6
#define VIEWPORT_TYPE_H
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
     7
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
     8
#include "core/geometry_type.hpp"
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
     9
#include "zoom_type.h"
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    10
#include "window_type.h"
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    11
#include "tile_type.h"
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    12
#include "newgrf_fsmports.h"
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    13
10184
fcf5fb2548eb (svn r12715) [NewGRF_ports] -Sync: with trunk r12351:12644.
richk
parents: 6872
diff changeset
    14
/**
fcf5fb2548eb (svn r12715) [NewGRF_ports] -Sync: with trunk r12351:12644.
richk
parents: 6872
diff changeset
    15
 * Data structure for viewport, display of a part of the world
fcf5fb2548eb (svn r12715) [NewGRF_ports] -Sync: with trunk r12351:12644.
richk
parents: 6872
diff changeset
    16
 */
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    17
struct ViewPort {
10184
fcf5fb2548eb (svn r12715) [NewGRF_ports] -Sync: with trunk r12351:12644.
richk
parents: 6872
diff changeset
    18
	int left;    ///< Screen coordinate left egde of the viewport
fcf5fb2548eb (svn r12715) [NewGRF_ports] -Sync: with trunk r12351:12644.
richk
parents: 6872
diff changeset
    19
	int top;     ///< Screen coordinate top edge of the viewport
fcf5fb2548eb (svn r12715) [NewGRF_ports] -Sync: with trunk r12351:12644.
richk
parents: 6872
diff changeset
    20
	int width;   ///< Screen width of the viewport
fcf5fb2548eb (svn r12715) [NewGRF_ports] -Sync: with trunk r12351:12644.
richk
parents: 6872
diff changeset
    21
	int height;  ///< Screen height of the viewport
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    22
10184
fcf5fb2548eb (svn r12715) [NewGRF_ports] -Sync: with trunk r12351:12644.
richk
parents: 6872
diff changeset
    23
	int virtual_left;    ///< Virtual left coordinate
fcf5fb2548eb (svn r12715) [NewGRF_ports] -Sync: with trunk r12351:12644.
richk
parents: 6872
diff changeset
    24
	int virtual_top;     ///< Virtual top coordinate
fcf5fb2548eb (svn r12715) [NewGRF_ports] -Sync: with trunk r12351:12644.
richk
parents: 6872
diff changeset
    25
	int virtual_width;   ///< width << zoom
fcf5fb2548eb (svn r12715) [NewGRF_ports] -Sync: with trunk r12351:12644.
richk
parents: 6872
diff changeset
    26
	int virtual_height;  ///< height << zoom
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    27
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    28
	ZoomLevel zoom;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    29
};
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    30
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    31
enum {
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    32
	ZOOM_IN   = 0,
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    33
	ZOOM_OUT  = 1,
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    34
	ZOOM_NONE = 2, // hack, used to update the button status
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    35
};
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    36
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    37
/**
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    38
 * Some values for constructing bounding boxes (BB). The Z positions under bridges are:
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    39
 * z=0..5  Everything that can be built under low bridges.
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    40
 * z=6     reserved, currently unused.
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    41
 * z=7     Z separator between bridge/tunnel and the things under/above it.
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    42
 */
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    43
enum {
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    44
	BB_HEIGHT_UNDER_BRIDGE = 6, ///< Everything that can be built under low bridges, must not exceed this Z height.
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    45
	BB_Z_SEPARATOR  = 7,        ///< Separates the bridge/tunnel from the things under/above it.
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    46
};
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    47
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    48
/** Viewport place method (type of highlighted area and placed objects) */
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    49
enum ViewportPlaceMethod {
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    50
	VPM_X_OR_Y          = 0, ///< drag in X or Y direction
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    51
	VPM_FIX_X           = 1, ///< drag only in X axis
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    52
	VPM_FIX_Y           = 2, ///< drag only in Y axis
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    53
	VPM_RAILDIRS        = 3, ///< all rail directions
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    54
	VPM_X_AND_Y         = 4, ///< area of land in X and Y directions
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    55
	VPM_X_AND_Y_LIMITED = 5, ///< area of land of limited size
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    56
	VPM_SIGNALDIRS      = 6, ///< similiar to VMP_RAILDIRS, but with different cursor
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    57
};
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    58
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    59
/** Viewport highlight mode (for highlighting tiles below cursor) */
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    60
enum ViewportHighlightMode {
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    61
	VHM_NONE    = 0, ///< default
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    62
	VHM_RECT    = 1, ///< rectangle (stations, depots, ...)
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    63
	VHM_POINT   = 2, ///< point (lower land, raise land, level land, ...)
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    64
	VHM_SPECIAL = 3, ///< special mode used for highlighting while dragging (and for tunnels/docks)
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    65
	VHM_DRAG    = 4, ///< dragging items in the depot windows
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    66
	VHM_RAIL    = 5, ///< rail pieces
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    67
};
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    68
10184
fcf5fb2548eb (svn r12715) [NewGRF_ports] -Sync: with trunk r12351:12644.
richk
parents: 6872
diff changeset
    69
/** Highlighting draw styles */
6872
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    70
enum HighLightStyle {
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    71
	HT_NONE   = 0x00,
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    72
	HT_RECT   = 0x80,
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    73
	HT_POINT  = 0x40,
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    74
	HT_LINE   = 0x20,    ///< used for autorail highlighting (longer streches)
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    75
	                     ///< (uses lower bits to indicate direction)
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    76
	HT_RAIL   = 0x10,    ///< autorail (one piece)
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    77
	                     ///< (uses lower bits to indicate direction)
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    78
	HT_DRAG_MASK = 0xF0, ///< masks the drag-type
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    79
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    80
	/* lower bits (used with HT_LINE and HT_RAIL):
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    81
	 * (see ASCII art in autorail.h for a visual interpretation) */
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    82
	HT_DIR_X  = 0,    ///< X direction
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    83
	HT_DIR_Y  = 1,    ///< Y direction
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    84
	HT_DIR_HU = 2,    ///< horizontal upper
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    85
	HT_DIR_HL = 3,    ///< horizontal lower
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    86
	HT_DIR_VL = 4,    ///< vertical left
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    87
	HT_DIR_VR = 5,    ///< vertical right
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    88
	HT_DIR_MASK = 0x7 ///< masks the drag-direction
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    89
};
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    90
DECLARE_ENUM_AS_BIT_SET(HighLightStyle);
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    91
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    92
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    93
struct TileHighlightData {
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    94
	Point size;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    95
	Point outersize;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    96
	Point pos;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    97
	Point offs;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    98
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
    99
	Point new_pos;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   100
	Point new_size;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   101
	Point new_outersize;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   102
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   103
	Point selend, selstart;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   104
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   105
	byte dirty;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   106
	byte sizelimit;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   107
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   108
	byte drawstyle;      // lower bits 0-3 are reserved for detailed highlight information information
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   109
	byte new_drawstyle;  // only used in UpdateTileSelection() to as a buffer to compare if there was a change between old and new
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   110
	byte next_drawstyle; // queued, but not yet drawn style
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   111
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   112
	ViewportHighlightMode place_mode;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   113
	bool make_square_red;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   114
	WindowClass window_class;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   115
	WindowNumber window_number;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   116
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   117
	ViewportPlaceMethod select_method;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   118
	byte select_proc;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   119
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   120
	TileIndex redsq;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   121
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   122
	FSMportsLayout *FSMportLayout;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   123
	FSMportsLayout *FSMportMask;
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   124
};
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   125
1c4a4a609f85 (svn r11950) [NewGRF_ports] -Sync with trunk r11566:11949.
rubidium
parents:
diff changeset
   126
#endif /* VIEWPORT_TYPE_H */