mirror of https://github.com/stella-emu/stella.git
Added ScummVM font handling code. The font is now proportional,
which means more text can fit onscreen. git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@381 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
b0ec277a94
commit
24a81a0d11
|
@ -13,7 +13,7 @@
|
||||||
## See the file "license" for information on usage and redistribution of
|
## See the file "license" for information on usage and redistribution of
|
||||||
## this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
## this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
##
|
##
|
||||||
## $Id: makefile,v 1.64 2005-03-12 01:47:14 stephena Exp $
|
## $Id: makefile,v 1.65 2005-03-13 03:38:39 stephena Exp $
|
||||||
##============================================================================
|
##============================================================================
|
||||||
|
|
||||||
##============================================================================
|
##============================================================================
|
||||||
|
@ -153,7 +153,7 @@ CORE_OBJS = Booster.o Cart.o Cart2K.o Cart3F.o Cart4K.o CartAR.o CartDPC.o \
|
||||||
Event.o Joystick.o Keyboard.o M6532.o MD5.o MediaSrc.o Paddles.o \
|
Event.o Joystick.o Keyboard.o M6532.o MD5.o MediaSrc.o Paddles.o \
|
||||||
Props.o PropsSet.o Random.o Sound.o Switches.o Settings.o TIA.o \
|
Props.o PropsSet.o Random.o Sound.o Switches.o Settings.o TIA.o \
|
||||||
Serializer.o Deserializer.o TIASound.o EventHandler.o FrameBuffer.o \
|
Serializer.o Deserializer.o TIASound.o EventHandler.o FrameBuffer.o \
|
||||||
OSystem.o Menu.o Widget.o Dialog.o OptionsDialog.o\
|
OSystem.o StellaFont.o Menu.o Widget.o Dialog.o OptionsDialog.o\
|
||||||
$(M6502_OBJS)
|
$(M6502_OBJS)
|
||||||
|
|
||||||
stella: $(CORE_OBJS) $(OBJS)
|
stella: $(CORE_OBJS) $(OBJS)
|
||||||
|
@ -352,6 +352,9 @@ NullDev.o: $(CORE)/m6502/src/NullDev.cxx $(CORE)/m6502/src/NullDev.hxx
|
||||||
System.o: $(CORE)/m6502/src/System.cxx $(CORE)/m6502/src/System.hxx
|
System.o: $(CORE)/m6502/src/System.cxx $(CORE)/m6502/src/System.hxx
|
||||||
$(CXX) -c $(FLAGS) $(OPTIONS) $(CORE)/m6502/src/System.cxx
|
$(CXX) -c $(FLAGS) $(OPTIONS) $(CORE)/m6502/src/System.cxx
|
||||||
|
|
||||||
|
StellaFont.o: $(GUI)/StellaFont.cxx $(GUI)/StellaFont.hxx
|
||||||
|
$(CXX) -c $(FLAGS) $(OPTIONS) $(LDFLAGS) $(GUI)/StellaFont.cxx
|
||||||
|
|
||||||
Menu.o: $(GUI)/Menu.cxx $(GUI)/Menu.hxx
|
Menu.o: $(GUI)/Menu.cxx $(GUI)/Menu.hxx
|
||||||
$(CXX) -c $(FLAGS) $(OPTIONS) $(LDFLAGS) $(GUI)/Menu.cxx
|
$(CXX) -c $(FLAGS) $(OPTIONS) $(LDFLAGS) $(GUI)/Menu.cxx
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" for information on usage and redistribution of
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//
|
//
|
||||||
// $Id: FrameBufferSoft.cxx,v 1.10 2005-03-12 01:47:14 stephena Exp $
|
// $Id: FrameBufferSoft.cxx,v 1.11 2005-03-13 03:38:39 stephena Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
|
@ -26,6 +26,8 @@
|
||||||
#include "MediaSrc.hxx"
|
#include "MediaSrc.hxx"
|
||||||
#include "Settings.hxx"
|
#include "Settings.hxx"
|
||||||
#include "OSystem.hxx"
|
#include "OSystem.hxx"
|
||||||
|
#include "StellaFont.hxx"
|
||||||
|
#include "GuiUtils.hxx"
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
FrameBufferSoft::FrameBufferSoft(OSystem* osystem)
|
FrameBufferSoft::FrameBufferSoft(OSystem* osystem)
|
||||||
|
@ -71,6 +73,11 @@ bool FrameBufferSoft::initSubsystem()
|
||||||
if(myOSystem->settings().getBool("showinfo"))
|
if(myOSystem->settings().getBool("showinfo"))
|
||||||
cout << "Video rendering: Software mode" << endl << endl;
|
cout << "Video rendering: Software mode" << endl << endl;
|
||||||
|
|
||||||
|
// Precompute the GUI palette
|
||||||
|
// We abuse the concept of 'enum' by referring directly to the integer values
|
||||||
|
for(uInt8 i = 0; i < 5; i++)
|
||||||
|
myGUIPalette[i] = mapRGB(myGUIColors[i][0], myGUIColors[i][1], myGUIColors[i][2]);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,51 +260,7 @@ void FrameBufferSoft::drawMediaSource()
|
||||||
theRedrawEntireFrameIndicator = false;
|
theRedrawEntireFrameIndicator = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
/*
|
||||||
void FrameBufferSoft::drawBoundedBox(uInt32 x, uInt32 y, uInt32 w, uInt32 h)
|
|
||||||
{
|
|
||||||
SDL_Rect tmp;
|
|
||||||
|
|
||||||
// Scale all values to the current window size
|
|
||||||
x *= theZoomLevel;
|
|
||||||
y *= theZoomLevel;
|
|
||||||
w *= theZoomLevel;
|
|
||||||
h *= theZoomLevel;
|
|
||||||
|
|
||||||
// First draw the underlying box
|
|
||||||
tmp.x = x;
|
|
||||||
tmp.y = y;
|
|
||||||
tmp.w = w;
|
|
||||||
tmp.h = h;
|
|
||||||
myRectList->add(&tmp);
|
|
||||||
SDL_FillRect(myScreen, &tmp, myPalette[myBGColor]);
|
|
||||||
|
|
||||||
// Now draw the bounding sides
|
|
||||||
tmp.x = x;
|
|
||||||
tmp.y = y;
|
|
||||||
tmp.w = w;
|
|
||||||
tmp.h = theZoomLevel;
|
|
||||||
SDL_FillRect(myScreen, &tmp, myPalette[myFGColor]); // top
|
|
||||||
|
|
||||||
tmp.x = x;
|
|
||||||
tmp.y = y + h - theZoomLevel;
|
|
||||||
tmp.w = w;
|
|
||||||
tmp.h = theZoomLevel;
|
|
||||||
SDL_FillRect(myScreen, &tmp, myPalette[myFGColor]); // bottom
|
|
||||||
|
|
||||||
tmp.x = x;
|
|
||||||
tmp.y = y;
|
|
||||||
tmp.w = theZoomLevel;
|
|
||||||
tmp.h = h;
|
|
||||||
SDL_FillRect(myScreen, &tmp, myPalette[myFGColor]); // left
|
|
||||||
|
|
||||||
tmp.x = x + w - theZoomLevel;
|
|
||||||
tmp.y = y;
|
|
||||||
tmp.w = theZoomLevel;
|
|
||||||
tmp.h = h;
|
|
||||||
SDL_FillRect(myScreen, &tmp, myPalette[myFGColor]); // right
|
|
||||||
}
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FrameBufferSoft::drawText(uInt32 xorig, uInt32 yorig, const string& message)
|
void FrameBufferSoft::drawText(uInt32 xorig, uInt32 yorig, const string& message)
|
||||||
{
|
{
|
||||||
|
@ -316,7 +279,7 @@ void FrameBufferSoft::drawText(uInt32 xorig, uInt32 yorig, const string& message
|
||||||
tmp.x = ((x<<3) + z + xorig) * theZoomLevel;
|
tmp.x = ((x<<3) + z + xorig) * theZoomLevel;
|
||||||
tmp.y = (y + yorig) * theZoomLevel;
|
tmp.y = (y + yorig) * theZoomLevel;
|
||||||
tmp.w = tmp.h = theZoomLevel;
|
tmp.w = tmp.h = theZoomLevel;
|
||||||
SDL_FillRect(myScreen, &tmp, myPalette[myFGColor]);
|
SDL_FillRect(myScreen, &tmp, myPalette[10]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -340,11 +303,12 @@ void FrameBufferSoft::drawChar(uInt32 xorig, uInt32 yorig, uInt32 c)
|
||||||
tmp.x = (z + xorig) * theZoomLevel;
|
tmp.x = (z + xorig) * theZoomLevel;
|
||||||
tmp.y = (y + yorig) * theZoomLevel;
|
tmp.y = (y + yorig) * theZoomLevel;
|
||||||
tmp.w = tmp.h = theZoomLevel;
|
tmp.w = tmp.h = theZoomLevel;
|
||||||
SDL_FillRect(myScreen, &tmp, myPalette[myFGColor]);
|
SDL_FillRect(myScreen, &tmp, myPalette[10]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FrameBufferSoft::preFrameUpdate()
|
void FrameBufferSoft::preFrameUpdate()
|
||||||
|
@ -420,7 +384,7 @@ void FrameBufferSoft::hLine(uInt32 x, uInt32 y, uInt32 x2, OverlayColor color)
|
||||||
tmp.y = y * theZoomLevel;
|
tmp.y = y * theZoomLevel;
|
||||||
tmp.w = (x2 - x + 1) * theZoomLevel;
|
tmp.w = (x2 - x + 1) * theZoomLevel;
|
||||||
tmp.h = theZoomLevel;
|
tmp.h = theZoomLevel;
|
||||||
SDL_FillRect(myScreen, &tmp, myPalette[myFGColor]); // top
|
SDL_FillRect(myScreen, &tmp, myGUIPalette[color]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -433,7 +397,7 @@ void FrameBufferSoft::vLine(uInt32 x, uInt32 y, uInt32 y2, OverlayColor color)
|
||||||
tmp.y = y * theZoomLevel;
|
tmp.y = y * theZoomLevel;
|
||||||
tmp.w = theZoomLevel;
|
tmp.w = theZoomLevel;
|
||||||
tmp.h = (y2 - y + 1) * theZoomLevel;
|
tmp.h = (y2 - y + 1) * theZoomLevel;
|
||||||
SDL_FillRect(myScreen, &tmp, myPalette[myFGColor]); // left
|
SDL_FillRect(myScreen, &tmp, myGUIPalette[color]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -449,7 +413,7 @@ void FrameBufferSoft::blendRect(int x, int y, int w, int h,
|
||||||
tmp.w = w * theZoomLevel;
|
tmp.w = w * theZoomLevel;
|
||||||
tmp.h = h * theZoomLevel;
|
tmp.h = h * theZoomLevel;
|
||||||
myRectList->add(&tmp);
|
myRectList->add(&tmp);
|
||||||
SDL_FillRect(myScreen, &tmp, myPalette[myBGColor]);
|
SDL_FillRect(myScreen, &tmp, myGUIPalette[color]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -464,7 +428,7 @@ void FrameBufferSoft::fillRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h,
|
||||||
tmp.w = w * theZoomLevel;
|
tmp.w = w * theZoomLevel;
|
||||||
tmp.h = h * theZoomLevel;
|
tmp.h = h * theZoomLevel;
|
||||||
myRectList->add(&tmp);
|
myRectList->add(&tmp);
|
||||||
SDL_FillRect(myScreen, &tmp, myPalette[myBGColor]);
|
SDL_FillRect(myScreen, &tmp, myGUIPalette[color]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -475,12 +439,45 @@ void FrameBufferSoft::frameRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h,
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FrameBufferSoft::drawString(const string& str, Int32 x, Int32 y, Int32 w,
|
void FrameBufferSoft::drawChar(uInt8 chr, uInt32 xorig, uInt32 yorig,
|
||||||
OverlayColor color, TextAlignment align,
|
OverlayColor color)
|
||||||
Int32 deltax, bool useEllipsis)
|
|
||||||
{
|
{
|
||||||
// FIXME - implement this correctly
|
// If this character is not included in the font, use the default char.
|
||||||
drawText(x, y, str);
|
if(chr < myFont->desc().firstchar ||
|
||||||
|
chr >= myFont->desc().firstchar + myFont->desc().size)
|
||||||
|
{
|
||||||
|
if (chr == ' ')
|
||||||
|
return;
|
||||||
|
chr = myFont->desc().defaultchar;
|
||||||
|
}
|
||||||
|
|
||||||
|
const Int32 w = myFont->getCharWidth(chr);
|
||||||
|
const Int32 h = myFont->getFontHeight();
|
||||||
|
chr -= myFont->desc().firstchar;
|
||||||
|
const uInt16* tmp = myFont->desc().bits + (myFont->desc().offset ?
|
||||||
|
myFont->desc().offset[chr] : (chr * h));
|
||||||
|
|
||||||
|
SDL_Rect rect;
|
||||||
|
for(int y = 0; y < h; y++)
|
||||||
|
{
|
||||||
|
const uInt16 buffer = *tmp++;
|
||||||
|
uInt16 mask = 0x8000;
|
||||||
|
// if(ty + y < 0 || ty + y >= dst->h)
|
||||||
|
// continue;
|
||||||
|
|
||||||
|
for(int x = 0; x < w; x++, mask >>= 1)
|
||||||
|
{
|
||||||
|
// if (tx + x < 0 || tx + x >= dst->w)
|
||||||
|
// continue;
|
||||||
|
if ((buffer & mask) != 0)
|
||||||
|
{
|
||||||
|
rect.x = (x + xorig) * theZoomLevel;
|
||||||
|
rect.y = (y + yorig) * theZoomLevel;
|
||||||
|
rect.w = rect.h = theZoomLevel;
|
||||||
|
SDL_FillRect(myScreen, &rect, myGUIPalette[color]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" for information on usage and redistribution of
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//
|
//
|
||||||
// $Id: FrameBufferSoft.hxx,v 1.8 2005-03-12 01:47:15 stephena Exp $
|
// $Id: FrameBufferSoft.hxx,v 1.9 2005-03-13 03:38:39 stephena Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#ifndef FRAMEBUFFER_SOFT_HXX
|
#ifndef FRAMEBUFFER_SOFT_HXX
|
||||||
|
@ -34,7 +34,7 @@ class RectList;
|
||||||
This class implements an SDL software framebuffer.
|
This class implements an SDL software framebuffer.
|
||||||
|
|
||||||
@author Stephen Anthony
|
@author Stephen Anthony
|
||||||
@version $Id: FrameBufferSoft.hxx,v 1.8 2005-03-12 01:47:15 stephena Exp $
|
@version $Id: FrameBufferSoft.hxx,v 1.9 2005-03-13 03:38:39 stephena Exp $
|
||||||
*/
|
*/
|
||||||
class FrameBufferSoft : public FrameBuffer
|
class FrameBufferSoft : public FrameBuffer
|
||||||
{
|
{
|
||||||
|
@ -162,53 +162,21 @@ class FrameBufferSoft : public FrameBuffer
|
||||||
OverlayColor color);
|
OverlayColor color);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This routine is called to draw the specified string.
|
This routine is called to draw the specified character.
|
||||||
|
|
||||||
@param x The x coordinate
|
|
||||||
@param y The y coordinate
|
|
||||||
@param w The width of the area
|
|
||||||
@param h The height of the area
|
|
||||||
@param color The color of the surrounding frame
|
|
||||||
*/
|
|
||||||
virtual void drawString(const string& str, Int32 x, Int32 y, Int32 w,
|
|
||||||
OverlayColor color, TextAlignment align = kTextAlignLeft,
|
|
||||||
Int32 deltax = 0, bool useEllipsis = true);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
This routine should be called to draw a rectangular box with sides
|
|
||||||
at the specified coordinates.
|
|
||||||
|
|
||||||
@param x The x coordinate
|
|
||||||
@param y The y coordinate
|
|
||||||
@param w The width of the box
|
|
||||||
@param h The height of the box
|
|
||||||
*/
|
|
||||||
virtual void drawBoundedBox(uInt32 x, uInt32 y, uInt32 w, uInt32 h);
|
|
||||||
|
|
||||||
/**
|
|
||||||
This routine should be called to draw text at the specified coordinates.
|
|
||||||
|
|
||||||
@param x The x coordinate
|
|
||||||
@param y The y coordinate
|
|
||||||
@param message The message text
|
|
||||||
*/
|
|
||||||
virtual void drawText(uInt32 x, uInt32 y, const string& message);
|
|
||||||
|
|
||||||
/**
|
|
||||||
This routine should be called to draw character 'c' at the specified coordinates.
|
|
||||||
|
|
||||||
@param x The x coordinate
|
|
||||||
@param y The y coordinate
|
|
||||||
@param c The character to draw
|
@param c The character to draw
|
||||||
|
@param x The x coordinate
|
||||||
|
@param y The y coordinate
|
||||||
|
@param color The color of the character
|
||||||
*/
|
*/
|
||||||
virtual void drawChar(uInt32 x, uInt32 y, uInt32 c);
|
virtual void drawChar(uInt8 c, uInt32 x, uInt32 y, OverlayColor color);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Used in the dirty update of the SDL surface
|
// Used in the dirty update of the SDL surface
|
||||||
RectList* myRectList;
|
RectList* myRectList;
|
||||||
|
|
||||||
|
// GUI palette
|
||||||
|
Uint32 myGUIPalette[5];
|
||||||
};
|
};
|
||||||
|
|
||||||
class RectList
|
class RectList
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" for information on usage and redistribution of
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//
|
//
|
||||||
// $Id: FrameBuffer.cxx,v 1.19 2005-03-11 23:36:30 stephena Exp $
|
// $Id: FrameBuffer.cxx,v 1.20 2005-03-13 03:38:40 stephena Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
@ -26,6 +26,9 @@
|
||||||
#include "Settings.hxx"
|
#include "Settings.hxx"
|
||||||
#include "MediaSrc.hxx"
|
#include "MediaSrc.hxx"
|
||||||
#include "FrameBuffer.hxx"
|
#include "FrameBuffer.hxx"
|
||||||
|
#include "FontData.hxx"
|
||||||
|
#include "StellaFont.hxx"
|
||||||
|
#include "GuiUtils.hxx"
|
||||||
#include "Menu.hxx"
|
#include "Menu.hxx"
|
||||||
#include "OSystem.hxx"
|
#include "OSystem.hxx"
|
||||||
|
|
||||||
|
@ -53,8 +56,6 @@ FrameBuffer::FrameBuffer(OSystem* osystem)
|
||||||
myWidth(0),
|
myWidth(0),
|
||||||
myHeight(0),
|
myHeight(0),
|
||||||
theRedrawEntireFrameIndicator(true),
|
theRedrawEntireFrameIndicator(true),
|
||||||
myFGColor(10),
|
|
||||||
myBGColor(0),
|
|
||||||
|
|
||||||
myWMAvailable(false),
|
myWMAvailable(false),
|
||||||
theZoomLevel(1),
|
theZoomLevel(1),
|
||||||
|
@ -63,32 +64,50 @@ FrameBuffer::FrameBuffer(OSystem* osystem)
|
||||||
|
|
||||||
myFrameRate(0),
|
myFrameRate(0),
|
||||||
myPauseStatus(false),
|
myPauseStatus(false),
|
||||||
myCurrentWidget(W_NONE),
|
|
||||||
myRemapEventSelectedFlag(false),
|
|
||||||
mySelectedEvent(Event::NoType),
|
|
||||||
myMenuMode(false),
|
|
||||||
theMenuChangedIndicator(false),
|
theMenuChangedIndicator(false),
|
||||||
myMaxRows(0),
|
|
||||||
myMaxColumns(0),
|
|
||||||
myMainMenuIndex(0),
|
|
||||||
myMainMenuItems(sizeof(ourMainMenu)/sizeof(MainMenuItem)),
|
|
||||||
myRemapMenuIndex(0),
|
|
||||||
myRemapMenuLowIndex(0),
|
|
||||||
myRemapMenuHighIndex(0),
|
|
||||||
myRemapMenuItems(sizeof(ourRemapMenu)/sizeof(RemapMenuItem)),
|
|
||||||
myRemapMenuMaxLines(0),
|
|
||||||
myMessageTime(0),
|
myMessageTime(0),
|
||||||
myMessageText(""),
|
myMessageText(""),
|
||||||
myMenuRedraws(2),
|
myMenuRedraws(2)
|
||||||
myInfoMenuWidth(0)
|
|
||||||
{
|
{
|
||||||
// Add the framebuffer to the system
|
// Add the framebuffer to the system
|
||||||
myOSystem->attach(this);
|
myOSystem->attach(this);
|
||||||
|
|
||||||
|
// Fill the GUI colors array
|
||||||
|
// The specific video subsystem will know what to do with it
|
||||||
|
uInt8 colors[5][3] = {
|
||||||
|
{104, 104, 104},
|
||||||
|
{0, 0, 0},
|
||||||
|
{64, 64, 64},
|
||||||
|
{32, 160, 32},
|
||||||
|
{0, 255, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
for(uInt8 i = 0; i < 5; i++)
|
||||||
|
for(uInt8 j = 0; j < 3; j++)
|
||||||
|
myGUIColors[i][j] = colors[i][j];
|
||||||
|
|
||||||
|
// Create a font to draw text
|
||||||
|
const FontDesc desc = {
|
||||||
|
"04b-16b-10",
|
||||||
|
9,
|
||||||
|
10,
|
||||||
|
8,
|
||||||
|
33,
|
||||||
|
94,
|
||||||
|
_font_bits,
|
||||||
|
0, /* no encode table*/
|
||||||
|
_sysfont_width,
|
||||||
|
33,
|
||||||
|
sizeof(_font_bits)/sizeof(uInt16)
|
||||||
|
};
|
||||||
|
myFont = new StellaFont(this, desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
FrameBuffer::~FrameBuffer(void)
|
FrameBuffer::~FrameBuffer(void)
|
||||||
{
|
{
|
||||||
|
if(myFont)
|
||||||
|
delete myFont;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -212,14 +231,15 @@ void FrameBuffer::update()
|
||||||
// Draw any pending messages
|
// Draw any pending messages
|
||||||
if(myMessageTime > 0)
|
if(myMessageTime > 0)
|
||||||
{
|
{
|
||||||
uInt32 width = myMessageText.length()*FONTWIDTH + FONTWIDTH;
|
uInt32 w = myFont->getStringWidth(myMessageText) + 10;
|
||||||
uInt32 height = LINEOFFSET + FONTHEIGHT;
|
uInt32 h = myFont->getFontHeight() + 5;
|
||||||
uInt32 x = (myWidth >> 1) - (width >> 1);
|
uInt32 x = (myWidth >> 1) - (w >> 1);
|
||||||
uInt32 y = myHeight - height - LINEOFFSET/2;
|
uInt32 y = myHeight - h - LINEOFFSET/2;
|
||||||
|
|
||||||
// Draw the bounded box and text
|
// Draw the bounded box and text
|
||||||
box(x, y+1, width, height-2, 0, 0); // FIXME
|
fillRect(x+1, y+2, w-2, h-4, kBGColor); // FIXME - possibly change this to blended rect
|
||||||
drawText(x + XBOXOFFSET/2, LINEOFFSET/2 + y, myMessageText);
|
box(x, y+1, w, h-2, kColor, kColor);
|
||||||
|
myFont->drawString(myMessageText, x, y, w, kTextColor, kTextAlignCenter);
|
||||||
myMessageTime--;
|
myMessageTime--;
|
||||||
|
|
||||||
// Erase this message on next update
|
// Erase this message on next update
|
||||||
|
@ -230,7 +250,7 @@ void FrameBuffer::update()
|
||||||
break; // S_EMULATE
|
break; // S_EMULATE
|
||||||
}
|
}
|
||||||
|
|
||||||
case EventHandler::S_MENU: // FIXME - this whole thing will disappear into the gui().menu class
|
case EventHandler::S_MENU:
|
||||||
{
|
{
|
||||||
// Only update the screen if it's been invalidated or the menus have changed
|
// Only update the screen if it's been invalidated or the menus have changed
|
||||||
if(theMenuChangedIndicator || theRedrawEntireFrameIndicator)
|
if(theMenuChangedIndicator || theRedrawEntireFrameIndicator)
|
||||||
|
@ -240,24 +260,6 @@ void FrameBuffer::update()
|
||||||
// Then overlay any menu items
|
// Then overlay any menu items
|
||||||
myOSystem->menu().draw();
|
myOSystem->menu().draw();
|
||||||
|
|
||||||
/*
|
|
||||||
switch(myCurrentWidget)
|
|
||||||
{
|
|
||||||
case W_NONE:
|
|
||||||
break;
|
|
||||||
case MAIN_MENU:
|
|
||||||
drawMainMenu();
|
|
||||||
break;
|
|
||||||
case REMAP_MENU:
|
|
||||||
drawRemapMenu();
|
|
||||||
break;
|
|
||||||
case INFO_MENU:
|
|
||||||
drawInfoMenu();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
// Now the screen is up to date
|
// Now the screen is up to date
|
||||||
theRedrawEntireFrameIndicator = false;
|
theRedrawEntireFrameIndicator = false;
|
||||||
|
|
||||||
|
@ -289,6 +291,15 @@ void FrameBuffer::update()
|
||||||
postFrameUpdate();
|
postFrameUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void FrameBuffer::showMessage(const string& message)
|
||||||
|
{
|
||||||
|
myMessageText = message;
|
||||||
|
myMessageTime = myFrameRate << 1; // Show message for 2 seconds
|
||||||
|
theRedrawEntireFrameIndicator = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FrameBuffer::showMenu(bool show)
|
void FrameBuffer::showMenu(bool show)
|
||||||
{
|
{
|
||||||
|
@ -300,14 +311,6 @@ void FrameBuffer::showMenu(bool show)
|
||||||
theRedrawEntireFrameIndicator = true;
|
theRedrawEntireFrameIndicator = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
void FrameBuffer::showMessage(const string& message)
|
|
||||||
{
|
|
||||||
myMessageText = message;
|
|
||||||
myMessageTime = myFrameRate << 1; // Show message for 2 seconds
|
|
||||||
theRedrawEntireFrameIndicator = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
inline void FrameBuffer::drawMainMenu()
|
inline void FrameBuffer::drawMainMenu()
|
||||||
{
|
{
|
||||||
|
@ -320,7 +323,7 @@ inline void FrameBuffer::drawMainMenu()
|
||||||
|
|
||||||
// Draw the bounded box and text, leaving a little room for arrows
|
// Draw the bounded box and text, leaving a little room for arrows
|
||||||
xpos = x + XBOXOFFSET;
|
xpos = x + XBOXOFFSET;
|
||||||
box(x-2, y-2, width+3, height+3, 0, 0); //FIXME
|
box(x-2, y-2, width+3, height+3, kColor, kBGColor); //FIXME
|
||||||
for(i = 0; i < myMainMenuItems; i++)
|
for(i = 0; i < myMainMenuItems; i++)
|
||||||
drawText(xpos, LINEOFFSET*i + y + YBOXOFFSET, ourMainMenu[i].action);
|
drawText(xpos, LINEOFFSET*i + y + YBOXOFFSET, ourMainMenu[i].action);
|
||||||
|
|
||||||
|
@ -341,7 +344,7 @@ inline void FrameBuffer::drawRemapMenu()
|
||||||
y = (myHeight >> 1) - (height >> 1);
|
y = (myHeight >> 1) - (height >> 1);
|
||||||
|
|
||||||
// Draw the bounded box and text, leaving a little room for arrows
|
// Draw the bounded box and text, leaving a little room for arrows
|
||||||
box(x-2, y-2, width+3, height+3, 0, 0); //FIXME
|
box(x-2, y-2, width+3, height+3, kColor, kBGColor); //FIXME
|
||||||
for(Int32 i = myRemapMenuLowIndex; i < myRemapMenuHighIndex; i++)
|
for(Int32 i = myRemapMenuLowIndex; i < myRemapMenuHighIndex; i++)
|
||||||
{
|
{
|
||||||
ypos = LINEOFFSET*(i-myRemapMenuLowIndex) + y + YBOXOFFSET;
|
ypos = LINEOFFSET*(i-myRemapMenuLowIndex) + y + YBOXOFFSET;
|
||||||
|
@ -392,7 +395,7 @@ inline void FrameBuffer::drawInfoMenu()
|
||||||
|
|
||||||
// Draw the bounded box and text
|
// Draw the bounded box and text
|
||||||
xpos = x + XBOXOFFSET;
|
xpos = x + XBOXOFFSET;
|
||||||
box(x, y, width, height, 0, 0); //FIXME
|
box(x, y, width, height, kColor, kBGColor); //FIXME
|
||||||
for(i = 0; i < 9; i++)
|
for(i = 0; i < 9; i++)
|
||||||
drawText(xpos, LINEOFFSET*i + y + YBOXOFFSET, ourPropertiesInfo[i]);
|
drawText(xpos, LINEOFFSET*i + y + YBOXOFFSET, ourPropertiesInfo[i]);
|
||||||
}
|
}
|
||||||
|
@ -515,6 +518,7 @@ void FrameBuffer::sendJoyEvent(StellaEvent::JoyStick stick,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FrameBuffer::pause(bool status)
|
void FrameBuffer::pause(bool status)
|
||||||
|
@ -526,6 +530,7 @@ void FrameBuffer::pause(bool status)
|
||||||
//FIXME pauseEvent(myPauseStatus);
|
//FIXME pauseEvent(myPauseStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
FrameBuffer::Widget FrameBuffer::currentSelectedWidget()
|
FrameBuffer::Widget FrameBuffer::currentSelectedWidget()
|
||||||
{
|
{
|
||||||
|
@ -826,7 +831,9 @@ FrameBuffer::RemapMenuItem FrameBuffer::ourRemapMenu[57] = {
|
||||||
{ Event::KeyboardOne0, "Right-Pad 0", "" },
|
{ Event::KeyboardOne0, "Right-Pad 0", "" },
|
||||||
{ Event::KeyboardOnePound, "Right-Pad #", "" }
|
{ Event::KeyboardOnePound, "Right-Pad #", "" }
|
||||||
};
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if 0
|
||||||
/**
|
/**
|
||||||
This array must be initialized in a specific order, matching
|
This array must be initialized in a specific order, matching
|
||||||
their initialization in StellaEvent::KeyCode.
|
their initialization in StellaEvent::KeyCode.
|
||||||
|
@ -858,6 +865,7 @@ const char* FrameBuffer::ourEventName[StellaEvent::LastKCODE] = {
|
||||||
"F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10",
|
"F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10",
|
||||||
"F11", "F12", "F13", "F14", "F15",
|
"F11", "F12", "F13", "F14", "F15",
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FrameBuffer::setupPalette()
|
void FrameBuffer::setupPalette()
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" for information on usage and redistribution of
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//
|
//
|
||||||
// $Id: FrameBuffer.hxx,v 1.19 2005-03-12 01:47:15 stephena Exp $
|
// $Id: FrameBuffer.hxx,v 1.20 2005-03-13 03:38:40 stephena Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#ifndef FRAMEBUFFER_HXX
|
#ifndef FRAMEBUFFER_HXX
|
||||||
|
@ -25,20 +25,14 @@
|
||||||
#include "bspf.hxx"
|
#include "bspf.hxx"
|
||||||
#include "Event.hxx"
|
#include "Event.hxx"
|
||||||
#include "MediaSrc.hxx"
|
#include "MediaSrc.hxx"
|
||||||
|
#include "StellaFont.hxx"
|
||||||
#include "StellaEvent.hxx"
|
#include "StellaEvent.hxx"
|
||||||
|
#include "GuiUtils.hxx"
|
||||||
|
|
||||||
|
class StellaFont;
|
||||||
class Console;
|
class Console;
|
||||||
class OSystem;
|
class OSystem;
|
||||||
|
|
||||||
typedef uInt32 OverlayColor;
|
|
||||||
|
|
||||||
// Text alignment modes for drawString()
|
|
||||||
enum TextAlignment {
|
|
||||||
kTextAlignLeft,
|
|
||||||
kTextAlignCenter,
|
|
||||||
kTextAlignRight
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This class encapsulates the MediaSource and is the basis for the video
|
This class encapsulates the MediaSource and is the basis for the video
|
||||||
display in Stella. All graphics ports should derive from this class for
|
display in Stella. All graphics ports should derive from this class for
|
||||||
|
@ -47,7 +41,7 @@ enum TextAlignment {
|
||||||
All GUI elements (ala ScummVM) are drawn here as well.
|
All GUI elements (ala ScummVM) are drawn here as well.
|
||||||
|
|
||||||
@author Stephen Anthony
|
@author Stephen Anthony
|
||||||
@version $Id: FrameBuffer.hxx,v 1.19 2005-03-12 01:47:15 stephena Exp $
|
@version $Id: FrameBuffer.hxx,v 1.20 2005-03-13 03:38:40 stephena Exp $
|
||||||
*/
|
*/
|
||||||
class FrameBuffer
|
class FrameBuffer
|
||||||
{
|
{
|
||||||
|
@ -62,6 +56,13 @@ class FrameBuffer
|
||||||
*/
|
*/
|
||||||
virtual ~FrameBuffer();
|
virtual ~FrameBuffer();
|
||||||
|
|
||||||
|
/**
|
||||||
|
Get the font object of the framebuffer
|
||||||
|
|
||||||
|
@return The font reference
|
||||||
|
*/
|
||||||
|
StellaFont& font() const { return *myFont; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
(Re)initializes the framebuffer display. This must be called before any
|
(Re)initializes the framebuffer display. This must be called before any
|
||||||
calls are made to derived methods.
|
calls are made to derived methods.
|
||||||
|
@ -78,14 +79,6 @@ class FrameBuffer
|
||||||
*/
|
*/
|
||||||
void update();
|
void update();
|
||||||
|
|
||||||
/**
|
|
||||||
Shows the main menu onscreen. This will only be called if event
|
|
||||||
remapping has been enabled in the event handler.
|
|
||||||
|
|
||||||
@param show Show/hide the menu based on the boolean value
|
|
||||||
*/
|
|
||||||
void showMenu(bool show);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Shows a message onscreen.
|
Shows a message onscreen.
|
||||||
|
|
||||||
|
@ -132,24 +125,6 @@ FIXME
|
||||||
*/
|
*/
|
||||||
uInt32 screenHeight();
|
uInt32 screenHeight();
|
||||||
|
|
||||||
/**
|
|
||||||
Send a keyboard event to the user interface.
|
|
||||||
|
|
||||||
@param code The StellaEvent code
|
|
||||||
@param state The StellaEvent state
|
|
||||||
*/
|
|
||||||
void sendKeyEvent(StellaEvent::KeyCode code, Int32 state);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Send a joystick button event to the user interface.
|
|
||||||
|
|
||||||
@param stick The joystick activated
|
|
||||||
@param code The StellaEvent joystick code
|
|
||||||
@param state The StellaEvent state
|
|
||||||
*/
|
|
||||||
void sendJoyEvent(StellaEvent::JoyStick stick, StellaEvent::JoyCode code,
|
|
||||||
Int32 state);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Sets the pause status. While pause is selected, the
|
Sets the pause status. While pause is selected, the
|
||||||
MediaSource will not be updated.
|
MediaSource will not be updated.
|
||||||
|
@ -224,14 +199,6 @@ FIXME
|
||||||
*/
|
*/
|
||||||
void setupPalette();
|
void setupPalette();
|
||||||
|
|
||||||
/**
|
|
||||||
Colors to use for the various GUI elements
|
|
||||||
*/
|
|
||||||
OverlayColor color, shadowcolor;
|
|
||||||
OverlayColor bgcolor;
|
|
||||||
OverlayColor textcolor;
|
|
||||||
OverlayColor textcolorhi;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This routine should be called to draw a rectangular box with sides
|
This routine should be called to draw a rectangular box with sides
|
||||||
at the specified coordinates.
|
at the specified coordinates.
|
||||||
|
@ -364,48 +331,19 @@ FIXME
|
||||||
OverlayColor color) = 0;
|
OverlayColor color) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This routine should be called to draw the specified string.
|
This routine should be called to draw the specified character.
|
||||||
|
|
||||||
|
@param c The character to draw
|
||||||
@param x The x coordinate
|
@param x The x coordinate
|
||||||
@param y The y coordinate
|
@param y The y coordinate
|
||||||
@param w The width of the area
|
@param color The color of the character
|
||||||
@param h The height of the area
|
|
||||||
@param color The color of the surrounding frame
|
|
||||||
*/
|
*/
|
||||||
virtual void drawString(const string& str, Int32 x, Int32 y, Int32 w,
|
virtual void drawChar(uInt8 c, uInt32 x, uInt32 y, OverlayColor color) = 0;
|
||||||
OverlayColor color, TextAlignment align = kTextAlignLeft,
|
|
||||||
Int32 deltax = 0, bool useEllipsis = true) = 0;
|
|
||||||
|
|
||||||
/* FIXME
|
/* FIXME
|
||||||
|
|
||||||
void drawChar(byte c, int x, int y, OverlayColor color, const Graphics::Font *font = 0);
|
|
||||||
|
|
||||||
int getStringWidth(const String &str);
|
|
||||||
int getCharWidth(byte c);
|
|
||||||
|
|
||||||
void drawBitmap(uint32 *bitmap, int x, int y, OverlayColor color, int h = 8);
|
void drawBitmap(uint32 *bitmap, int x, int y, OverlayColor color, int h = 8);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
This routine should be called to draw text at the specified coordinates.
|
|
||||||
|
|
||||||
@param x The x coordinate
|
|
||||||
@param y The y coordinate
|
|
||||||
@param message The message text
|
|
||||||
*/
|
|
||||||
virtual void drawText(uInt32 x, uInt32 y, const string& message) = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
This routine should be called to draw character 'c' at the specified coordinates.
|
|
||||||
|
|
||||||
@param x The x coordinate
|
|
||||||
@param y The y coordinate
|
|
||||||
@param c The character to draw
|
|
||||||
*/
|
|
||||||
virtual void drawChar(uInt32 x, uInt32 y, uInt32 c) = 0;
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
FIXME
|
FIXME
|
||||||
/**
|
/**
|
||||||
|
@ -428,12 +366,6 @@ FIXME
|
||||||
// Indicates if the entire frame should be redrawn
|
// Indicates if the entire frame should be redrawn
|
||||||
bool theRedrawEntireFrameIndicator;
|
bool theRedrawEntireFrameIndicator;
|
||||||
|
|
||||||
// Table of bitmapped fonts.
|
|
||||||
static const uInt8 ourFontData[2048];
|
|
||||||
|
|
||||||
// Holds the foreground and background color table indices
|
|
||||||
uInt8 myFGColor, myBGColor;
|
|
||||||
|
|
||||||
// The SDL video buffer
|
// The SDL video buffer
|
||||||
SDL_Surface* myScreen;
|
SDL_Surface* myScreen;
|
||||||
|
|
||||||
|
@ -443,6 +375,9 @@ FIXME
|
||||||
// SDL palette
|
// SDL palette
|
||||||
Uint32 myPalette[256];
|
Uint32 myPalette[256];
|
||||||
|
|
||||||
|
// Holds the palette for GUI elements
|
||||||
|
uInt8 myGUIColors[5][3];
|
||||||
|
|
||||||
// Used to get window-manager specifics
|
// Used to get window-manager specifics
|
||||||
SDL_SysWMinfo myWMInfo;
|
SDL_SysWMinfo myWMInfo;
|
||||||
|
|
||||||
|
@ -462,12 +397,16 @@ FIXME
|
||||||
// The aspect ratio of the window
|
// The aspect ratio of the window
|
||||||
float theAspectRatio;
|
float theAspectRatio;
|
||||||
|
|
||||||
|
// The font object to use
|
||||||
|
StellaFont* myFont;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
Set the icon for the main SDL window.
|
Set the icon for the main SDL window.
|
||||||
*/
|
*/
|
||||||
void setWindowIcon();
|
void setWindowIcon();
|
||||||
|
|
||||||
|
/*
|
||||||
// Enumeration representing the different types of user interface widgets
|
// Enumeration representing the different types of user interface widgets
|
||||||
enum Widget { W_NONE, MAIN_MENU, REMAP_MENU, INFO_MENU };
|
enum Widget { W_NONE, MAIN_MENU, REMAP_MENU, INFO_MENU };
|
||||||
|
|
||||||
|
@ -501,7 +440,7 @@ FIXME
|
||||||
|
|
||||||
// scan the mapping arrays and update the remap menu
|
// scan the mapping arrays and update the remap menu
|
||||||
void loadRemapMenu();
|
void loadRemapMenu();
|
||||||
|
*/
|
||||||
private:
|
private:
|
||||||
// Indicates the current framerate of the system
|
// Indicates the current framerate of the system
|
||||||
uInt32 myFrameRate;
|
uInt32 myFrameRate;
|
||||||
|
@ -509,6 +448,19 @@ FIXME
|
||||||
// Indicates the current pause status
|
// Indicates the current pause status
|
||||||
bool myPauseStatus;
|
bool myPauseStatus;
|
||||||
|
|
||||||
|
// Indicates if the menus should be redrawn
|
||||||
|
bool theMenuChangedIndicator;
|
||||||
|
|
||||||
|
// Message timer
|
||||||
|
Int32 myMessageTime;
|
||||||
|
|
||||||
|
// Message text
|
||||||
|
string myMessageText;
|
||||||
|
|
||||||
|
// Number of times menu have been drawn
|
||||||
|
uInt32 myMenuRedraws;
|
||||||
|
|
||||||
|
/*
|
||||||
// Structure used for main menu items
|
// Structure used for main menu items
|
||||||
struct MainMenuItem
|
struct MainMenuItem
|
||||||
{
|
{
|
||||||
|
@ -539,9 +491,6 @@ FIXME
|
||||||
// Indicates if we are in menu mode
|
// Indicates if we are in menu mode
|
||||||
bool myMenuMode;
|
bool myMenuMode;
|
||||||
|
|
||||||
// Indicates if the menus should be redrawn
|
|
||||||
bool theMenuChangedIndicator;
|
|
||||||
|
|
||||||
// The maximum number of vertical lines of text that can be onscreen
|
// The maximum number of vertical lines of text that can be onscreen
|
||||||
Int32 myMaxRows;
|
Int32 myMaxRows;
|
||||||
|
|
||||||
|
@ -555,15 +504,6 @@ FIXME
|
||||||
Int32 myRemapMenuIndex, myRemapMenuLowIndex, myRemapMenuHighIndex;
|
Int32 myRemapMenuIndex, myRemapMenuLowIndex, myRemapMenuHighIndex;
|
||||||
Int32 myRemapMenuItems, myRemapMenuMaxLines;
|
Int32 myRemapMenuItems, myRemapMenuMaxLines;
|
||||||
|
|
||||||
// Message timer
|
|
||||||
Int32 myMessageTime;
|
|
||||||
|
|
||||||
// Message text
|
|
||||||
string myMessageText;
|
|
||||||
|
|
||||||
// Number of times menu have been drawn
|
|
||||||
uInt32 myMenuRedraws;
|
|
||||||
|
|
||||||
// The width of the information menu, determined by the longest string
|
// The width of the information menu, determined by the longest string
|
||||||
Int32 myInfoMenuWidth;
|
Int32 myInfoMenuWidth;
|
||||||
|
|
||||||
|
@ -587,6 +527,7 @@ FIXME
|
||||||
|
|
||||||
// Holds the number of items in the joytable array
|
// Holds the number of items in the joytable array
|
||||||
uInt32 myJoyTableSize;
|
uInt32 myJoyTableSize;
|
||||||
|
*/
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" for information on usage and redistribution of
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//
|
//
|
||||||
// $Id: Dialog.cxx,v 1.4 2005-03-12 01:47:15 stephena Exp $
|
// $Id: Dialog.cxx,v 1.5 2005-03-13 03:38:40 stephena Exp $
|
||||||
//
|
//
|
||||||
// Based on code from ScummVM - Scumm Interpreter
|
// Based on code from ScummVM - Scumm Interpreter
|
||||||
// Copyright (C) 2002-2004 The ScummVM project
|
// Copyright (C) 2002-2004 The ScummVM project
|
||||||
|
@ -120,8 +120,8 @@ void Dialog::drawDialog()
|
||||||
|
|
||||||
FrameBuffer& fb = instance()->frameBuffer();
|
FrameBuffer& fb = instance()->frameBuffer();
|
||||||
|
|
||||||
fb.blendRect(_x, _y, _w, _h, fb.bgcolor);
|
fb.blendRect(_x, _y, _w, _h, kBGColor);
|
||||||
fb.box(_x, _y, _w, _h, fb.color, fb.shadowcolor);
|
fb.box(_x, _y, _w, _h, kColor, kShadowColor);
|
||||||
|
|
||||||
// Draw all children
|
// Draw all children
|
||||||
Widget* w = _firstWidget;
|
Widget* w = _firstWidget;
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,42 @@
|
||||||
|
//============================================================================
|
||||||
|
//
|
||||||
|
// SSSS tt lll lll
|
||||||
|
// SS SS tt ll ll
|
||||||
|
// SS tttttt eeee ll ll aaaa
|
||||||
|
// SSSS tt ee ee ll ll aa
|
||||||
|
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
|
||||||
|
// SS SS tt ee ll ll aa aa
|
||||||
|
// SSSS ttt eeeee llll llll aaaaa
|
||||||
|
//
|
||||||
|
// Copyright (c) 1995-2005 by Bradford W. Mott
|
||||||
|
//
|
||||||
|
// See the file "license" for information on usage and redistribution of
|
||||||
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
|
//
|
||||||
|
// $Id: GuiUtils.hxx,v 1.1 2005-03-13 03:38:40 stephena Exp $
|
||||||
|
//
|
||||||
|
// Based on code from ScummVM - Scumm Interpreter
|
||||||
|
// Copyright (C) 2002-2004 The ScummVM project
|
||||||
|
//============================================================================
|
||||||
|
|
||||||
|
#ifndef UTILITIES_HXX
|
||||||
|
#define UTILITIES_HXX
|
||||||
|
|
||||||
|
/**
|
||||||
|
A place to put GUI-related things that don't fit anywhere else.
|
||||||
|
Probably not very neat, but at least it works ...
|
||||||
|
|
||||||
|
@author Stephen Anthony
|
||||||
|
@version $Id: GuiUtils.hxx,v 1.1 2005-03-13 03:38:40 stephena Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Colors indices to use for the various GUI elements
|
||||||
|
enum OverlayColor {
|
||||||
|
kColor,
|
||||||
|
kBGColor,
|
||||||
|
kShadowColor,
|
||||||
|
kTextColor,
|
||||||
|
kTextColorHi
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" for information on usage and redistribution of
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//
|
//
|
||||||
// $Id: Menu.cxx,v 1.3 2005-03-12 01:47:15 stephena Exp $
|
// $Id: Menu.cxx,v 1.4 2005-03-13 03:38:40 stephena Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
|
@ -93,12 +93,8 @@ void Menu::handleKeyEvent(SDLKey key, SDLMod mod, uInt8 state)
|
||||||
Dialog* activeDialog = myDialogStack.top();
|
Dialog* activeDialog = myDialogStack.top();
|
||||||
|
|
||||||
// Convert SDL values to ascii so the ScummVM subsystem can work with it
|
// Convert SDL values to ascii so the ScummVM subsystem can work with it
|
||||||
// FIXME - convert SDLKey and SDLMod to int values
|
|
||||||
uInt16 ascii = 0;
|
|
||||||
Int32 keycode = 0, modifiers = 0;
|
|
||||||
|
|
||||||
if(state == 1)
|
if(state == 1)
|
||||||
activeDialog->handleKeyDown(ascii, keycode, modifiers);
|
activeDialog->handleKeyDown(key, key, mod);
|
||||||
else
|
else
|
||||||
activeDialog->handleKeyUp(ascii, keycode, modifiers);
|
activeDialog->handleKeyUp(key, key, mod);
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" for information on usage and redistribution of
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//
|
//
|
||||||
// $Id: OptionsDialog.cxx,v 1.3 2005-03-12 01:47:15 stephena Exp $
|
// $Id: OptionsDialog.cxx,v 1.4 2005-03-13 03:38:40 stephena Exp $
|
||||||
//
|
//
|
||||||
// Based on code from ScummVM - Scumm Interpreter
|
// Based on code from ScummVM - Scumm Interpreter
|
||||||
// Copyright (C) 2002-2004 The ScummVM project
|
// Copyright (C) 2002-2004 The ScummVM project
|
||||||
|
@ -28,19 +28,6 @@
|
||||||
|
|
||||||
#include "bspf.hxx"
|
#include "bspf.hxx"
|
||||||
|
|
||||||
/*
|
|
||||||
using GUI::CommandSender;
|
|
||||||
using GUI::StaticTextWidget;
|
|
||||||
using GUI::kButtonWidth;
|
|
||||||
using GUI::kCloseCmd;
|
|
||||||
using GUI::kTextAlignCenter;
|
|
||||||
using GUI::kTextAlignLeft;
|
|
||||||
using GUI::WIDGET_ENABLED;
|
|
||||||
|
|
||||||
typedef GUI::OptionsDialog GUI_OptionsDialog;
|
|
||||||
typedef GUI::ChooserDialog GUI_ChooserDialog;
|
|
||||||
*/
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
kVidCmd = 'VIDO',
|
kVidCmd = 'VIDO',
|
||||||
kAudCmd = 'AUDO',
|
kAudCmd = 'AUDO',
|
||||||
|
@ -51,20 +38,23 @@ enum {
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
kRowHeight = 20,
|
kRowHeight = 22,
|
||||||
kBigButtonWidth = 140,
|
kBigButtonWidth = 100,
|
||||||
kMainMenuWidth = (kBigButtonWidth + 2 * 8),
|
kMainMenuWidth = (kBigButtonWidth + 2 * 8),
|
||||||
kMainMenuHeight = 6 * kRowHeight + 10,
|
kMainMenuHeight = 6 * kRowHeight + 10,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define addBigButton(label, cmd, hotkey) \
|
#define addBigButton(label, cmd, hotkey) \
|
||||||
new ButtonWidget(this, x, y, kBigButtonWidth, 16, label, cmd, hotkey); y += kRowHeight
|
new ButtonWidget(this, x, y, kBigButtonWidth, 18, label, cmd, hotkey); y += kRowHeight
|
||||||
|
|
||||||
OptionsDialog::OptionsDialog(OSystem* osystem)
|
OptionsDialog::OptionsDialog(OSystem* osystem)
|
||||||
: Dialog(osystem, (320 - kMainMenuWidth) / 2, (200 - kMainMenuHeight)/2, kMainMenuWidth, kMainMenuHeight)
|
: Dialog(osystem, (320 - kMainMenuWidth) / 2, (200 - kMainMenuHeight)/2, kMainMenuWidth, kMainMenuHeight)
|
||||||
|
/* FIXME - make this depend on the framebuffer dimensions
|
||||||
|
: Dialog(osystem, (osystem->frameBuffer().width() - kMainMenuWidth) / 2,
|
||||||
|
(osystem->frameBuffer().height() - kMainMenuHeight)/2,
|
||||||
|
kMainMenuWidth, kMainMenuHeight)
|
||||||
|
*/
|
||||||
{
|
{
|
||||||
cerr << "OptionsDialog::OptionsDialog()\n";
|
|
||||||
|
|
||||||
int y = 7;
|
int y = 7;
|
||||||
|
|
||||||
const int x = (_w - kBigButtonWidth) / 2;
|
const int x = (_w - kBigButtonWidth) / 2;
|
||||||
|
|
|
@ -0,0 +1,128 @@
|
||||||
|
//============================================================================
|
||||||
|
//
|
||||||
|
// SSSS tt lll lll
|
||||||
|
// SS SS tt ll ll
|
||||||
|
// SS tttttt eeee ll ll aaaa
|
||||||
|
// SSSS tt ee ee ll ll aa
|
||||||
|
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
|
||||||
|
// SS SS tt ee ll ll aa aa
|
||||||
|
// SSSS ttt eeeee llll llll aaaaa
|
||||||
|
//
|
||||||
|
// Copyright (c) 1995-2005 by Bradford W. Mott
|
||||||
|
//
|
||||||
|
// See the file "license" for information on usage and redistribution of
|
||||||
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
|
//
|
||||||
|
// $Id: StellaFont.cxx,v 1.1 2005-03-13 03:38:40 stephena Exp $
|
||||||
|
//
|
||||||
|
// Based on code from ScummVM - Scumm Interpreter
|
||||||
|
// Copyright (C) 2002-2004 The ScummVM project
|
||||||
|
//============================================================================
|
||||||
|
|
||||||
|
#include "FrameBuffer.hxx"
|
||||||
|
#include "GuiUtils.hxx"
|
||||||
|
#include "StellaFont.hxx"
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
Int32 StellaFont::getCharWidth(uInt8 chr) const
|
||||||
|
{
|
||||||
|
// If no width table is specified, return the maximum width
|
||||||
|
if(!myFontDesc.width)
|
||||||
|
return myFontDesc.maxwidth;
|
||||||
|
|
||||||
|
// If this character is not included in the font, use the default char.
|
||||||
|
if(chr < myFontDesc.firstchar || myFontDesc.firstchar + myFontDesc.size < chr)
|
||||||
|
{
|
||||||
|
if(chr == ' ')
|
||||||
|
return myFontDesc.maxwidth / 2;
|
||||||
|
chr = myFontDesc.defaultchar;
|
||||||
|
}
|
||||||
|
|
||||||
|
return myFontDesc.width[chr - myFontDesc.firstchar];
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
Int32 StellaFont::getStringWidth(const string& str) const
|
||||||
|
{
|
||||||
|
Int32 space = 0;
|
||||||
|
|
||||||
|
for(uInt32 i = 0; i < str.size(); ++i)
|
||||||
|
space += getCharWidth(str[i]);
|
||||||
|
|
||||||
|
return space;
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void StellaFont::drawString(const string& s, uInt32 x, uInt32 y, uInt32 w,
|
||||||
|
OverlayColor color, TextAlignment align,
|
||||||
|
Int32 deltax, bool useEllipsis) const
|
||||||
|
{
|
||||||
|
const uInt32 leftX = x, rightX = x + w;
|
||||||
|
uInt32 i;
|
||||||
|
uInt32 width = getStringWidth(s);
|
||||||
|
string str;
|
||||||
|
|
||||||
|
if(useEllipsis && width > w)
|
||||||
|
{
|
||||||
|
// String is too wide. So we shorten it "intelligently", by replacing
|
||||||
|
// parts of it by an ellipsis ("..."). There are three possibilities
|
||||||
|
// for this: replace the start, the end, or the middle of the string.
|
||||||
|
// What is best really depends on the context; but unless we want to
|
||||||
|
// make this configurable, replacing the middle probably is a good
|
||||||
|
// compromise.
|
||||||
|
const int ellipsisWidth = getStringWidth("...");
|
||||||
|
|
||||||
|
// SLOW algorithm to remove enough of the middle. But it is good enough for now.
|
||||||
|
const int halfWidth = (w - ellipsisWidth) / 2;
|
||||||
|
int w2 = 0;
|
||||||
|
|
||||||
|
for(i = 0; i < s.size(); ++i)
|
||||||
|
{
|
||||||
|
int charWidth = getCharWidth(s[i]);
|
||||||
|
if(w2 + charWidth > halfWidth)
|
||||||
|
break;
|
||||||
|
|
||||||
|
w2 += charWidth;
|
||||||
|
str += s[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
// At this point we know that the first 'i' chars are together 'w2'
|
||||||
|
// pixels wide. We took the first i-1, and add "..." to them.
|
||||||
|
str += "...";
|
||||||
|
|
||||||
|
// The original string is width wide. Of those we already skipped past
|
||||||
|
// w2 pixels, which means (width - w2) remain.
|
||||||
|
// The new str is (w2+ellipsisWidth) wide, so we can accomodate about
|
||||||
|
// (w - (w2+ellipsisWidth)) more pixels.
|
||||||
|
// Thus we skip ((width - w2) - (w - (w2+ellipsisWidth))) =
|
||||||
|
// (width + ellipsisWidth - w)
|
||||||
|
int skip = width + ellipsisWidth - w;
|
||||||
|
for(; i < s.size() && skip > 0; ++i)
|
||||||
|
skip -= getCharWidth(s[i]);
|
||||||
|
|
||||||
|
// Append the remaining chars, if any
|
||||||
|
for(; i < s.size(); ++i)
|
||||||
|
str += s[i];
|
||||||
|
|
||||||
|
width = getStringWidth(str);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
str = s;
|
||||||
|
|
||||||
|
if(align == kTextAlignCenter)
|
||||||
|
x = x + (w - width - 1)/2;
|
||||||
|
else if(align == kTextAlignRight)
|
||||||
|
x = x + w - width;
|
||||||
|
|
||||||
|
x += deltax;
|
||||||
|
for(i = 0; i < str.size(); ++i)
|
||||||
|
{
|
||||||
|
w = getCharWidth(str[i]);
|
||||||
|
if(x+w > rightX)
|
||||||
|
break;
|
||||||
|
if(x >= leftX)
|
||||||
|
myFrameBuffer->drawChar(str[i], x, y, color);
|
||||||
|
|
||||||
|
x += w;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,77 @@
|
||||||
|
//============================================================================
|
||||||
|
//
|
||||||
|
// SSSS tt lll lll
|
||||||
|
// SS SS tt ll ll
|
||||||
|
// SS tttttt eeee ll ll aaaa
|
||||||
|
// SSSS tt ee ee ll ll aa
|
||||||
|
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
|
||||||
|
// SS SS tt ee ll ll aa aa
|
||||||
|
// SSSS ttt eeeee llll llll aaaaa
|
||||||
|
//
|
||||||
|
// Copyright (c) 1995-2005 by Bradford W. Mott
|
||||||
|
//
|
||||||
|
// See the file "license" for information on usage and redistribution of
|
||||||
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
|
//
|
||||||
|
// $Id: StellaFont.hxx,v 1.1 2005-03-13 03:38:41 stephena Exp $
|
||||||
|
//
|
||||||
|
// Based on code from ScummVM - Scumm Interpreter
|
||||||
|
// Copyright (C) 2002-2004 The ScummVM project
|
||||||
|
//============================================================================
|
||||||
|
|
||||||
|
#ifndef STELLA_FONT_HXX
|
||||||
|
#define STELLA_FONT_HXX
|
||||||
|
|
||||||
|
class FrameBuffer;
|
||||||
|
|
||||||
|
#include "bspf.hxx"
|
||||||
|
#include "GuiUtils.hxx"
|
||||||
|
|
||||||
|
// Text alignment modes for drawString()
|
||||||
|
enum TextAlignment {
|
||||||
|
kTextAlignLeft,
|
||||||
|
kTextAlignCenter,
|
||||||
|
kTextAlignRight
|
||||||
|
};
|
||||||
|
|
||||||
|
/* builtin C-based proportional/fixed font structure */
|
||||||
|
/* based on The Microwindows Project http://microwindows.org */
|
||||||
|
struct FontDesc
|
||||||
|
{
|
||||||
|
const char* name; /* font name */
|
||||||
|
Int32 maxwidth; /* max width in pixels */
|
||||||
|
Int32 height; /* height in pixels */
|
||||||
|
Int32 ascent; /* ascent (baseline) height */
|
||||||
|
Int32 firstchar; /* first character in bitmap */
|
||||||
|
Int32 size; /* font size in glyphs */
|
||||||
|
const uInt16* bits; /* 16-bit right-padded bitmap data */
|
||||||
|
const uInt32* offset; /* offsets into bitmap data */
|
||||||
|
const uInt8* width; /* character widths or NULL if fixed */
|
||||||
|
Int32 defaultchar; /* default char (not glyph index) */
|
||||||
|
long bits_size; /* # words of bitmap_t bits */
|
||||||
|
};
|
||||||
|
|
||||||
|
class StellaFont
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
StellaFont(FrameBuffer* buffer, const FontDesc& desc)
|
||||||
|
: myFrameBuffer(buffer), myFontDesc(desc) {}
|
||||||
|
|
||||||
|
const FontDesc& desc() { return myFontDesc; }
|
||||||
|
|
||||||
|
Int32 getFontHeight() const { return myFontDesc.height; }
|
||||||
|
Int32 getMaxCharWidth() const { return myFontDesc.maxwidth; }
|
||||||
|
|
||||||
|
Int32 getCharWidth(uInt8 chr) const;
|
||||||
|
|
||||||
|
Int32 getStringWidth(const string& str) const;
|
||||||
|
void drawString(const string& str, uInt32 x, uInt32 y, uInt32 w,
|
||||||
|
OverlayColor color, TextAlignment align = kTextAlignLeft,
|
||||||
|
Int32 deltax = 0, bool useEllipsis = true) const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
FrameBuffer* myFrameBuffer;
|
||||||
|
FontDesc myFontDesc;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" for information on usage and redistribution of
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//
|
//
|
||||||
// $Id: Widget.cxx,v 1.3 2005-03-11 23:36:30 stephena Exp $
|
// $Id: Widget.cxx,v 1.4 2005-03-13 03:38:41 stephena Exp $
|
||||||
//
|
//
|
||||||
// Based on code from ScummVM - Scumm Interpreter
|
// Based on code from ScummVM - Scumm Interpreter
|
||||||
// Copyright (C) 2002-2004 The ScummVM project
|
// Copyright (C) 2002-2004 The ScummVM project
|
||||||
|
@ -21,6 +21,7 @@
|
||||||
|
|
||||||
#include "OSystem.hxx"
|
#include "OSystem.hxx"
|
||||||
#include "FrameBuffer.hxx"
|
#include "FrameBuffer.hxx"
|
||||||
|
#include "StellaFont.hxx"
|
||||||
#include "Dialog.hxx"
|
#include "Dialog.hxx"
|
||||||
#include "Command.hxx"
|
#include "Command.hxx"
|
||||||
#include "GuiObject.hxx"
|
#include "GuiObject.hxx"
|
||||||
|
@ -64,12 +65,12 @@ void Widget::draw()
|
||||||
|
|
||||||
// Clear background (unless alpha blending is enabled)
|
// Clear background (unless alpha blending is enabled)
|
||||||
if(_flags & WIDGET_CLEARBG)
|
if(_flags & WIDGET_CLEARBG)
|
||||||
fb.fillRect(_x, _y, _w, _h, fb.bgcolor);
|
fb.fillRect(_x, _y, _w, _h, kBGColor);
|
||||||
|
|
||||||
// Draw border
|
// Draw border
|
||||||
if(_flags & WIDGET_BORDER) {
|
if(_flags & WIDGET_BORDER) {
|
||||||
OverlayColor colorA = fb.color;
|
OverlayColor colorA = kColor;
|
||||||
OverlayColor colorB = fb.shadowcolor;
|
OverlayColor colorB = kShadowColor;
|
||||||
if((_flags & WIDGET_INV_BORDER) == WIDGET_INV_BORDER)
|
if((_flags & WIDGET_INV_BORDER) == WIDGET_INV_BORDER)
|
||||||
; //FIXME - add swap function SWAP(colorA, colorB);
|
; //FIXME - add swap function SWAP(colorA, colorB);
|
||||||
fb.box(_x, _y, _w, _h, colorA, colorB);
|
fb.box(_x, _y, _w, _h, colorA, colorB);
|
||||||
|
@ -145,8 +146,8 @@ void StaticTextWidget::setValue(Int32 value)
|
||||||
void StaticTextWidget::drawWidget(bool hilite)
|
void StaticTextWidget::drawWidget(bool hilite)
|
||||||
{
|
{
|
||||||
FrameBuffer& fb = _boss->instance()->frameBuffer();
|
FrameBuffer& fb = _boss->instance()->frameBuffer();
|
||||||
fb.drawString(_label, _x, _y, _w,
|
fb.font().drawString(_label, _x, _y, _w,
|
||||||
isEnabled() ? fb.textcolor : fb.color, _align);
|
isEnabled() ? kTextColor : kColor, _align);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -174,9 +175,9 @@ void ButtonWidget::drawWidget(bool hilite)
|
||||||
int kLineHeight = 10; //FIXME
|
int kLineHeight = 10; //FIXME
|
||||||
|
|
||||||
FrameBuffer& fb = _boss->instance()->frameBuffer();
|
FrameBuffer& fb = _boss->instance()->frameBuffer();
|
||||||
fb.drawString(_label, _x, _y + (_h - kLineHeight)/2 + 1, _w,
|
fb.font().drawString(_label, _x, _y + (_h - kLineHeight)/2 + 1, _w,
|
||||||
!isEnabled() ? fb.color :
|
!isEnabled() ? kColor :
|
||||||
hilite ? fb.textcolorhi : fb.textcolor, _align);
|
hilite ? kTextColorHi : kTextColor, _align);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -228,7 +229,7 @@ void CheckboxWidget::drawWidget(bool hilite)
|
||||||
FrameBuffer& fb = _boss->instance()->frameBuffer();
|
FrameBuffer& fb = _boss->instance()->frameBuffer();
|
||||||
|
|
||||||
// Draw the box
|
// Draw the box
|
||||||
fb.box(_x, _y, 14, 14, fb.color, fb.shadowcolor);
|
fb.box(_x, _y, 14, 14, kColor, kShadowColor);
|
||||||
|
|
||||||
// If checked, draw cross inside the box
|
// If checked, draw cross inside the box
|
||||||
if(_state)
|
if(_state)
|
||||||
|
@ -236,11 +237,11 @@ void CheckboxWidget::drawWidget(bool hilite)
|
||||||
// fb.drawBitmap(checked_img, _x + 3, _y + 3,
|
// fb.drawBitmap(checked_img, _x + 3, _y + 3,
|
||||||
// isEnabled() ? fb.textcolor : fb.color);
|
// isEnabled() ? fb.textcolor : fb.color);
|
||||||
else
|
else
|
||||||
fb.fillRect(_x + 2, _y + 2, 10, 10, fb.bgcolor);
|
fb.fillRect(_x + 2, _y + 2, 10, 10, kBGColor);
|
||||||
|
|
||||||
// Finally draw the label
|
// Finally draw the label
|
||||||
fb.drawString(_label, _x + 20, _y + 3, _w,
|
fb.font().drawString(_label, _x + 20, _y + 3, _w,
|
||||||
isEnabled() ? fb.textcolor : fb.color);
|
isEnabled() ? kTextColor : kColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -307,16 +308,16 @@ void SliderWidget::drawWidget(bool hilite)
|
||||||
|
|
||||||
// Draw the label, if any
|
// Draw the label, if any
|
||||||
if(_labelWidth > 0)
|
if(_labelWidth > 0)
|
||||||
fb.drawString(_label, _x, _y + 2, _labelWidth,
|
fb.font().drawString(_label, _x, _y + 2, _labelWidth,
|
||||||
isEnabled() ? fb.textcolor : fb.color, kTextAlignRight);
|
isEnabled() ? kTextColor : kColor, kTextAlignRight);
|
||||||
|
|
||||||
// Draw the box
|
// Draw the box
|
||||||
fb.box(_x + _labelWidth, _y, _w - _labelWidth, _h, fb.color, fb.shadowcolor);
|
fb.box(_x + _labelWidth, _y, _w - _labelWidth, _h, kColor, kShadowColor);
|
||||||
|
|
||||||
// Draw the 'bar'
|
// Draw the 'bar'
|
||||||
fb.fillRect(_x + _labelWidth + 2, _y + 2, valueToPos(_value), _h - 4,
|
fb.fillRect(_x + _labelWidth + 2, _y + 2, valueToPos(_value), _h - 4,
|
||||||
!isEnabled() ? fb.color :
|
!isEnabled() ? kColor :
|
||||||
hilite ? fb.textcolorhi : fb.textcolor);
|
hilite ? kTextColorHi : kTextColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" for information on usage and redistribution of
|
||||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||||
//
|
//
|
||||||
// $Id: Widget.hxx,v 1.3 2005-03-11 23:36:30 stephena Exp $
|
// $Id: Widget.hxx,v 1.4 2005-03-13 03:38:41 stephena Exp $
|
||||||
//
|
//
|
||||||
// Based on code from ScummVM - Scumm Interpreter
|
// Based on code from ScummVM - Scumm Interpreter
|
||||||
// Copyright (C) 2002-2004 The ScummVM project
|
// Copyright (C) 2002-2004 The ScummVM project
|
||||||
|
@ -24,6 +24,7 @@
|
||||||
|
|
||||||
class Dialog;
|
class Dialog;
|
||||||
|
|
||||||
|
#include "StellaFont.hxx"
|
||||||
#include "FrameBuffer.hxx"
|
#include "FrameBuffer.hxx"
|
||||||
#include "GuiObject.hxx"
|
#include "GuiObject.hxx"
|
||||||
#include "bspf.hxx"
|
#include "bspf.hxx"
|
||||||
|
@ -61,7 +62,7 @@ enum {
|
||||||
This is the base class for all widgets.
|
This is the base class for all widgets.
|
||||||
|
|
||||||
@author Stephen Anthony
|
@author Stephen Anthony
|
||||||
@version $Id: Widget.hxx,v 1.3 2005-03-11 23:36:30 stephena Exp $
|
@version $Id: Widget.hxx,v 1.4 2005-03-13 03:38:41 stephena Exp $
|
||||||
*/
|
*/
|
||||||
class Widget : public GuiObject
|
class Widget : public GuiObject
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue