265 lines
6.7 KiB
C
265 lines
6.7 KiB
C
|
/* Emacs style mode select -*- C++ -*-
|
||
|
*-----------------------------------------------------------------------------
|
||
|
*
|
||
|
*
|
||
|
* PrBoom a Doom port merged with LxDoom and LSDLDoom
|
||
|
* based on BOOM, a modified and improved DOOM engine
|
||
|
* Copyright (C) 1999 by
|
||
|
* id Software, Chi Hoang, Lee Killough, Jim Flynn, Rand Phares, Ty Halderman
|
||
|
* Copyright (C) 1999-2000 by
|
||
|
* Jess Haas, Nicolas Kalkhof, Colin Phipps, Florian Schulze
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or
|
||
|
* modify it under the terms of the GNU General Public License
|
||
|
* as published by the Free Software Foundation; either version 2
|
||
|
* of the License, or (at your option) any later version.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* along with this program; if not, write to the Free Software
|
||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||
|
* 02111-1307, USA.
|
||
|
*
|
||
|
* DESCRIPTION: none
|
||
|
*
|
||
|
*-----------------------------------------------------------------------------*/
|
||
|
|
||
|
#ifndef __HULIB__
|
||
|
#define __HULIB__
|
||
|
|
||
|
// We are referring to patches.
|
||
|
#include "r_defs.h"
|
||
|
#include "v_video.h" //jff 2/16/52 include color range defs
|
||
|
|
||
|
|
||
|
/* background and foreground screen numbers
|
||
|
* different from other modules. */
|
||
|
#define BG 1
|
||
|
#define FG 0
|
||
|
|
||
|
/* font stuff
|
||
|
* #define HU_CHARERASE KEYD_BACKSPACE / not used / phares
|
||
|
*/
|
||
|
|
||
|
#define HU_MAXLINES 4
|
||
|
#define HU_MAXLINELENGTH 80
|
||
|
#define HU_REFRESHSPACING 8 /*jff 2/26/98 space lines in text refresh widget*/
|
||
|
/*jff 2/26/98 maximum number of messages allowed in refresh list */
|
||
|
#define HU_MAXMESSAGES 16
|
||
|
|
||
|
/*
|
||
|
* Typedefs of widgets
|
||
|
*/
|
||
|
|
||
|
/* Text Line widget
|
||
|
* (parent of Scrolling Text and Input Text widgets) */
|
||
|
typedef struct
|
||
|
{
|
||
|
// left-justified position of scrolling text window
|
||
|
int x;
|
||
|
int y;
|
||
|
|
||
|
const patchnum_t* f; // font
|
||
|
int sc; // start character
|
||
|
//const char *cr; //jff 2/16/52 output color range
|
||
|
// Proff - Made this an int again. Needed for OpenGL
|
||
|
int cm; //jff 2/16/52 output color range
|
||
|
|
||
|
// killough 1/23/98: Support multiple lines:
|
||
|
#define MAXLINES 25
|
||
|
|
||
|
int linelen;
|
||
|
char l[HU_MAXLINELENGTH*MAXLINES+1]; // line of text
|
||
|
int len; // current line length
|
||
|
|
||
|
// whether this line needs to be udpated
|
||
|
int needsupdate;
|
||
|
|
||
|
} hu_textline_t;
|
||
|
|
||
|
|
||
|
|
||
|
// Scrolling Text window widget
|
||
|
// (child of Text Line widget)
|
||
|
typedef struct
|
||
|
{
|
||
|
hu_textline_t l[HU_MAXLINES]; // text lines to draw
|
||
|
int h; // height in lines
|
||
|
int cl; // current line number
|
||
|
|
||
|
// pointer to boolean stating whether to update window
|
||
|
boolean* on;
|
||
|
boolean laston; // last value of *->on.
|
||
|
|
||
|
} hu_stext_t;
|
||
|
|
||
|
//jff 2/26/98 new widget to display last hud_msg_lines of messages
|
||
|
// Message refresh window widget
|
||
|
typedef struct
|
||
|
{
|
||
|
hu_textline_t l[HU_MAXMESSAGES]; // text lines to draw
|
||
|
int nl; // height in lines
|
||
|
int nr; // total height in rows
|
||
|
int cl; // current line number
|
||
|
|
||
|
int x,y,w,h; // window position and size
|
||
|
const patchnum_t *bg; // patches for background
|
||
|
|
||
|
// pointer to boolean stating whether to update window
|
||
|
boolean* on;
|
||
|
boolean laston; // last value of *->on.
|
||
|
|
||
|
} hu_mtext_t;
|
||
|
|
||
|
|
||
|
|
||
|
// Input Text Line widget
|
||
|
// (child of Text Line widget)
|
||
|
typedef struct
|
||
|
{
|
||
|
hu_textline_t l; // text line to input on
|
||
|
|
||
|
// left margin past which I am not to delete characters
|
||
|
int lm;
|
||
|
|
||
|
// pointer to boolean stating whether to update window
|
||
|
boolean* on;
|
||
|
boolean laston; // last value of *->on;
|
||
|
|
||
|
} hu_itext_t;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Widget creation, access, and update routines
|
||
|
//
|
||
|
|
||
|
// initializes heads-up widget library
|
||
|
void HUlib_init(void);
|
||
|
|
||
|
//
|
||
|
// textline code
|
||
|
//
|
||
|
|
||
|
// clear a line of text
|
||
|
void HUlib_clearTextLine(hu_textline_t *t);
|
||
|
|
||
|
void HUlib_initTextLine
|
||
|
(
|
||
|
hu_textline_t *t,
|
||
|
int x,
|
||
|
int y,
|
||
|
const patchnum_t *f,
|
||
|
int sc,
|
||
|
int cm //jff 2/16/98 add color range parameter
|
||
|
);
|
||
|
|
||
|
// returns success
|
||
|
boolean HUlib_addCharToTextLine(hu_textline_t *t, char ch);
|
||
|
|
||
|
// returns success
|
||
|
boolean HUlib_delCharFromTextLine(hu_textline_t *t);
|
||
|
|
||
|
// draws tline
|
||
|
void HUlib_drawTextLine(hu_textline_t *l, boolean drawcursor);
|
||
|
|
||
|
// erases text line
|
||
|
void HUlib_eraseTextLine(hu_textline_t *l);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Scrolling Text window widget routines
|
||
|
//
|
||
|
|
||
|
// initialize an stext widget
|
||
|
void HUlib_initSText
|
||
|
( hu_stext_t* s,
|
||
|
int x,
|
||
|
int y,
|
||
|
int h,
|
||
|
const patchnum_t* font,
|
||
|
int startchar,
|
||
|
int cm, //jff 2/16/98 add color range parameter
|
||
|
boolean* on );
|
||
|
|
||
|
// add a new line
|
||
|
void HUlib_addLineToSText(hu_stext_t* s);
|
||
|
|
||
|
// add a text message to an stext widget
|
||
|
void HUlib_addMessageToSText(hu_stext_t* s, const char* prefix, const char* msg);
|
||
|
|
||
|
// draws stext
|
||
|
void HUlib_drawSText(hu_stext_t* s);
|
||
|
|
||
|
// erases all stext lines
|
||
|
void HUlib_eraseSText(hu_stext_t* s);
|
||
|
|
||
|
//jff 2/26/98 message refresh widget
|
||
|
// initialize refresh text widget
|
||
|
void HUlib_initMText(hu_mtext_t *m, int x, int y, int w, int h, const patchnum_t* font,
|
||
|
int startchar, int cm, const patchnum_t* bgfont, boolean *on);
|
||
|
|
||
|
//jff 2/26/98 message refresh widget
|
||
|
// add a text line to refresh text widget
|
||
|
void HUlib_addLineToMText( hu_mtext_t* m );
|
||
|
|
||
|
//jff 2/26/98 message refresh widget
|
||
|
// add a text message to refresh text widget
|
||
|
void HUlib_addMessageToMText(hu_mtext_t* m, const char* prefix, const char* msg);
|
||
|
|
||
|
//jff 2/26/98 new routine to display a background on which
|
||
|
// the list of last hud_msg_lines are displayed
|
||
|
void HUlib_drawMBg
|
||
|
( int x,
|
||
|
int y,
|
||
|
int w,
|
||
|
int h,
|
||
|
const patchnum_t* bgp
|
||
|
);
|
||
|
|
||
|
//jff 2/26/98 message refresh widget
|
||
|
// draws mtext
|
||
|
void HUlib_drawMText(hu_mtext_t* m);
|
||
|
|
||
|
//jff 4/28/98 erases behind message list
|
||
|
void HUlib_eraseMText(hu_mtext_t* m);
|
||
|
|
||
|
// Input Text Line widget routines
|
||
|
void HUlib_initIText
|
||
|
( hu_itext_t* it,
|
||
|
int x,
|
||
|
int y,
|
||
|
const patchnum_t* font,
|
||
|
int startchar,
|
||
|
int cm, //jff 2/16/98 add color range parameter
|
||
|
boolean* on );
|
||
|
|
||
|
// enforces left margin
|
||
|
void HUlib_delCharFromIText(hu_itext_t* it);
|
||
|
|
||
|
// enforces left margin
|
||
|
void HUlib_eraseLineFromIText(hu_itext_t* it);
|
||
|
|
||
|
// resets line and left margin
|
||
|
void HUlib_resetIText(hu_itext_t* it);
|
||
|
|
||
|
// left of left-margin
|
||
|
void HUlib_addPrefixToIText
|
||
|
( hu_itext_t* it,
|
||
|
char* str );
|
||
|
|
||
|
// whether eaten
|
||
|
boolean HUlib_keyInIText
|
||
|
( hu_itext_t* it,
|
||
|
unsigned char ch );
|
||
|
|
||
|
void HUlib_drawIText(hu_itext_t* it);
|
||
|
|
||
|
// erases all itext lines
|
||
|
void HUlib_eraseIText(hu_itext_t* it);
|
||
|
|
||
|
#endif
|