mirror of https://github.com/OpenTTD/OpenTTD
(svn r14267) [0.6] -Backport from trunk:
- Fix: Make the 'Transfer Credit' display aware of the entire consist, not only the first vehicle (r14098) - Fix: Do not flood a NewGRF industry when it implicitly tells that it wants to be build on water (land shape flags bit 5) [FS#2230] (r14093) - Fix: The vehicle window of articulated road vehicles would show the clone/refit button when the vehicle was not completely stopped in the depot (r14090) - Fix: Flawed parsing of words (as in 2 bytes) in GRF strings due to sign extension [FS#2228] (r14087) - Fix: Division by 0 in NewAI [FS#2226] (r14062) - Fix: NewGRF callback 23 did not use the NewGRF compatible text stack [FS#2224] (r14058) - Fix: NewGRF text stack's "push word" didn't move the data around properly (r14057) - Fix: Long strings in the edit box would cause OpenTTD to stop drawing the string. This is especially noticable with low resolutions and the chat input box (r14054) - Fix: [OSX] changed the condition for selecting 8 or 32 bpp blitter by default. Now we will pick 32 bpp if no 8 bpp fullscreen resolutions are available on the main display (the one with the dock) (r14032)release/0.6
parent
c9d52ddeff
commit
09cf61b466
|
@ -881,6 +881,7 @@ static int AiNew_HowManyVehicles(Player *p)
|
||||||
length = _players_ainew[p->index].path_info.route_length;
|
length = _players_ainew[p->index].path_info.route_length;
|
||||||
// Calculating tiles a day a vehicle moves is not easy.. this is how it must be done!
|
// Calculating tiles a day a vehicle moves is not easy.. this is how it must be done!
|
||||||
tiles_a_day = RoadVehInfo(i)->max_speed * DAY_TICKS / 256 / 16;
|
tiles_a_day = RoadVehInfo(i)->max_speed * DAY_TICKS / 256 / 16;
|
||||||
|
if (tiles_a_day == 0) tiles_a_day = 1;
|
||||||
// We want a vehicle in a station once a month at least, so, calculate it!
|
// We want a vehicle in a station once a month at least, so, calculate it!
|
||||||
// (the * 2 is because we have 2 stations ;))
|
// (the * 2 is because we have 2 stations ;))
|
||||||
amount = length * 2 * 2 / tiles_a_day / 30;
|
amount = length * 2 * 2 / tiles_a_day / 30;
|
||||||
|
@ -897,6 +898,7 @@ static int AiNew_HowManyVehicles(Player *p)
|
||||||
length = _players_ainew[p->index].path_info.route_length;
|
length = _players_ainew[p->index].path_info.route_length;
|
||||||
// Calculating tiles a day a vehicle moves is not easy.. this is how it must be done!
|
// Calculating tiles a day a vehicle moves is not easy.. this is how it must be done!
|
||||||
tiles_a_day = RoadVehInfo(i)->max_speed * DAY_TICKS / 256 / 16;
|
tiles_a_day = RoadVehInfo(i)->max_speed * DAY_TICKS / 256 / 16;
|
||||||
|
if (tiles_a_day == 0) tiles_a_day = 1;
|
||||||
if (_players_ainew[p->index].from_deliver) {
|
if (_players_ainew[p->index].from_deliver) {
|
||||||
max_cargo = GetIndustry(_players_ainew[p->index].from_ic)->last_month_production[0];
|
max_cargo = GetIndustry(_players_ainew[p->index].from_ic)->last_month_production[0];
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
void DrawAircraftDetails(const Vehicle *v, int x, int y)
|
void DrawAircraftDetails(const Vehicle *v, int x, int y)
|
||||||
{
|
{
|
||||||
int y_offset = (v->Next()->cargo_cap != 0) ? -11 : 0;
|
int y_offset = (v->Next()->cargo_cap != 0) ? -11 : 0;
|
||||||
|
Money feeder_share = 0;
|
||||||
|
|
||||||
for (const Vehicle *u = v ; u != NULL ; u = u->Next()) {
|
for (const Vehicle *u = v ; u != NULL ; u = u->Next()) {
|
||||||
if (IsNormalAircraft(u)) {
|
if (IsNormalAircraft(u)) {
|
||||||
|
@ -53,11 +54,12 @@ void DrawAircraftDetails(const Vehicle *v, int x, int y)
|
||||||
SetDParam(1, cargo_count);
|
SetDParam(1, cargo_count);
|
||||||
SetDParam(2, u->cargo.Source());
|
SetDParam(2, u->cargo.Source());
|
||||||
DrawString(x, y + 21 + y_offset, STR_8813_FROM, TC_FROMSTRING);
|
DrawString(x, y + 21 + y_offset, STR_8813_FROM, TC_FROMSTRING);
|
||||||
|
feeder_share += u->cargo.FeederShare();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SetDParam(0, v->cargo.FeederShare());
|
SetDParam(0, feeder_share);
|
||||||
DrawString(x, y + 33 + y_offset, STR_FEEDER_CARGO_VALUE, TC_FROMSTRING);
|
DrawString(x, y + 33 + y_offset, STR_FEEDER_CARGO_VALUE, TC_FROMSTRING);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,10 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
|
#if defined(WITH_COCOA)
|
||||||
|
bool QZ_CanDisplay8bpp();
|
||||||
|
#endif /* defined(WITH_COCOA) */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The base factory, keeping track of all blitters.
|
* The base factory, keeping track of all blitters.
|
||||||
*/
|
*/
|
||||||
|
@ -65,13 +69,15 @@ public:
|
||||||
{
|
{
|
||||||
const char *default_blitter = "8bpp-optimized";
|
const char *default_blitter = "8bpp-optimized";
|
||||||
|
|
||||||
#if defined(__APPLE__)
|
#if defined(WITH_COCOA)
|
||||||
/* MacOS X 10.5 removed 8bpp fullscreen support.
|
/* Some people reported lack of fullscreen support in 8 bpp mode.
|
||||||
* Because of this we will pick 32bpp by default */
|
* While we prefer 8 bpp since it's faster, we will still have to test for support. */
|
||||||
if (MacOSVersionIsAtLeast(10, 5, 0)) {
|
if (!QZ_CanDisplay8bpp()) {
|
||||||
|
/* The main display can't go to 8 bpp fullscreen mode.
|
||||||
|
* We will have to switch to 32 bpp by default. */
|
||||||
default_blitter = "32bpp-anim";
|
default_blitter = "32bpp-anim";
|
||||||
}
|
}
|
||||||
#endif /* defined(__APPLE__) */
|
#endif /* defined(WITH_COCOA) */
|
||||||
if (GetBlitters().size() == 0) return NULL;
|
if (GetBlitters().size() == 0) return NULL;
|
||||||
const char *bname = (StrEmpty(name)) ? default_blitter : name;
|
const char *bname = (StrEmpty(name)) ? default_blitter : name;
|
||||||
|
|
||||||
|
|
10
src/gfx.cpp
10
src/gfx.cpp
|
@ -568,8 +568,8 @@ Dimension GetStringBoundingBox(const char *str)
|
||||||
|
|
||||||
/** Draw a string at the given coordinates with the given colour
|
/** Draw a string at the given coordinates with the given colour
|
||||||
* @param string the string to draw
|
* @param string the string to draw
|
||||||
* @param x offset from left side of the screen, if negative offset from the right side
|
* @param x offset from left side of the screen
|
||||||
* @param y offset from top side of the screen, if negative offset from the bottom
|
* @param y offset from top side of the screen
|
||||||
* @param real_color colour of the string, see _string_colormap in
|
* @param real_color colour of the string, see _string_colormap in
|
||||||
* table/palettes.h or docs/ottd-colourtext-palette.png or the enum TextColour in gfx_type.h
|
* table/palettes.h or docs/ottd-colourtext-palette.png or the enum TextColour in gfx_type.h
|
||||||
* @return the x-coordinates where the drawing has finished. If nothing is drawn
|
* @return the x-coordinates where the drawing has finished. If nothing is drawn
|
||||||
|
@ -585,11 +585,7 @@ int DoDrawString(const char *string, int x, int y, uint16 real_color)
|
||||||
byte previous_color = color;
|
byte previous_color = color;
|
||||||
|
|
||||||
if (color != 0xFE) {
|
if (color != 0xFE) {
|
||||||
if (x >= dpi->left + dpi->width ||
|
if (x >= dpi->left + dpi->width || y >= dpi->top + dpi->height) return x;
|
||||||
x + _screen.width * 2 <= dpi->left ||
|
|
||||||
y >= dpi->top + dpi->height ||
|
|
||||||
y + _screen.height <= dpi->top)
|
|
||||||
return x;
|
|
||||||
|
|
||||||
if (color != 0xFF) {
|
if (color != 0xFF) {
|
||||||
switch_color:;
|
switch_color:;
|
||||||
|
|
|
@ -407,7 +407,9 @@ static CommandCost ClearTile_Industry(TileIndex tile, byte flags)
|
||||||
if ((_current_player != OWNER_WATER && _game_mode != GM_EDITOR &&
|
if ((_current_player != OWNER_WATER && _game_mode != GM_EDITOR &&
|
||||||
!_cheats.magic_bulldozer.value) ||
|
!_cheats.magic_bulldozer.value) ||
|
||||||
((flags & DC_AUTO) != 0) ||
|
((flags & DC_AUTO) != 0) ||
|
||||||
(_current_player == OWNER_WATER && (indspec->behaviour & INDUSTRYBEH_BUILT_ONWATER))) {
|
(_current_player == OWNER_WATER &&
|
||||||
|
((indspec->behaviour & INDUSTRYBEH_BUILT_ONWATER) ||
|
||||||
|
HasBit(GetIndustryTileSpec(GetIndustryGfx(tile))->slopes_refused, 5)))) {
|
||||||
SetDParam(0, indspec->name);
|
SetDParam(0, indspec->name);
|
||||||
return_cmd_error(STR_4800_IN_THE_WAY);
|
return_cmd_error(STR_4800_IN_THE_WAY);
|
||||||
}
|
}
|
||||||
|
|
|
@ -238,8 +238,8 @@ char *TranslateTTDPatchCodes(uint32 grfid, const char *str)
|
||||||
case 0x80: d += Utf8Encode(d, SCC_NEWGRF_PRINT_DWORD + c - 0x7B); break;
|
case 0x80: d += Utf8Encode(d, SCC_NEWGRF_PRINT_DWORD + c - 0x7B); break;
|
||||||
case 0x81: {
|
case 0x81: {
|
||||||
StringID string;
|
StringID string;
|
||||||
string = *str++;
|
string = ((uint8)*str++);
|
||||||
string |= *str++ << 8;
|
string |= ((uint8)*str++) << 8;
|
||||||
d += Utf8Encode(d, SCC_STRING_ID);
|
d += Utf8Encode(d, SCC_STRING_ID);
|
||||||
d += Utf8Encode(d, MapGRFStringID(grfid, string));
|
d += Utf8Encode(d, MapGRFStringID(grfid, string));
|
||||||
break;
|
break;
|
||||||
|
@ -270,14 +270,22 @@ char *TranslateTTDPatchCodes(uint32 grfid, const char *str)
|
||||||
case 0x9A:
|
case 0x9A:
|
||||||
switch (*str++) {
|
switch (*str++) {
|
||||||
case 0: /* FALL THROUGH */
|
case 0: /* FALL THROUGH */
|
||||||
case 1: d += Utf8Encode(d, SCC_NEWGRF_PRINT_QWORD_CURRENCY); break;
|
case 1:
|
||||||
|
d += Utf8Encode(d, SCC_NEWGRF_PRINT_QWORD_CURRENCY);
|
||||||
|
break;
|
||||||
case 3: {
|
case 3: {
|
||||||
uint16 tmp = *str++;
|
uint16 tmp = ((uint8)*str++);
|
||||||
tmp |= (*str++) << 8;
|
tmp |= ((uint8)*str++) << 8;
|
||||||
d += Utf8Encode(d, SCC_NEWGRF_PUSH_WORD); d += Utf8Encode(d, tmp);
|
d += Utf8Encode(d, SCC_NEWGRF_PUSH_WORD);
|
||||||
|
d += Utf8Encode(d, tmp);
|
||||||
} break;
|
} break;
|
||||||
case 4: d += Utf8Encode(d, SCC_NEWGRF_UNPRINT); d += Utf8Encode(d, *str++); break;
|
case 4:
|
||||||
default: grfmsg(1, "missing handler for extended format code"); break;
|
d += Utf8Encode(d, SCC_NEWGRF_UNPRINT);
|
||||||
|
d += Utf8Encode(d, *str++);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
grfmsg(1, "missing handler for extended format code");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -543,8 +551,8 @@ struct TextRefStack {
|
||||||
if (this->position >= 2) {
|
if (this->position >= 2) {
|
||||||
this->position -= 2;
|
this->position -= 2;
|
||||||
} else {
|
} else {
|
||||||
for (uint i = lengthof(stack) - 3; i >= this->position; i--) {
|
for (int i = lengthof(stack) - 1; i >= this->position + 2; i--) {
|
||||||
this->stack[this->position + 2] = this->stack[this->position];
|
this->stack[i] = this->stack[i - 2];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this->stack[this->position] = GB(word, 0, 8);
|
this->stack[this->position] = GB(word, 0, 8);
|
||||||
|
|
|
@ -74,6 +74,7 @@ struct RoadVehicle : public Vehicle {
|
||||||
int GetDisplayMaxSpeed() const { return this->max_speed * 10 / 32; }
|
int GetDisplayMaxSpeed() const { return this->max_speed * 10 / 32; }
|
||||||
Money GetRunningCost() const { return RoadVehInfo(this->engine_type)->running_cost * GetPriceByIndex(RoadVehInfo(this->engine_type)->running_cost_class); }
|
Money GetRunningCost() const { return RoadVehInfo(this->engine_type)->running_cost * GetPriceByIndex(RoadVehInfo(this->engine_type)->running_cost_class); }
|
||||||
bool IsInDepot() const { return this->u.road.state == RVSB_IN_DEPOT; }
|
bool IsInDepot() const { return this->u.road.state == RVSB_IN_DEPOT; }
|
||||||
|
bool IsStoppedInDepot() const;
|
||||||
void Tick();
|
void Tick();
|
||||||
void OnNewDay();
|
void OnNewDay();
|
||||||
};
|
};
|
||||||
|
|
|
@ -334,14 +334,14 @@ void ClearSlot(Vehicle *v)
|
||||||
DEBUG(ms, 3, "Clearing slot at 0x%X", rs->xy);
|
DEBUG(ms, 3, "Clearing slot at 0x%X", rs->xy);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool CheckRoadVehInDepotStopped(const Vehicle *v)
|
bool RoadVehicle::IsStoppedInDepot() const
|
||||||
{
|
{
|
||||||
TileIndex tile = v->tile;
|
TileIndex tile = this->tile;
|
||||||
|
|
||||||
if (!IsTileDepotType(tile, TRANSPORT_ROAD)) return false;
|
if (!IsTileDepotType(tile, TRANSPORT_ROAD)) return false;
|
||||||
if (IsRoadVehFront(v) && !(v->vehstatus & VS_STOPPED)) return false;
|
if (IsRoadVehFront(this) && !(this->vehstatus & VS_STOPPED)) return false;
|
||||||
|
|
||||||
for (; v != NULL; v = v->Next()) {
|
for (const Vehicle *v = this; v != NULL; v = v->Next()) {
|
||||||
if (v->u.road.state != RVSB_IN_DEPOT || v->tile != tile) return false;
|
if (v->u.road.state != RVSB_IN_DEPOT || v->tile != tile) return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -365,7 +365,7 @@ CommandCost CmdSellRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
|
|
||||||
if (HASBITS(v->vehstatus, VS_CRASHED)) return_cmd_error(STR_CAN_T_SELL_DESTROYED_VEHICLE);
|
if (HASBITS(v->vehstatus, VS_CRASHED)) return_cmd_error(STR_CAN_T_SELL_DESTROYED_VEHICLE);
|
||||||
|
|
||||||
if (!CheckRoadVehInDepotStopped(v)) {
|
if (!v->IsStoppedInDepot()) {
|
||||||
return_cmd_error(STR_9013_MUST_BE_STOPPED_INSIDE);
|
return_cmd_error(STR_9013_MUST_BE_STOPPED_INSIDE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2150,7 +2150,7 @@ CommandCost CmdRefitRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
v = GetVehicle(p1);
|
v = GetVehicle(p1);
|
||||||
|
|
||||||
if (v->type != VEH_ROAD || !CheckOwnership(v->owner)) return CMD_ERROR;
|
if (v->type != VEH_ROAD || !CheckOwnership(v->owner)) return CMD_ERROR;
|
||||||
if (!CheckRoadVehInDepotStopped(v)) return_cmd_error(STR_9013_MUST_BE_STOPPED_INSIDE);
|
if (!v->IsStoppedInDepot()) return_cmd_error(STR_9013_MUST_BE_STOPPED_INSIDE);
|
||||||
if (v->vehstatus & VS_CRASHED) return_cmd_error(STR_CAN_T_REFIT_DESTROYED_VEHICLE);
|
if (v->vehstatus & VS_CRASHED) return_cmd_error(STR_CAN_T_REFIT_DESTROYED_VEHICLE);
|
||||||
|
|
||||||
if (new_cid >= NUM_CARGO) return CMD_ERROR;
|
if (new_cid >= NUM_CARGO) return CMD_ERROR;
|
||||||
|
|
|
@ -25,6 +25,7 @@ void DrawRoadVehDetails(const Vehicle *v, int x, int y)
|
||||||
{
|
{
|
||||||
uint y_offset = RoadVehHasArticPart(v) ? 15 : 0;
|
uint y_offset = RoadVehHasArticPart(v) ? 15 : 0;
|
||||||
StringID str;
|
StringID str;
|
||||||
|
Money feeder_share = 0;
|
||||||
|
|
||||||
SetDParam(0, v->engine_type);
|
SetDParam(0, v->engine_type);
|
||||||
SetDParam(1, v->build_year);
|
SetDParam(1, v->build_year);
|
||||||
|
@ -70,6 +71,7 @@ void DrawRoadVehDetails(const Vehicle *v, int x, int y)
|
||||||
SetDParam(1, u->cargo.Count());
|
SetDParam(1, u->cargo.Count());
|
||||||
SetDParam(2, u->cargo.Source());
|
SetDParam(2, u->cargo.Source());
|
||||||
str = STR_8813_FROM;
|
str = STR_8813_FROM;
|
||||||
|
feeder_share += u->cargo.FeederShare();
|
||||||
}
|
}
|
||||||
DrawString(x, y + 21 + y_offset, str, TC_FROMSTRING);
|
DrawString(x, y + 21 + y_offset, str, TC_FROMSTRING);
|
||||||
|
|
||||||
|
@ -88,12 +90,13 @@ void DrawRoadVehDetails(const Vehicle *v, int x, int y)
|
||||||
SetDParam(1, v->cargo.Count());
|
SetDParam(1, v->cargo.Count());
|
||||||
SetDParam(2, v->cargo.Source());
|
SetDParam(2, v->cargo.Source());
|
||||||
str = STR_8813_FROM;
|
str = STR_8813_FROM;
|
||||||
|
feeder_share += v->cargo.FeederShare();
|
||||||
}
|
}
|
||||||
DrawString(x, y + 21 + y_offset, str, TC_FROMSTRING);
|
DrawString(x, y + 21 + y_offset, str, TC_FROMSTRING);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Draw Transfer credits text */
|
/* Draw Transfer credits text */
|
||||||
SetDParam(0, v->cargo.FeederShare());
|
SetDParam(0, feeder_share);
|
||||||
DrawString(x, y + 33 + y_offset, STR_FEEDER_CARGO_VALUE, TC_FROMSTRING);
|
DrawString(x, y + 33 + y_offset, STR_FEEDER_CARGO_VALUE, TC_FROMSTRING);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -231,6 +231,7 @@ void DrawTrainDetails(const Vehicle *v, int x, int y, int vscroll_pos, uint16 vs
|
||||||
} else {
|
} else {
|
||||||
AcceptedCargo act_cargo;
|
AcceptedCargo act_cargo;
|
||||||
AcceptedCargo max_cargo;
|
AcceptedCargo max_cargo;
|
||||||
|
Money feeder_share = 0;
|
||||||
|
|
||||||
memset(max_cargo, 0, sizeof(max_cargo));
|
memset(max_cargo, 0, sizeof(max_cargo));
|
||||||
memset(act_cargo, 0, sizeof(act_cargo));
|
memset(act_cargo, 0, sizeof(act_cargo));
|
||||||
|
@ -238,6 +239,7 @@ void DrawTrainDetails(const Vehicle *v, int x, int y, int vscroll_pos, uint16 vs
|
||||||
for (const Vehicle *u = v; u != NULL ; u = u->Next()) {
|
for (const Vehicle *u = v; u != NULL ; u = u->Next()) {
|
||||||
act_cargo[u->cargo_type] += u->cargo.Count();
|
act_cargo[u->cargo_type] += u->cargo.Count();
|
||||||
max_cargo[u->cargo_type] += u->cargo_cap;
|
max_cargo[u->cargo_type] += u->cargo_cap;
|
||||||
|
feeder_share += u->cargo.FeederShare();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* draw total cargo tab */
|
/* draw total cargo tab */
|
||||||
|
@ -253,7 +255,7 @@ void DrawTrainDetails(const Vehicle *v, int x, int y, int vscroll_pos, uint16 vs
|
||||||
DrawString(x, y + 2, FreightWagonMult(i) > 1 ? STR_TOTAL_CAPACITY_MULT : STR_TOTAL_CAPACITY, TC_FROMSTRING);
|
DrawString(x, y + 2, FreightWagonMult(i) > 1 ? STR_TOTAL_CAPACITY_MULT : STR_TOTAL_CAPACITY, TC_FROMSTRING);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SetDParam(0, v->cargo.FeederShare());
|
SetDParam(0, feeder_share);
|
||||||
DrawString(x, y + 15, STR_FEEDER_CARGO_VALUE, TC_FROMSTRING);
|
DrawString(x, y + 15, STR_FEEDER_CARGO_VALUE, TC_FROMSTRING);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -486,7 +486,10 @@ uint ShowAdditionalText(int x, int y, uint w, EngineID engine)
|
||||||
|
|
||||||
/* STR_02BD is used to start the string with {BLACK} */
|
/* STR_02BD is used to start the string with {BLACK} */
|
||||||
SetDParam(0, GetGRFStringID(GetEngineGRFID(engine), 0xD000 + callback));
|
SetDParam(0, GetGRFStringID(GetEngineGRFID(engine), 0xD000 + callback));
|
||||||
return DrawStringMultiLine(x, y, STR_02BD, w);
|
PrepareTextRefStackUsage(0);
|
||||||
|
uint result = DrawStringMultiLine(x, y, STR_02BD, w);
|
||||||
|
StopTextRefStackUsage();
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Display list of cargo types of the engine, for the purchase information window */
|
/** Display list of cargo types of the engine, for the purchase information window */
|
||||||
|
|
|
@ -155,6 +155,15 @@ uint QZ_ListModes(OTTD_Point* modes, uint max_modes, CGDirectDisplayID display_i
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Small function to test if the main display can display 8 bpp in fullscreen */
|
||||||
|
bool QZ_CanDisplay8bpp()
|
||||||
|
{
|
||||||
|
OTTD_Point p;
|
||||||
|
|
||||||
|
/* We want to know if 8 bpp is possible in fullscreen and not anything about resolutions.
|
||||||
|
* Because of this we want to fill a list of 1 resolution of 8 bpp on display 0 (main) and return if we found one. */
|
||||||
|
return QZ_ListModes(&p, 1, 0, 8);
|
||||||
|
}
|
||||||
|
|
||||||
class FullscreenSubdriver: public CocoaSubdriver {
|
class FullscreenSubdriver: public CocoaSubdriver {
|
||||||
int display_width;
|
int display_width;
|
||||||
|
|
Loading…
Reference in New Issue