summaryrefslogtreecommitdiff
path: root/textscreen
diff options
context:
space:
mode:
authorSimon Howard2006-05-20 15:45:36 +0000
committerSimon Howard2006-05-20 15:45:36 +0000
commit1ba69c88d26b33fbec2af21172bb52ad214b0f2a (patch)
treeaa298f6d80f4cf05283ed16cd486f2ed05fa88a1 /textscreen
parentf761f821f95a3fbf8af1eb645d8ae9412abdc541 (diff)
downloadchocolate-doom-1ba69c88d26b33fbec2af21172bb52ad214b0f2a.tar.gz
chocolate-doom-1ba69c88d26b33fbec2af21172bb52ad214b0f2a.tar.bz2
chocolate-doom-1ba69c88d26b33fbec2af21172bb52ad214b0f2a.zip
Clip windows against the workspace boundaries.
Subversion-branch: /trunk/chocolate-doom Subversion-revision: 487
Diffstat (limited to 'textscreen')
-rw-r--r--textscreen/txt_button.c9
-rw-r--r--textscreen/txt_gui.c63
-rw-r--r--textscreen/txt_gui.h3
-rw-r--r--textscreen/txt_separator.c11
4 files changed, 60 insertions, 26 deletions
diff --git a/textscreen/txt_button.c b/textscreen/txt_button.c
index ba6f387a..4bf5b9c0 100644
--- a/textscreen/txt_button.c
+++ b/textscreen/txt_button.c
@@ -23,21 +23,18 @@ static void TXT_ButtonDrawer(txt_widget_t *widget, int w, int selected)
TXT_BGColor(TXT_COLOR_BLUE, 0);
TXT_FGColor(TXT_COLOR_BRIGHT_WHITE);
- TXT_PutChar(' ');
+ TXT_DrawString(" ");
if (selected)
{
TXT_BGColor(TXT_COLOR_GREY, 0);
}
- for (i=0; i<strlen(button->label); ++i)
- {
- TXT_PutChar(button->label[i]);
- }
+ TXT_DrawString(button->label);
for (i=strlen(button->label); i < w-2; ++i)
{
- TXT_PutChar(' ');
+ TXT_DrawString(" ");
}
}
diff --git a/textscreen/txt_gui.c b/textscreen/txt_gui.c
index d4e9650c..2c58cb9f 100644
--- a/textscreen/txt_gui.c
+++ b/textscreen/txt_gui.c
@@ -1,7 +1,7 @@
// Emacs style mode select -*- C++ -*-
//-----------------------------------------------------------------------------
//
-// $Id: txt_gui.c 486 2006-05-20 15:15:17Z fraggle $
+// $Id: txt_gui.c 487 2006-05-20 15:45:36Z fraggle $
//
// Copyright(C) 1993-1996 Id Software, Inc.
// Copyright(C) 2005 Simon Howard
@@ -30,6 +30,7 @@
#include <string.h>
+#include "txt_gui.h"
#include "txt_io.h"
#include "txt_main.h"
@@ -48,6 +49,9 @@ static int borders[4][4] =
{0xc0, 0xc4, 0xc1, 0xd9},
};
+#define VALID_X(y) ((y) >= 0 && (y) < TXT_SCREEN_W)
+#define VALID_Y(y) ((y) >= 1 && (y) < TXT_SCREEN_H - 1)
+
void TXT_DrawDesktopBackground(char *title)
{
int i;
@@ -90,8 +94,8 @@ void TXT_DrawDesktopBackground(char *title)
TXT_FGColor(TXT_COLOR_BLACK);
TXT_BGColor(TXT_COLOR_GREY, 0);
- TXT_PutChar(' ');
- TXT_Puts(title);
+ TXT_DrawString(" ");
+ TXT_DrawString(title);
}
void TXT_DrawShadow(int x, int y, int w, int h)
@@ -108,8 +112,7 @@ void TXT_DrawShadow(int x, int y, int w, int h)
for (x1=x; x1<x+w; ++x1)
{
- if (x1 >= 0 && x1 < TXT_SCREEN_W
- && y1 >= 0 && y1 < TXT_SCREEN_H)
+ if (VALID_X(x1) && VALID_Y(y1))
{
p[1] = TXT_COLOR_DARK_GREY;
}
@@ -129,8 +132,6 @@ void TXT_DrawWindowFrame(char *title, int x, int y, int w, int h)
for (y1=y; y1<y+h; ++y1)
{
- TXT_GotoXY(x, y1);
-
// Select the appropriate row and column in the borders
// array to pick the appropriate character to draw at
// this location.
@@ -147,7 +148,11 @@ void TXT_DrawWindowFrame(char *title, int x, int y, int w, int h)
bx = x1 == x ? 0 :
x1 == x + w - 1 ? 3 : 1;
- TXT_PutChar(borders[by][bx]);
+ if (VALID_X(x1) && VALID_Y(y1))
+ {
+ TXT_GotoXY(x1, y1);
+ TXT_PutChar(borders[by][bx]);
+ }
}
}
@@ -159,11 +164,11 @@ void TXT_DrawWindowFrame(char *title, int x, int y, int w, int h)
for (x1=0; x1<w-2; ++x1)
{
- TXT_PutChar(' ');
+ TXT_DrawString(" ");
}
TXT_GotoXY(x + (w - strlen(title)) / 2, y + 1);
- TXT_Puts(title);
+ TXT_DrawString(title);
// Draw the window's shadow.
@@ -179,6 +184,11 @@ void TXT_DrawSeparator(int x, int y, int w)
TXT_FGColor(TXT_COLOR_BRIGHT_CYAN);
TXT_BGColor(TXT_COLOR_BLUE, 0);
+ if (!VALID_Y(y))
+ {
+ return;
+ }
+
for (x1=x; x1<x+w; ++x1)
{
TXT_GotoXY(x1, y);
@@ -187,7 +197,38 @@ void TXT_DrawSeparator(int x, int y, int w)
x1 == x + w - 1 ? borders[2][3] :
borders[2][1];
- TXT_PutChar(c);
+ if (VALID_X(x1))
+ {
+ TXT_PutChar(c);
+ }
+ }
+}
+
+void TXT_DrawString(char *s)
+{
+ int x, y;
+ int x1;
+ char *p;
+
+ TXT_GetXY(&x, &y);
+
+ if (VALID_Y(y))
+ {
+ p = s;
+ x1 = x;
+
+ for (p = s; *p != '\0'; ++p)
+ {
+ if (VALID_X(x1))
+ {
+ TXT_GotoXY(x1, y);
+ TXT_PutChar(*p);
+ }
+
+ x1 += 1;
+ }
}
+
+ TXT_GotoXY(x + strlen(s), y);
}
diff --git a/textscreen/txt_gui.h b/textscreen/txt_gui.h
index d9c3c8e6..03c1dc3d 100644
--- a/textscreen/txt_gui.h
+++ b/textscreen/txt_gui.h
@@ -1,7 +1,7 @@
// Emacs style mode select -*- C++ -*-
//-----------------------------------------------------------------------------
//
-// $Id: txt_gui.h 483 2006-05-19 19:57:59Z fraggle $
+// $Id: txt_gui.h 487 2006-05-20 15:45:36Z fraggle $
//
// Copyright(C) 1993-1996 Id Software, Inc.
// Copyright(C) 2005 Simon Howard
@@ -45,6 +45,7 @@
void TXT_DrawDesktopBackground(char *title);
void TXT_DrawWindowFrame(char *title, int x, int y, int w, int h);
void TXT_DrawSeparator(int x, int y, int w);
+void TXT_DrawString(char *s);
#endif /* #ifndef TXT_GUI_H */
diff --git a/textscreen/txt_separator.c b/textscreen/txt_separator.c
index f378a126..b430f831 100644
--- a/textscreen/txt_separator.c
+++ b/textscreen/txt_separator.c
@@ -42,14 +42,9 @@ static void TXT_SeparatorDrawer(txt_widget_t *widget, int w, int selected)
TXT_BGColor(TXT_COLOR_BLUE, 0);
TXT_FGColor(TXT_COLOR_BRIGHT_GREEN);
- TXT_PutChar(' ');
-
- for (i=0; i<strlen(separator->label); ++i)
- {
- TXT_PutChar(separator->label[i]);
- }
-
- TXT_PutChar(' ');
+ TXT_DrawString(" ");
+ TXT_DrawString(separator->label);
+ TXT_DrawString(" ");
}
}