summaryrefslogtreecommitdiff
path: root/textscreen/txt_sdl.c
diff options
context:
space:
mode:
Diffstat (limited to 'textscreen/txt_sdl.c')
-rw-r--r--textscreen/txt_sdl.c49
1 files changed, 41 insertions, 8 deletions
diff --git a/textscreen/txt_sdl.c b/textscreen/txt_sdl.c
index cfeaf0b0..71736720 100644
--- a/textscreen/txt_sdl.c
+++ b/textscreen/txt_sdl.c
@@ -162,7 +162,7 @@ static void ChooseFont(void)
}
//
-// Initialise text mode screen
+// Initialize text mode screen
//
// Returns 1 if successful, 0 if an error occurred
//
@@ -221,7 +221,7 @@ static inline void UpdateCharacter(int x, int y)
unsigned char *p;
unsigned char *s, *s1;
int bg, fg;
- int x1, y1;
+ unsigned int x1, y1;
p = &screendata[(y * TXT_SCREEN_W + x) * 2];
character = p[0];
@@ -267,19 +267,44 @@ static inline void UpdateCharacter(int x, int y)
}
}
+static int LimitToRange(int val, int min, int max)
+{
+ if (val < min)
+ {
+ return min;
+ }
+ else if (val > max)
+ {
+ return max;
+ }
+ else
+ {
+ return val;
+ }
+}
+
void TXT_UpdateScreenArea(int x, int y, int w, int h)
{
int x1, y1;
+ int x_end;
+ int y_end;
+
+ x_end = LimitToRange(x + w, 0, TXT_SCREEN_W - 1);
+ y_end = LimitToRange(y + h, 0, TXT_SCREEN_H - 1);
+ x = LimitToRange(x, 0, TXT_SCREEN_W - 1);
+ y = LimitToRange(y, 0, TXT_SCREEN_H - 1);
- for (y1=y; y1<y+h; ++y1)
+ for (y1=y; y1<y_end; ++y1)
{
- for (x1=x; x1<x+w; ++x1)
+ for (x1=x; x1<x_end; ++x1)
{
UpdateCharacter(x1, y1);
}
}
- SDL_UpdateRect(screen, x * font->w, y * font->h, w * font->w, h * font->h);
+ SDL_UpdateRect(screen,
+ x * font->w, y * font->h,
+ (x_end - x) * font->w, (y_end - y) * font->h);
}
void TXT_UpdateScreen(void)
@@ -289,7 +314,11 @@ void TXT_UpdateScreen(void)
void TXT_GetMousePosition(int *x, int *y)
{
+#if SDL_VERSION_ATLEAST(1, 3, 0)
+ SDL_GetMouseState(0, x, y);
+#else
SDL_GetMouseState(x, y);
+#endif
*x /= font->w;
*y /= font->h;
@@ -328,7 +357,9 @@ static int TranslateKey(SDL_keysym *sym)
case SDLK_PAUSE: return KEY_PAUSE;
+#if !SDL_VERSION_ATLEAST(1, 3, 0)
case SDLK_EQUALS: return KEY_EQUALS;
+#endif
case SDLK_LSHIFT:
case SDLK_RSHIFT:
@@ -339,9 +370,11 @@ static int TranslateKey(SDL_keysym *sym)
return KEY_RCTRL;
case SDLK_LALT:
- case SDLK_LMETA:
case SDLK_RALT:
+#if !SDL_VERSION_ATLEAST(1, 3, 0)
+ case SDLK_LMETA:
case SDLK_RMETA:
+#endif
return KEY_RALT;
case SDLK_CAPSLOCK: return KEY_CAPSLOCK;
@@ -462,7 +495,7 @@ signed int TXT_GetChar(void)
return -1;
}
-static char *SpecialKeyName(int key)
+static const char *SpecialKeyName(int key)
{
switch (key)
{
@@ -528,7 +561,7 @@ static char *SpecialKeyName(int key)
void TXT_GetKeyDescription(int key, char *buf)
{
- char *keyname;
+ const char *keyname;
keyname = SpecialKeyName(key);