Browse Source

Use safe ranges instead of decltype() for C++03 compatability

SDL2 uses int, but SDL1.2 uses Uint16 and Sint16.
pull/740/head
Anders Jenbo 6 years ago
parent
commit
c32f33f19f
  1. 9
      SourceX/DiabloUI/art_draw.cpp
  2. 3
      SourceX/DiabloUI/art_draw.h
  3. 6
      SourceX/DiabloUI/button.h
  4. 8
      SourceX/DiabloUI/credits.cpp
  5. 4
      SourceX/DiabloUI/progress.cpp
  6. 22
      SourceX/DiabloUI/scrollbar.h
  7. 4
      SourceX/DiabloUI/ttf_render_wrapped.cpp
  8. 22
      SourceX/DiabloUI/ui_item.h
  9. 12
      SourceX/storm/storm.cpp

9
SourceX/DiabloUI/art_draw.cpp

@ -6,17 +6,16 @@ namespace dvl {
extern SDL_Surface *pal_surface;
extern unsigned int pal_surface_palette_version;
void DrawArt(int screenX, int screenY, Art *art, int nFrame,
decltype(SDL_Rect().w) srcW, decltype(SDL_Rect().h) srcH)
void DrawArt(int screenX, int screenY, Art *art, int nFrame, Uint16 srcW, Uint16 srcH)
{
if (screenY >= SCREEN_HEIGHT || screenX >= SCREEN_WIDTH || art->surface == NULL)
return;
SDL_Rect src_rect = {
0,
static_cast<decltype(SDL_Rect().y)>(nFrame * art->h()),
static_cast<decltype(SDL_Rect().w)>(art->w()),
static_cast<decltype(SDL_Rect().h)>(art->h())
static_cast<Sint16>(nFrame * art->h()),
static_cast<Uint16>(art->w()),
static_cast<Uint16>(art->h())
};
ScaleOutputRect(&src_rect);

3
SourceX/DiabloUI/art_draw.h

@ -6,8 +6,7 @@
namespace dvl {
void DrawArt(int screenX, int screenY, Art *art, int nFrame = 0,
decltype(SDL_Rect().w) srcW = 0, decltype(SDL_Rect().h) srcH = 0);
void DrawArt(int screenX, int screenY, Art *art, int nFrame = 0, Uint16 srcW = 0, Uint16 srcH = 0);
void DrawAnimatedArt(Art *art, int screenX, int screenY);

6
SourceX/DiabloUI/button.h

@ -11,11 +11,11 @@ inline void UnloadSmlButtonArt()
{
SmlButton.Unload();
}
constexpr decltype(SDL_Rect().w) SML_BUTTON_WIDTH = 110;
constexpr decltype(SDL_Rect().h) SML_BUTTON_HEIGHT = 28;
const Uint16 SML_BUTTON_WIDTH = 110;
const Uint16 SML_BUTTON_HEIGHT = 28;
constexpr UiButton MakeSmlButton(
const char *text, void (*action)(), decltype(SDL_Rect().x) x, decltype(SDL_Rect().y) y, int flags = 0)
const char *text, void (*action)(), Sint16 x, Sint16 y, int flags = 0)
{
return UiButton(
&SmlButton,

8
SourceX/DiabloUI/credits.cpp

@ -47,7 +47,7 @@ struct CachedLine {
std::size_t index;
SurfacePtr surface;
decltype(pal_surface_palette_version) palette_version;
unsigned int palette_version;
};
SurfacePtr RenderText(const char *text, SDL_Color color)
@ -197,7 +197,7 @@ public:
private:
LinesBuffer lines_;
bool finished_;
decltype(SDL_GetTicks()) ticks_begin_;
Uint32 ticks_begin_;
int prev_offset_y_;
};
@ -234,7 +234,7 @@ void CreditsRenderer::Render()
SDL_SetClipRect(GetOutputSurface(), &viewport);
// We use unscaled coordinates for calculation throughout.
decltype(SDL_Rect().y) dest_y = VIEWPORT.y - (offset_y - lines_begin * LINE_H);
Sint16 dest_y = VIEWPORT.y - (offset_y - lines_begin * LINE_H);
for (std::size_t i = 0; i < lines_.size(); ++i, dest_y += LINE_H) {
auto &line = lines_[i];
if (line.surface == NULL)
@ -244,7 +244,7 @@ void CreditsRenderer::Render()
if (line.palette_version != pal_surface_palette_version)
line = PrepareLine(line.index);
decltype(SDL_Rect().x) dest_x = PANEL_LEFT + VIEWPORT.x + 31;
Sint16 dest_x = PANEL_LEFT + VIEWPORT.x + 31;
if (CREDITS_LINES[line.index][0] == '\t')
dest_x += 40;

4
SourceX/DiabloUI/progress.cpp

@ -81,8 +81,8 @@ void progress_Render(BYTE progress)
if (msgSurface) {
SDL_Rect dsc_rect = {
static_cast<decltype(SDL_Rect().x)>(x + 50),
static_cast<decltype(SDL_Rect().y)>(y + 8),
static_cast<Sint16>(x + 50),
static_cast<Sint16>(y + 8),
msgSurface->w,
msgSurface->h
};

22
SourceX/DiabloUI/scrollbar.h

@ -6,7 +6,7 @@
namespace dvl {
extern Art ArtScrollBarBackground;
const decltype(SDL_Rect().w) SCROLLBAR_BG_WIDTH = 25;
const Uint16 SCROLLBAR_BG_WIDTH = 25;
extern Art ArtScrollBarArrow;
enum class ScrollBarArrowFrame {
@ -17,7 +17,7 @@ enum class ScrollBarArrowFrame {
};
extern Art ArtScrollBarThumb;
const decltype(SDL_Rect().w) SCROLLBAR_ARROW_WIDTH = 25;
const Uint16 SCROLLBAR_ARROW_WIDTH = 25;
inline SDL_Rect UpArrowRect(const UiScrollBar &sb)
{
@ -25,7 +25,7 @@ inline SDL_Rect UpArrowRect(const UiScrollBar &sb)
sb.rect.x,
sb.rect.y,
SCROLLBAR_ARROW_WIDTH,
static_cast<decltype(SDL_Rect().h)>(sb.arrow->h()),
static_cast<Uint16>(sb.arrow->h()),
};
}
@ -33,13 +33,13 @@ inline SDL_Rect DownArrowRect(const UiScrollBar &sb)
{
return {
sb.rect.x,
static_cast<decltype(SDL_Rect().y)>(sb.rect.y + sb.rect.h - sb.arrow->h()),
static_cast<Sint16>(sb.rect.y + sb.rect.h) - sb.arrow->h(),
SCROLLBAR_ARROW_WIDTH,
static_cast<decltype(SDL_Rect().h)>(sb.arrow->h()),
static_cast<Uint16>(sb.arrow->h()),
};
}
inline decltype(SDL_Rect().h) BarHeight(const UiScrollBar &sb)
inline Uint16 BarHeight(const UiScrollBar &sb)
{
return sb.rect.h - 2 * sb.arrow->h();
}
@ -48,7 +48,7 @@ inline SDL_Rect BarRect(const UiScrollBar &sb)
{
return {
sb.rect.x,
static_cast<decltype(SDL_Rect().y)>(sb.rect.y + sb.arrow->h()),
static_cast<Sint16>(sb.rect.y + sb.arrow->h()),
SCROLLBAR_BG_WIDTH,
BarHeight(sb),
};
@ -60,10 +60,10 @@ inline SDL_Rect ThumbRect(const UiScrollBar &sb, std::size_t selected_index, std
const int thumb_max_y = BarHeight(sb) - sb.thumb->h();
const int thumb_y = (selected_index * thumb_max_y / (num_items - 1));
return {
static_cast<decltype(SDL_Rect().x)>(sb.rect.x + THUMB_OFFSET_X),
static_cast<decltype(SDL_Rect().y)>(sb.rect.y + sb.arrow->h() + thumb_y),
static_cast<decltype(SDL_Rect().w)>(sb.rect.w - THUMB_OFFSET_X),
static_cast<decltype(SDL_Rect().h)>(sb.thumb->h()),
static_cast<Sint16>(sb.rect.x + THUMB_OFFSET_X),
static_cast<Sint16>(sb.rect.y + sb.arrow->h() + thumb_y),
static_cast<Uint16>(sb.rect.w - THUMB_OFFSET_X),
static_cast<Uint16>(sb.thumb->h()),
};
}

4
SourceX/DiabloUI/ttf_render_wrapped.cpp

@ -149,8 +149,8 @@ SDL_Surface *RenderUTF8_Solid_Wrapped(TTF_Font *font, const char *text, SDL_Colo
SDL_stack_free(str);
return NULL;
}
dest.w = static_cast<decltype(SDL_Rect().w)>(tmp->w);
dest.h = static_cast<decltype(SDL_Rect().h)>(tmp->h);
dest.w = static_cast<Uint16>(tmp->w);
dest.h = static_cast<Uint16>(tmp->h);
switch (x_align) {
case TextAlignment_END:

22
SourceX/DiabloUI/ui_item.h

@ -195,12 +195,12 @@ struct UiList : public UiItemBase {
template <std::size_t N>
constexpr UiList(
UiListItem (&items)[N],
decltype(SDL_Rect().x) x,
decltype(SDL_Rect().y) y,
decltype(SDL_Rect().w) item_width,
decltype(SDL_Rect().h) item_height,
Sint16 x,
Sint16 y,
Uint16 item_width,
Uint16 item_height,
int flags)
: UiItemBase({ x, y, item_width, static_cast<decltype(SDL_Rect().h)>(item_height * N) }, flags)
: UiItemBase({ x, y, item_width, static_cast<Uint16>(item_height * N) }, flags)
, x(x)
, y(y)
, item_width(item_width)
@ -210,19 +210,19 @@ struct UiList : public UiItemBase {
{
}
decltype(SDL_Rect().x) x;
decltype(SDL_Rect().y) y;
decltype(SDL_Rect().w) item_width;
decltype(SDL_Rect().h) item_height;
Sint16 x;
Sint16 y;
Uint16 item_width;
Uint16 item_height;
UiListItem *items;
std::size_t length;
SDL_Rect itemRect(std::size_t i) const
{
return { x, static_cast<decltype(SDL_Rect().y)>(y + item_height * i), item_width, item_height };
return { x, static_cast<Sint16>(y + item_height * i), item_width, item_height };
}
UiListItem *itemAt(decltype(SDL_Rect().y) y) const
UiListItem *itemAt(Sint16 y) const
{
ASSERT(y >= rect.y);
const std::size_t index = (y - rect.y) / item_height;

12
SourceX/storm/storm.cpp

@ -719,14 +719,14 @@ BOOL SVidPlayContinue(void)
} else {
factor = wFactor;
}
const int scaledW = SVidWidth * factor;
const int scaledH = SVidHeight * factor;
const Sint16 scaledW = SVidWidth * factor;
const Sint16 scaledH = SVidHeight * factor;
SDL_Rect pal_surface_offset = {
static_cast<decltype(SDL_Rect().x)>((output_surface->w - scaledW) / 2),
static_cast<decltype(SDL_Rect().y)>((output_surface->h - scaledH) / 2),
static_cast<decltype(SDL_Rect().w)>(scaledW),
static_cast<decltype(SDL_Rect().h)>(scaledH)
(output_surface->w - scaledW) / 2,
(output_surface->h - scaledH) / 2,
scaledW,
scaledH
};
if (factor == 1) {
if (SDL_BlitSurface(SVidSurface, NULL, output_surface, &pal_surface_offset) <= -1) {

Loading…
Cancel
Save