src/video/allegro_v.cpp
author rubidium
Wed, 26 Nov 2008 13:12:45 +0000
changeset 10385 4f9838649c7f
parent 10381 c043aa0c1695
child 10390 0c2cc4c7b91f
permissions -rw-r--r--
(svn r14636) -Add: DOS port of OpenTTD, without network support though.
10379
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
     1
/* $Id$ */
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
     2
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
     3
/** @file allegro_v.cpp Implementation of the Allegro video driver. */
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
     4
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
     5
#ifdef WITH_ALLEGRO
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
     6
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
     7
#include "../stdafx.h"
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
     8
#include "../openttd.h"
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
     9
#include "../debug.h"
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    10
#include "../gfx_func.h"
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    11
#include "../sdl.h"
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    12
#include "../variables.h"
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    13
#include "../rev.h"
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    14
#include "../blitter/factory.hpp"
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    15
#include "../network/network.h"
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    16
#include "../core/math_func.hpp"
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    17
#include "../core/random_func.hpp"
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    18
#include "../functions.h"
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    19
#include "../texteff.hpp"
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    20
#include "allegro_v.h"
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    21
#include <allegro.h>
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    22
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    23
static FVideoDriver_Allegro iFVideoDriver_Allegro;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    24
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    25
static BITMAP *_allegro_screen;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    26
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    27
#define MAX_DIRTY_RECTS 100
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    28
static PointDimension _dirty_rects[MAX_DIRTY_RECTS];
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    29
static int _num_dirty_rects;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    30
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    31
void VideoDriver_Allegro::MakeDirty(int left, int top, int width, int height)
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    32
{
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    33
	if (_num_dirty_rects < MAX_DIRTY_RECTS) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    34
		_dirty_rects[_num_dirty_rects].x = left;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    35
		_dirty_rects[_num_dirty_rects].y = top;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    36
		_dirty_rects[_num_dirty_rects].width = width;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    37
		_dirty_rects[_num_dirty_rects].height = height;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    38
	}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    39
	_num_dirty_rects++;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    40
}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    41
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    42
static void DrawSurfaceToScreen()
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    43
{
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    44
	int n = _num_dirty_rects;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    45
	if (n == 0) return;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    46
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    47
	_num_dirty_rects = 0;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    48
	if (n > MAX_DIRTY_RECTS) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    49
		blit(_allegro_screen, screen, 0, 0, 0, 0, _allegro_screen->w, _allegro_screen->h);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    50
		return;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    51
	}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    52
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    53
	for (int i = 0; i < n; i++) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    54
		blit(_allegro_screen, screen, _dirty_rects[i].x, _dirty_rects[i].y, _dirty_rects[i].x, _dirty_rects[i].y, _dirty_rects[i].width, _dirty_rects[i].height);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    55
	}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    56
}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    57
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    58
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    59
static void UpdatePalette(uint start, uint count)
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    60
{
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    61
	static PALETTE pal;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    62
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    63
	uint end = start + count;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    64
	for (uint i = start; i != end; i++) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    65
		pal[i].r = _cur_palette[i].r / 4;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    66
		pal[i].g = _cur_palette[i].g / 4;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    67
		pal[i].b = _cur_palette[i].b / 4;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    68
		pal[i].filler = 0;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    69
	}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    70
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    71
	set_palette_range(pal, start, end - 1, 1);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    72
}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    73
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    74
static void InitPalette()
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    75
{
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    76
	UpdatePalette(0, 256);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    77
}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    78
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    79
static void CheckPaletteAnim()
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    80
{
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    81
	if (_pal_count_dirty != 0) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    82
		Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    83
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    84
		switch (blitter->UsePaletteAnimation()) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    85
			case Blitter::PALETTE_ANIMATION_VIDEO_BACKEND:
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    86
				UpdatePalette(_pal_first_dirty, _pal_count_dirty);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    87
				break;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    88
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    89
			case Blitter::PALETTE_ANIMATION_BLITTER:
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    90
				blitter->PaletteAnimate(_pal_first_dirty, _pal_count_dirty);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    91
				break;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    92
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    93
			case Blitter::PALETTE_ANIMATION_NONE:
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    94
				break;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    95
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    96
			default:
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    97
				NOT_REACHED();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    98
		}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
    99
		_pal_count_dirty = 0;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   100
	}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   101
}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   102
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   103
static const Dimension default_resolutions[] = {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   104
	{ 640,  480},
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   105
	{ 800,  600},
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   106
	{1024,  768},
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   107
	{1152,  864},
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   108
	{1280,  800},
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   109
	{1280,  960},
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   110
	{1280, 1024},
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   111
	{1400, 1050},
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   112
	{1600, 1200},
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   113
	{1680, 1050},
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   114
	{1920, 1200}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   115
};
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   116
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   117
static void GetVideoModes()
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   118
{
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   119
	/* Need to set a gfx_mode as there is NO other way to autodetect for
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   120
	 * cards ourselves... and we need a card to get the modes. */
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   121
	set_gfx_mode(_fullscreen ? GFX_AUTODETECT_FULLSCREEN : GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   122
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   123
	GFX_MODE_LIST *mode_list = get_gfx_mode_list(gfx_driver->id);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   124
	if (mode_list == NULL) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   125
		memcpy(_resolutions, default_resolutions, sizeof(default_resolutions));
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   126
		_num_resolutions = lengthof(default_resolutions);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   127
		return;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   128
	}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   129
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   130
	GFX_MODE *modes = mode_list->mode;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   131
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   132
	int n = 0;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   133
	for (int i = 0; modes[i].bpp != 0; i++) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   134
		int w = modes[i].width;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   135
		int h = modes[i].height;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   136
		if (w >= 640 && h >= 480) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   137
			int j;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   138
			for (j = 0; j < n; j++) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   139
				if (_resolutions[j].width == w && _resolutions[j].height == h) break;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   140
			}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   141
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   142
			if (j == n) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   143
				_resolutions[j].width  = w;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   144
				_resolutions[j].height = h;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   145
				if (++n == lengthof(_resolutions)) break;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   146
			}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   147
		}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   148
	}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   149
	_num_resolutions = n;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   150
	SortResolutions(_num_resolutions);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   151
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   152
	destroy_gfx_mode_list(mode_list);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   153
}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   154
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   155
static void GetAvailableVideoMode(int *w, int *h)
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   156
{
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   157
	/* is the wanted mode among the available modes? */
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   158
	for (int i = 0; i != _num_resolutions; i++) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   159
		if (*w == _resolutions[i].width && *h == _resolutions[i].height) return;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   160
	}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   161
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   162
	/* use the closest possible resolution */
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   163
	int best = 0;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   164
	uint delta = abs((_resolutions[0].width - *w) * (_resolutions[0].height - *h));
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   165
	for (int i = 1; i != _num_resolutions; ++i) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   166
		uint newdelta = abs((_resolutions[i].width - *w) * (_resolutions[i].height - *h));
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   167
		if (newdelta < delta) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   168
			best = i;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   169
			delta = newdelta;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   170
		}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   171
	}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   172
	*w = _resolutions[best].width;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   173
	*h = _resolutions[best].height;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   174
}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   175
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   176
static bool CreateMainSurface(int w, int h)
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   177
{
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   178
	int bpp = BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   179
	if (bpp == 0) usererror("Can't use a blitter that blits 0 bpp for normal visuals");
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   180
	set_color_depth(bpp);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   181
10385
4f9838649c7f (svn r14636) -Add: DOS port of OpenTTD, without network support though.
rubidium
parents: 10381
diff changeset
   182
#if defined(DOS)
4f9838649c7f (svn r14636) -Add: DOS port of OpenTTD, without network support though.
rubidium
parents: 10381
diff changeset
   183
	/* Force DOS builds to ALWAYS use full screen as
4f9838649c7f (svn r14636) -Add: DOS port of OpenTTD, without network support though.
rubidium
parents: 10381
diff changeset
   184
	 * it can't do windowed. */
4f9838649c7f (svn r14636) -Add: DOS port of OpenTTD, without network support though.
rubidium
parents: 10381
diff changeset
   185
	_fullscreen = true;
4f9838649c7f (svn r14636) -Add: DOS port of OpenTTD, without network support though.
rubidium
parents: 10381
diff changeset
   186
#endif
4f9838649c7f (svn r14636) -Add: DOS port of OpenTTD, without network support though.
rubidium
parents: 10381
diff changeset
   187
10379
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   188
	GetVideoModes();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   189
	GetAvailableVideoMode(&w, &h);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   190
	if (set_gfx_mode(_fullscreen ? GFX_AUTODETECT_FULLSCREEN : GFX_AUTODETECT_WINDOWED, w, h, 0, 0) != 0) return false;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   191
10385
4f9838649c7f (svn r14636) -Add: DOS port of OpenTTD, without network support though.
rubidium
parents: 10381
diff changeset
   192
	_allegro_screen = create_bitmap(w, h);
4f9838649c7f (svn r14636) -Add: DOS port of OpenTTD, without network support though.
rubidium
parents: 10381
diff changeset
   193
	_screen.width = w;
4f9838649c7f (svn r14636) -Add: DOS port of OpenTTD, without network support though.
rubidium
parents: 10381
diff changeset
   194
	_screen.height = h;
10379
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   195
	_screen.pitch = ((byte*)screen->line[1] - (byte*)screen->line[0]) / (bitmap_color_depth(screen) / 8);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   196
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   197
	poll_mouse();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   198
	_cursor.pos.x = mouse_x;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   199
	_cursor.pos.y = mouse_y;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   200
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   201
	InitPalette();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   202
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   203
	char caption[32];
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   204
	snprintf(caption, sizeof(caption), "OpenTTD %s", _openttd_revision);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   205
	set_window_title(caption);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   206
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   207
	GameSizeChanged();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   208
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   209
	return true;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   210
}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   211
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   212
struct VkMapping {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   213
	uint16 vk_from;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   214
	byte vk_count;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   215
	byte map_to;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   216
};
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   217
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   218
#define AS(x, z) {x, 0, z}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   219
#define AM(x, y, z, w) {x, y - x, z}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   220
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   221
static const VkMapping _vk_mapping[] = {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   222
	/* Pageup stuff + up/down */
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   223
	AM(KEY_PGUP, KEY_PGDN, WKC_PAGEUP, WKC_PAGEDOWN),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   224
	AS(KEY_UP,     WKC_UP),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   225
	AS(KEY_DOWN,   WKC_DOWN),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   226
	AS(KEY_LEFT,   WKC_LEFT),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   227
	AS(KEY_RIGHT,  WKC_RIGHT),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   228
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   229
	AS(KEY_HOME,   WKC_HOME),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   230
	AS(KEY_END,    WKC_END),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   231
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   232
	AS(KEY_INSERT, WKC_INSERT),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   233
	AS(KEY_DEL,    WKC_DELETE),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   234
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   235
	/* Map letters & digits */
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   236
	AM(KEY_A, KEY_Z, 'A', 'Z'),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   237
	AM(KEY_0, KEY_9, '0', '9'),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   238
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   239
	AS(KEY_ESC,       WKC_ESC),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   240
	AS(KEY_PAUSE,     WKC_PAUSE),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   241
	AS(KEY_BACKSPACE, WKC_BACKSPACE),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   242
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   243
	AS(KEY_SPACE,     WKC_SPACE),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   244
	AS(KEY_ENTER,     WKC_RETURN),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   245
	AS(KEY_TAB,       WKC_TAB),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   246
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   247
	/* Function keys */
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   248
	AM(KEY_F1, KEY_F12, WKC_F1, WKC_F12),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   249
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   250
	/* Numeric part. */
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   251
	AM(KEY_0_PAD, KEY_9_PAD, '0', '9'),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   252
	AS(KEY_SLASH_PAD,   WKC_NUM_DIV),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   253
	AS(KEY_ASTERISK,    WKC_NUM_MUL),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   254
	AS(KEY_MINUS_PAD,   WKC_NUM_MINUS),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   255
	AS(KEY_PLUS_PAD,    WKC_NUM_PLUS),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   256
	AS(KEY_ENTER_PAD,   WKC_NUM_ENTER),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   257
	AS(KEY_DEL_PAD,     WKC_DELETE),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   258
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   259
	/* Other non-letter keys */
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   260
	AS(KEY_SLASH,        WKC_SLASH),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   261
	AS(KEY_SEMICOLON,    WKC_SEMICOLON),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   262
	AS(KEY_EQUALS,       WKC_EQUALS),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   263
	AS(KEY_OPENBRACE,    WKC_L_BRACKET),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   264
	AS(KEY_BACKSLASH,    WKC_BACKSLASH),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   265
	AS(KEY_CLOSEBRACE,   WKC_R_BRACKET),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   266
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   267
	AS(KEY_QUOTE,   WKC_SINGLEQUOTE),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   268
	AS(KEY_COMMA,   WKC_COMMA),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   269
	AS(KEY_MINUS,   WKC_MINUS),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   270
	AS(KEY_STOP,    WKC_PERIOD),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   271
	AS(KEY_TILDE,   WKC_BACKQUOTE),
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   272
};
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   273
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   274
static uint32 ConvertAllegroKeyIntoMy()
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   275
{
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   276
	int scancode;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   277
	int unicode = ureadkey(&scancode);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   278
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   279
	const VkMapping *map;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   280
	uint key = 0;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   281
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   282
	for (map = _vk_mapping; map != endof(_vk_mapping); ++map) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   283
		if ((uint)(scancode - map->vk_from) <= map->vk_count) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   284
			key = scancode - map->vk_from + map->map_to;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   285
			break;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   286
		}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   287
	}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   288
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   289
	if (key_shifts & KB_SHIFT_FLAG) key |= WKC_SHIFT;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   290
	if (key_shifts & KB_CTRL_FLAG)  key |= WKC_CTRL;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   291
	if (key_shifts & KB_ALT_FLAG)   key |= WKC_ALT;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   292
#if 0
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   293
	DEBUG(driver, 0, "Scancode character pressed %u", scancode);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   294
	DEBUG(driver, 0, "Unicode character pressed %u", unicode);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   295
#endif
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   296
	return (key << 16) + unicode;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   297
}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   298
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   299
enum {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   300
	LEFT_BUTTON,
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   301
	RIGHT_BUTTON,
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   302
};
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   303
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   304
static void PollEvent()
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   305
{
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   306
	poll_mouse();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   307
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   308
	bool mouse_action = false;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   309
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   310
	/* Mouse buttons */
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   311
	static int prev_button_state;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   312
	if (prev_button_state != mouse_b) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   313
		uint diff = prev_button_state ^ mouse_b;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   314
		while (diff != 0) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   315
			int button = FindFirstBit(diff);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   316
			ClrBit(diff, button);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   317
			if (HasBit(mouse_b, button)) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   318
				/* Pressed mouse button */
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   319
				if (_rightclick_emulate && key_shifts & KB_CTRL_FLAG) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   320
					button = RIGHT_BUTTON;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   321
					ClrBit(diff, RIGHT_BUTTON);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   322
				}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   323
				switch (button) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   324
					case LEFT_BUTTON:
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   325
						_left_button_down = true;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   326
						break;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   327
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   328
					case RIGHT_BUTTON:
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   329
						_right_button_down = true;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   330
						_right_button_clicked = true;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   331
						break;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   332
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   333
					default:
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   334
						/* ignore rest */
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   335
						break;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   336
				}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   337
			} else {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   338
				/* Released mouse button */
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   339
				if (_rightclick_emulate) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   340
					_right_button_down = false;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   341
					_left_button_down = false;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   342
					_left_button_clicked = false;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   343
				} else if (button == LEFT_BUTTON) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   344
					_left_button_down = false;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   345
					_left_button_clicked = false;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   346
				} else if (button == RIGHT_BUTTON) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   347
					_right_button_down = false;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   348
				}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   349
			}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   350
		}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   351
		prev_button_state = mouse_b;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   352
		mouse_action = true;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   353
	}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   354
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   355
	/* Mouse movement */
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   356
	int dx = mouse_x - _cursor.pos.x;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   357
	int dy = mouse_y - _cursor.pos.y;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   358
	if (dx != 0 || dy != 0) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   359
		if (_cursor.fix_at) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   360
			_cursor.delta.x += dx;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   361
			_cursor.delta.y += dy;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   362
			position_mouse(_cursor.pos.x, _cursor.pos.y);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   363
		} else {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   364
			_cursor.delta.x = dx;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   365
			_cursor.delta.y = dy;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   366
			_cursor.pos.x = mouse_x;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   367
			_cursor.pos.y = mouse_y;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   368
			_cursor.dirty = true;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   369
		}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   370
		mouse_action = true;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   371
	}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   372
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   373
	if (mouse_action) HandleMouseEvents();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   374
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   375
	poll_keyboard();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   376
	if (key_shifts & KB_ALT_FLAG && (key[KEY_ENTER] || key[KEY_F])) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   377
		ToggleFullScreen(!_fullscreen);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   378
	} else if (keypressed()) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   379
		HandleKeypress(ConvertAllegroKeyIntoMy());
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   380
	}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   381
}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   382
10380
f4adb9648a93 (svn r14631) -Add: support for Allegro as sound backend.
rubidium
parents: 10379
diff changeset
   383
/** There are multiple modules that might be using Allegro and
f4adb9648a93 (svn r14631) -Add: support for Allegro as sound backend.
rubidium
parents: 10379
diff changeset
   384
 * Allegro can only be initiated once. */
10381
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents: 10380
diff changeset
   385
int _allegro_instance_count = 0;
10380
f4adb9648a93 (svn r14631) -Add: support for Allegro as sound backend.
rubidium
parents: 10379
diff changeset
   386
10379
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   387
const char *VideoDriver_Allegro::Start(const char * const *parm)
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   388
{
10381
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents: 10380
diff changeset
   389
	if (_allegro_instance_count == 0 && install_allegro(SYSTEM_AUTODETECT, &errno, NULL)) return NULL;
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents: 10380
diff changeset
   390
	_allegro_instance_count++;
10379
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   391
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   392
	install_timer();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   393
	install_mouse();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   394
	install_keyboard();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   395
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   396
	CreateMainSurface(_cur_resolution.width, _cur_resolution.height);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   397
	MarkWholeScreenDirty();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   398
	set_close_button_callback(HandleExitGameRequest);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   399
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   400
	return NULL;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   401
}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   402
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   403
void VideoDriver_Allegro::Stop()
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   404
{
10381
c043aa0c1695 (svn r14632) -Add: support Allegro as midi backend.
rubidium
parents: 10380
diff changeset
   405
	if (--_allegro_instance_count == 0) allegro_exit();
10379
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   406
}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   407
10385
4f9838649c7f (svn r14636) -Add: DOS port of OpenTTD, without network support though.
rubidium
parents: 10381
diff changeset
   408
#if defined(UNIX) || defined(__OS2__) || defined(PSP) || defined(DOS)
10379
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   409
# include <sys/time.h> /* gettimeofday */
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   410
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   411
static uint32 GetTime()
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   412
{
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   413
	struct timeval tim;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   414
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   415
	gettimeofday(&tim, NULL);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   416
	return tim.tv_usec / 1000 + tim.tv_sec * 1000;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   417
}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   418
#else
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   419
static uint32 GetTime()
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   420
{
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   421
	return GetTickCount();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   422
}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   423
#endif
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   424
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   425
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   426
void VideoDriver_Allegro::MainLoop()
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   427
{
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   428
	uint32 cur_ticks = GetTime();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   429
	uint32 last_cur_ticks = cur_ticks;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   430
	uint32 next_tick = cur_ticks + 30;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   431
	uint32 pal_tick = 0;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   432
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   433
	for (;;) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   434
		uint32 prev_cur_ticks = cur_ticks; // to check for wrapping
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   435
		InteractiveRandom(); // randomness
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   436
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   437
		PollEvent();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   438
		if (_exit_game) return;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   439
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   440
#if defined(_DEBUG)
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   441
		if (_shift_pressed)
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   442
#else
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   443
		/* Speedup when pressing tab, except when using ALT+TAB
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   444
		 * to switch to another application */
10380
f4adb9648a93 (svn r14631) -Add: support for Allegro as sound backend.
rubidium
parents: 10379
diff changeset
   445
		if (key[KEY_TAB] && (key_shifts & KB_ALT_FLAG) == 0)
10379
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   446
#endif
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   447
		{
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   448
			if (!_networking && _game_mode != GM_MENU) _fast_forward |= 2;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   449
		} else if (_fast_forward & 2) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   450
			_fast_forward = 0;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   451
		}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   452
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   453
		cur_ticks = GetTime();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   454
		if (cur_ticks >= next_tick || (_fast_forward && !_pause_game) || cur_ticks < prev_cur_ticks) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   455
			_realtime_tick += cur_ticks - last_cur_ticks;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   456
			last_cur_ticks = cur_ticks;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   457
			next_tick = cur_ticks + 30;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   458
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   459
			bool old_ctrl_pressed = _ctrl_pressed;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   460
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   461
			_ctrl_pressed  = !!(key_shifts & KB_CTRL_FLAG);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   462
			_shift_pressed = !!(key_shifts & KB_SHIFT_FLAG);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   463
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   464
			/* determine which directional keys are down */
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   465
			_dirkeys =
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   466
				(key[KEY_LEFT]  ? 1 : 0) |
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   467
				(key[KEY_UP]    ? 2 : 0) |
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   468
				(key[KEY_RIGHT] ? 4 : 0) |
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   469
				(key[KEY_DOWN]  ? 8 : 0);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   470
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   471
			if (old_ctrl_pressed != _ctrl_pressed) HandleCtrlChanged();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   472
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   473
			GameLoop();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   474
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   475
			_screen.dst_ptr = _allegro_screen->line[0];
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   476
			UpdateWindows();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   477
			if (++pal_tick > 4) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   478
				CheckPaletteAnim();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   479
				pal_tick = 1;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   480
			}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   481
			DrawSurfaceToScreen();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   482
		} else {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   483
			CSleep(1);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   484
			_screen.dst_ptr = _allegro_screen->line[0];
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   485
			NetworkDrawChatMessage();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   486
			DrawMouseCursor();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   487
			DrawSurfaceToScreen();
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   488
		}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   489
	}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   490
}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   491
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   492
bool VideoDriver_Allegro::ChangeResolution(int w, int h)
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   493
{
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   494
	return CreateMainSurface(w, h);
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   495
}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   496
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   497
bool VideoDriver_Allegro::ToggleFullscreen(bool fullscreen)
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   498
{
10385
4f9838649c7f (svn r14636) -Add: DOS port of OpenTTD, without network support though.
rubidium
parents: 10381
diff changeset
   499
#ifdef DOS
4f9838649c7f (svn r14636) -Add: DOS port of OpenTTD, without network support though.
rubidium
parents: 10381
diff changeset
   500
	return false;
4f9838649c7f (svn r14636) -Add: DOS port of OpenTTD, without network support though.
rubidium
parents: 10381
diff changeset
   501
#else
10379
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   502
	_fullscreen = fullscreen;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   503
	GetVideoModes(); // get the list of available video modes
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   504
	if (_num_resolutions == 0 || !this->ChangeResolution(_cur_resolution.width, _cur_resolution.height)) {
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   505
		/* switching resolution failed, put back full_screen to original status */
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   506
		_fullscreen ^= true;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   507
		return false;
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   508
	}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   509
	return true;
10385
4f9838649c7f (svn r14636) -Add: DOS port of OpenTTD, without network support though.
rubidium
parents: 10381
diff changeset
   510
#endif
10379
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   511
}
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   512
dd9d0aade65e (svn r14630) -Add: support Allegro as video backend.
rubidium
parents:
diff changeset
   513
#endif /* WITH_ALLEGRO */