mirror of
https://github.com/scummvm/scummvm.git
synced 2026-06-20 05:45:29 +00:00
GLK: FROTZ: Move remainder of font/style logic into Window
This commit is contained in:
@@ -32,12 +32,11 @@ namespace Glk {
|
||||
namespace Frotz {
|
||||
|
||||
GlkInterface::GlkInterface(OSystem *syst, const GlkGameDescription &gameDesc) :
|
||||
GlkAPI(syst, gameDesc),
|
||||
_pics(nullptr), oldstyle(0), curstyle(0), curr_font(1), prev_font(1), temp_font(0),
|
||||
curr_status_ht(0), mach_status_ht(0), gos_status(nullptr), gos_linepending(0), gos_linebuf(nullptr),
|
||||
gos_linewin(nullptr), gos_channel(nullptr), mwin(0), mouse_x(0), mouse_y(0), fixforced(0), menu_selected(0),
|
||||
enable_wrapping(false), enable_scripting(false), enable_scrolling(false), enable_buffering(false),
|
||||
next_sample(0), next_volume(0), _soundLocked(false), _soundPlaying(false), _reverseVideo(false) {
|
||||
GlkAPI(syst, gameDesc), _pics(nullptr), curr_status_ht(0), mach_status_ht(0), gos_status(nullptr),
|
||||
gos_linepending(0), gos_linebuf(nullptr), gos_linewin(nullptr), gos_channel(nullptr), mwin(0),
|
||||
mouse_x(0), mouse_y(0), fixforced(0), menu_selected(0), enable_wrapping(false), enable_scripting(false),
|
||||
enable_scrolling(false), enable_buffering(false), next_sample(0), next_volume(0), _soundLocked(false),
|
||||
_soundPlaying(false), _reverseVideo(false) {
|
||||
Common::fill(&statusline[0], &statusline[256], '\0');
|
||||
Common::fill(&zcolors[0], &zcolors[zcolor_NUMCOLORS], 0);
|
||||
}
|
||||
|
||||
@@ -62,14 +62,8 @@ public:
|
||||
Pics *_pics;
|
||||
zchar statusline[256];
|
||||
uint zcolors[zcolor_NUMCOLORS];
|
||||
int oldstyle;
|
||||
int curstyle;
|
||||
int fixforced;
|
||||
|
||||
int curr_font;
|
||||
int prev_font;
|
||||
int temp_font;
|
||||
|
||||
int curr_status_ht;
|
||||
int mach_status_ht;
|
||||
|
||||
|
||||
@@ -198,11 +198,6 @@ void Processor::initialize() {
|
||||
op0_opcodes[9] = &Processor::z_catch;
|
||||
op1_opcodes[15] = &Processor::z_call_n;
|
||||
}
|
||||
|
||||
PropFontInfo &pi = g_conf->_propInfo;
|
||||
_quotes = pi._quotes;
|
||||
_dashes = pi._quotes;
|
||||
_spaces = pi._spaces;
|
||||
}
|
||||
|
||||
void Processor::load_operand(zbyte type) {
|
||||
|
||||
@@ -95,10 +95,6 @@ private:
|
||||
bool istream_replay;
|
||||
bool message;
|
||||
Common::FixedStack<Redirect, MAX_NESTING> _redirect;
|
||||
|
||||
int _quotes;
|
||||
int _dashes;
|
||||
int _spaces;
|
||||
protected:
|
||||
/**
|
||||
* \defgroup General support methods
|
||||
|
||||
@@ -29,20 +29,22 @@ namespace Glk {
|
||||
namespace Frotz {
|
||||
|
||||
void Processor::screen_mssg_on() {
|
||||
if (_wp.currWin() == _wp._lower) {
|
||||
oldstyle = curstyle;
|
||||
Window &w = _wp.currWin();
|
||||
|
||||
if (w == _wp._lower) {
|
||||
w._oldStyle = w._currStyle;
|
||||
glk_set_style(style_Preformatted);
|
||||
glk_put_string("\n ");
|
||||
}
|
||||
}
|
||||
|
||||
void Processor::screen_mssg_off() {
|
||||
if (_wp.currWin() == _wp._lower) {
|
||||
Window &w = _wp.currWin();
|
||||
|
||||
if (w == _wp._lower) {
|
||||
glk_put_char('\n');
|
||||
zargs[0] = 0;
|
||||
z_set_text_style();
|
||||
zargs[0] = oldstyle;
|
||||
z_set_text_style();
|
||||
w.setStyle(0);
|
||||
w.setStyle(w._oldStyle);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -101,7 +103,8 @@ uint32 Processor::zchar_to_unicode_rune(zchar c) {
|
||||
}
|
||||
|
||||
void Processor::screen_char(zchar c) {
|
||||
if (gos_linepending && (_wp.currWin() == gos_linewin)) {
|
||||
Window &w = _wp.currWin();
|
||||
if (gos_linepending && (w == gos_linewin)) {
|
||||
gos_cancel_pending_line();
|
||||
if (_wp.currWin() == _wp._upper) {
|
||||
_wp._upper.setCursor(Point(1, _wp._upper[Y_CURSOR] + 1));
|
||||
@@ -112,14 +115,12 @@ void Processor::screen_char(zchar c) {
|
||||
|
||||
// check fixed flag in header, game can change it at whim
|
||||
int forcefix = ((h_flags & FIXED_FONT_FLAG) != 0);
|
||||
int curfix = ((curstyle & FIXED_WIDTH_STYLE) != 0);
|
||||
int curfix = ((w._currStyle & FIXED_WIDTH_STYLE) != 0);
|
||||
if (forcefix && !curfix) {
|
||||
zargs[0] = 0xf000; // tickle tickle!
|
||||
z_set_text_style();
|
||||
w.setStyle();
|
||||
fixforced = true;
|
||||
} else if (!forcefix && fixforced) {
|
||||
zargs[0] = 0xf000; // tickle tickle!
|
||||
z_set_text_style();
|
||||
w.setStyle();
|
||||
fixforced = false;
|
||||
}
|
||||
|
||||
@@ -156,11 +157,11 @@ void Processor::screen_char(zchar c) {
|
||||
curx++;
|
||||
}
|
||||
}
|
||||
} else if (_wp.currWin() == _wp._lower) {
|
||||
} else if (w == _wp._lower) {
|
||||
if (c == ZC_RETURN)
|
||||
glk_put_char('\n');
|
||||
else {
|
||||
if (curr_font == GRAPHICS_FONT) {
|
||||
if (w._currFont == GRAPHICS_FONT) {
|
||||
uint32 runic_char = zchar_to_unicode_rune(c);
|
||||
if (runic_char != 0) {
|
||||
glk_set_style(style_User2);
|
||||
@@ -365,46 +366,7 @@ void Processor::z_set_colour() {
|
||||
void Processor::z_set_font() {
|
||||
zword font = zargs[0];
|
||||
|
||||
switch (font) {
|
||||
case PREVIOUS_FONT:
|
||||
// previous font
|
||||
temp_font = curr_font;
|
||||
curr_font = prev_font;
|
||||
prev_font = temp_font;
|
||||
zargs[0] = 0xf000; // tickle tickle!
|
||||
z_set_text_style();
|
||||
store(curr_font);
|
||||
break;
|
||||
|
||||
case TEXT_FONT:
|
||||
case GRAPHICS_FONT:
|
||||
case FIXED_WIDTH_FONT:
|
||||
prev_font = curr_font;
|
||||
curr_font = font;
|
||||
zargs[0] = 0xf000; // tickle tickle!
|
||||
z_set_text_style();
|
||||
store(prev_font);
|
||||
break;
|
||||
|
||||
case PICTURE_FONT: // picture font, undefined per 1.1
|
||||
default: // unavailable
|
||||
store(0);
|
||||
break;
|
||||
}
|
||||
|
||||
PropFontInfo &pi = g_conf->_propInfo;
|
||||
if (curr_font == GRAPHICS_FONT) {
|
||||
_quotes = pi._quotes;
|
||||
_dashes = pi._dashes;
|
||||
_spaces = pi._spaces;
|
||||
pi._quotes = 0;
|
||||
pi._dashes = 0;
|
||||
pi._spaces = 0;
|
||||
} else {
|
||||
pi._quotes = _quotes;
|
||||
pi._dashes = _dashes;
|
||||
pi._spaces = _spaces;
|
||||
}
|
||||
store(_wp.currWin().setFont(font));
|
||||
}
|
||||
|
||||
void Processor::z_set_cursor() {
|
||||
@@ -424,23 +386,7 @@ void Processor::z_set_cursor() {
|
||||
}
|
||||
|
||||
void Processor::z_set_text_style() {
|
||||
int style;
|
||||
|
||||
if (zargs[0] == 0)
|
||||
curstyle = 0;
|
||||
else if (zargs[0] != 0xf000)
|
||||
// not tickle time
|
||||
curstyle |= zargs[0];
|
||||
|
||||
if (h_flags & FIXED_FONT_FLAG || curr_font == FIXED_WIDTH_FONT || curr_font == GRAPHICS_FONT)
|
||||
style = curstyle | FIXED_WIDTH_STYLE;
|
||||
else
|
||||
style = curstyle;
|
||||
|
||||
if (gos_linepending && _wp.currWin() == gos_linewin)
|
||||
return;
|
||||
|
||||
_wp[_wp._cwin].setStyle(style);
|
||||
_wp[_wp._cwin].setStyle(zargs[0]);
|
||||
}
|
||||
|
||||
void Processor::z_set_window() {
|
||||
|
||||
@@ -75,6 +75,12 @@ void Windows::setup(bool isVersion6) {
|
||||
w._index = idx;
|
||||
w[FONT_NUMBER] = TEXT_FONT;
|
||||
w[FONT_SIZE] = (mi._cellH << 8) | mi._cellW;
|
||||
|
||||
|
||||
PropFontInfo &pi = g_conf->_propInfo;
|
||||
w._quotes = pi._quotes;
|
||||
w._dashes = pi._quotes;
|
||||
w._spaces = pi._spaces;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,7 +93,8 @@ void Windows::setWindow(int win) {
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
Window::Window() : _windows(nullptr), _win(nullptr) {
|
||||
Window::Window() : _windows(nullptr), _win(nullptr), _quotes(0), _dashes(0), _spaces(0),
|
||||
_currFont(TEXT_FONT), _prevFont(TEXT_FONT), _tempFont(TEXT_FONT), _currStyle(0), _oldStyle(0) {
|
||||
Common::fill(_properties, _properties + TRUE_BG_COLOR + 1, 0);
|
||||
_properties[Y_POS] = _properties[X_POS] = 1;
|
||||
_properties[Y_CURSOR] = _properties[X_CURSOR] = 1;
|
||||
@@ -184,7 +191,72 @@ void Window::updateColors(uint fore, uint back) {
|
||||
updateColors();
|
||||
}
|
||||
|
||||
void Window::setStyle(uint style) {
|
||||
uint Window::setFont(uint font) {
|
||||
int result = 0;
|
||||
|
||||
switch (font) {
|
||||
case PREVIOUS_FONT:
|
||||
// previous font
|
||||
_tempFont = _currFont;
|
||||
_currFont = _prevFont;
|
||||
_prevFont = _tempFont;
|
||||
setStyle();
|
||||
result = _currFont;
|
||||
break;
|
||||
|
||||
case TEXT_FONT:
|
||||
case GRAPHICS_FONT:
|
||||
case FIXED_WIDTH_FONT:
|
||||
_prevFont = _currFont;
|
||||
_currFont = font;
|
||||
setStyle();
|
||||
result = _prevFont;
|
||||
break;
|
||||
|
||||
case PICTURE_FONT: // picture font, undefined per 1.1
|
||||
default: // unavailable
|
||||
result = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
PropFontInfo &pi = g_conf->_propInfo;
|
||||
if (_currFont == GRAPHICS_FONT) {
|
||||
_quotes = pi._quotes;
|
||||
_dashes = pi._dashes;
|
||||
_spaces = pi._spaces;
|
||||
pi._quotes = 0;
|
||||
pi._dashes = 0;
|
||||
pi._spaces = 0;
|
||||
} else {
|
||||
pi._quotes = _quotes;
|
||||
pi._dashes = _dashes;
|
||||
pi._spaces = _spaces;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void Window::setStyle(int style) {
|
||||
if (style == 0)
|
||||
_currStyle = 0;
|
||||
else if (style != -1)
|
||||
// not tickle time
|
||||
_currStyle |= style;
|
||||
|
||||
if (g_vm->h_flags & FIXED_FONT_FLAG || _currFont == FIXED_WIDTH_FONT || _currFont == GRAPHICS_FONT)
|
||||
style = _currStyle | FIXED_WIDTH_STYLE;
|
||||
else
|
||||
style = _currStyle;
|
||||
|
||||
if (g_vm->gos_linepending && _windows->currWin() == g_vm->gos_linewin)
|
||||
return;
|
||||
|
||||
updateStyle();
|
||||
}
|
||||
|
||||
void Window::updateStyle() {
|
||||
uint style = _currStyle;
|
||||
|
||||
/*
|
||||
if (style & REVERSE_STYLE) {
|
||||
os_set_reverse_video(true);
|
||||
@@ -194,7 +266,7 @@ void Window::setStyle(uint style) {
|
||||
createGlkWindow();
|
||||
|
||||
if (style & FIXED_WIDTH_STYLE) {
|
||||
if (g_vm->curr_font == GRAPHICS_FONT)
|
||||
if (_currFont == GRAPHICS_FONT)
|
||||
_win->_stream->setStyle(style_User1); // character graphics
|
||||
else if (style & BOLDFACE_STYLE && style & EMPHASIS_STYLE)
|
||||
_win->_stream->setStyle(style_BlockQuote); // monoz
|
||||
@@ -216,7 +288,7 @@ void Window::setStyle(uint style) {
|
||||
}
|
||||
|
||||
/*
|
||||
if (curstyle == 0) {
|
||||
if (_currStyle == 0) {
|
||||
os_set_reverse_video(false);
|
||||
}
|
||||
*/
|
||||
|
||||
@@ -105,6 +105,20 @@ private:
|
||||
* Creates a new Glk window to attach to the window
|
||||
*/
|
||||
void createGlkWindow();
|
||||
|
||||
/**
|
||||
* Updates the current font/style
|
||||
*/
|
||||
void updateStyle();
|
||||
public:
|
||||
int _currFont;
|
||||
int _prevFont;
|
||||
int _tempFont;
|
||||
int _currStyle;
|
||||
int _oldStyle;
|
||||
int _quotes;
|
||||
int _dashes;
|
||||
int _spaces;
|
||||
public:
|
||||
/**
|
||||
* Constructor
|
||||
@@ -169,10 +183,15 @@ public:
|
||||
*/
|
||||
void updateColors(uint fore, uint back);
|
||||
|
||||
/**
|
||||
* Set the font
|
||||
*/
|
||||
uint setFont(uint font);
|
||||
|
||||
/**
|
||||
* Set the textstyle
|
||||
*/
|
||||
void setStyle(uint style);
|
||||
void setStyle(int style = -1);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user