Reactivated rom viewer in ROM lauuncher. For now, it only works with

1x snapshots (which the core code can no longer generate) and doesn't
resize properly into 2x mode.

Reworked '-romviewer' commandline argument (and associated UI) to
indicate the zoom level for snapshots in the viewer ('0' means to not
turn it on at all, otherwise '1' or '2').


git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1584 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
stephena 2008-12-29 20:42:15 +00:00
parent c839ddaab1
commit c5de58f13c
19 changed files with 217 additions and 296 deletions

View File

@ -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: FrameBufferGL.cxx,v 1.128 2008-12-28 23:47:09 stephena Exp $ // $Id: FrameBufferGL.cxx,v 1.129 2008-12-29 20:42:15 stephena Exp $
//============================================================================ //============================================================================
#ifdef DISPLAY_OPENGL #ifdef DISPLAY_OPENGL
@ -649,15 +649,15 @@ void FBSurfaceGL::drawChar(const GUI::Font* font, uInt8 chr,
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void FBSurfaceGL::drawBitmap(uInt32* bitmap, Int32 tx, Int32 ty, void FBSurfaceGL::drawBitmap(uInt32* bitmap, uInt32 tx, uInt32 ty,
int color, Int32 h) int color, uInt32 h)
{ {
uInt16* buffer = (uInt16*) myTexture->pixels + ty * myPitch + tx; uInt16* buffer = (uInt16*) myTexture->pixels + ty * myPitch + tx;
for(int y = 0; y < h; ++y) for(uInt32 y = 0; y < h; ++y)
{ {
uInt32 mask = 0xF0000000; uInt32 mask = 0xF0000000;
for(int x = 0; x < 8; ++x, mask >>= 4) for(uInt32 x = 0; x < 8; ++x, mask >>= 4)
if(bitmap[y] & mask) if(bitmap[y] & mask)
buffer[x] = (uInt16) myFB.myDefPalette[color]; buffer[x] = (uInt16) myFB.myDefPalette[color];
@ -665,6 +665,32 @@ void FBSurfaceGL::drawBitmap(uInt32* bitmap, Int32 tx, Int32 ty,
} }
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void FBSurfaceGL::drawBytes(uInt8* data, uInt32 tx, uInt32 ty, uInt32 rowbytes)
{
uInt16* buffer = (uInt16*) myTexture->pixels + ty * myPitch + tx;
for(uInt32 c = 0; c < rowbytes; c += 3)
*buffer++ = SDL_MapRGB(&myFB.myPixelFormat, data[c], data[c+1], data[c+2]);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void FBSurfaceGL::drawSurface(const FBSurface* surface, uInt32 tx, uInt32 ty)
{
const FBSurfaceGL* s = (const FBSurfaceGL*) surface;
SDL_Rect dstrect;
dstrect.x = tx;
dstrect.y = ty;
SDL_Rect srcrect;
srcrect.x = 0;
srcrect.y = 0;
srcrect.w = s->myWidth;
srcrect.h = s->myHeight;
SDL_BlitSurface(s->myTexture, &srcrect, myTexture, &dstrect);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void FBSurfaceGL::addDirtyRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h) void FBSurfaceGL::addDirtyRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h)
{ {
@ -807,47 +833,3 @@ void FBSurfaceGL::setFilter(const string& name)
bool FrameBufferGL::myLibraryLoaded = false; bool FrameBufferGL::myLibraryLoaded = false;
#endif // DISPLAY_OPENGL #endif // DISPLAY_OPENGL
#if 0
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GUI::Surface* FrameBufferGL::createSurface(int width, int height) const
{
SDL_PixelFormat* fmt = myTexture->format;
SDL_Surface* data =
SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 16,
fmt->Rmask, fmt->Gmask, fmt->Bmask, fmt->Amask);
return data ? new GUI::Surface(width, height, data) : NULL;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void FrameBufferGL::drawSurface(const GUI::Surface* surface, Int32 x, Int32 y)
{
SDL_Rect dstrect;
dstrect.x = x;
dstrect.y = y;
SDL_Rect srcrect;
srcrect.x = 0;
srcrect.y = 0;
srcrect.w = surface->myClipWidth;
srcrect.h = surface->myClipHeight;
SDL_BlitSurface(surface->myData, &srcrect, myTexture, &dstrect);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void FrameBufferGL::bytesToSurface(GUI::Surface* surface, int row,
uInt8* data, int rowbytes) const
{
SDL_Surface* s = surface->myData;
uInt16* pixels = (uInt16*) s->pixels;
pixels += (row * s->pitch/2);
for(int c = 0; c < rowbytes; c += 3)
*pixels++ = SDL_MapRGB(s->format, data[c], data[c+1], data[c+2]);
}
#endif

View File

@ -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: FrameBufferGL.hxx,v 1.66 2008-12-28 21:01:55 stephena Exp $ // $Id: FrameBufferGL.hxx,v 1.67 2008-12-29 20:42:15 stephena Exp $
//============================================================================ //============================================================================
#ifndef FRAMEBUFFER_GL_HXX #ifndef FRAMEBUFFER_GL_HXX
@ -35,7 +35,7 @@ class FBSurfaceGL;
This class implements an SDL OpenGL framebuffer. This class implements an SDL OpenGL framebuffer.
@author Stephen Anthony @author Stephen Anthony
@version $Id: FrameBufferGL.hxx,v 1.66 2008-12-28 21:01:55 stephena Exp $ @version $Id: FrameBufferGL.hxx,v 1.67 2008-12-29 20:42:15 stephena Exp $
*/ */
class FrameBufferGL : public FrameBuffer class FrameBufferGL : public FrameBuffer
{ {
@ -176,7 +176,7 @@ class FrameBufferGL : public FrameBuffer
A surface suitable for OpenGL rendering mode. A surface suitable for OpenGL rendering mode.
@author Stephen Anthony @author Stephen Anthony
@version $Id: FrameBufferGL.hxx,v 1.66 2008-12-28 21:01:55 stephena Exp $ @version $Id: FrameBufferGL.hxx,v 1.67 2008-12-29 20:42:15 stephena Exp $
*/ */
class FBSurfaceGL : public FBSurface class FBSurfaceGL : public FBSurface
{ {
@ -192,7 +192,9 @@ class FBSurfaceGL : public FBSurface
void vLine(uInt32 x, uInt32 y, uInt32 y2, int color); void vLine(uInt32 x, uInt32 y, uInt32 y2, int color);
void fillRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h, int color); void fillRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h, int color);
void drawChar(const GUI::Font* font, uInt8 c, uInt32 x, uInt32 y, int color); void drawChar(const GUI::Font* font, uInt8 c, uInt32 x, uInt32 y, int color);
void drawBitmap(uInt32* bitmap, Int32 x, Int32 y, int color, Int32 h = 8); void drawBitmap(uInt32* bitmap, uInt32 x, uInt32 y, int color, uInt32 h = 8);
void drawBytes(uInt8* data, uInt32 x, uInt32 y, uInt32 rowbytes);
void drawSurface(const FBSurface* surface, uInt32 x, uInt32 y);
void addDirtyRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h); void addDirtyRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h);
void getPos(uInt32& x, uInt32& y) const; void getPos(uInt32& x, uInt32& y) const;
void setPos(uInt32 x, uInt32 y); void setPos(uInt32 x, uInt32 y);

View File

@ -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.87 2008-12-28 22:54:04 stephena Exp $ // $Id: FrameBufferSoft.cxx,v 1.88 2008-12-29 20:42:15 stephena Exp $
//============================================================================ //============================================================================
#include <sstream> #include <sstream>
@ -689,27 +689,60 @@ void FBSurfaceSoft::drawChar(const GUI::Font* font, uInt8 chr,
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void FBSurfaceSoft::drawBitmap(uInt32* bitmap, Int32 tx, Int32 ty, void FBSurfaceSoft::drawBitmap(uInt32* bitmap, uInt32 tx, uInt32 ty,
int color, Int32 h) int color, uInt32 h)
{ {
SDL_Rect rect; SDL_Rect rect;
for(int y = 0; y < h; y++) rect.y = ty + myYOffset;
rect.w = rect.h = 1;
for(uInt32 y = 0; y < h; y++)
{ {
rect.x = tx + myXOffset;
uInt32 mask = 0xF0000000; uInt32 mask = 0xF0000000;
for(uInt32 x = 0; x < 8; x++, mask >>= 4)
for(int x = 0; x < 8; x++, mask >>= 4)
{ {
if(bitmap[y] & mask) if(bitmap[y] & mask)
{
rect.x = x + tx + myXOffset;
rect.y = y + ty + myYOffset;
rect.w = rect.h = 1;
SDL_FillRect(mySurface, &rect, myFB.myDefPalette[color]); SDL_FillRect(mySurface, &rect, myFB.myDefPalette[color]);
}
rect.x++;
} }
rect.y++;
} }
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void FBSurfaceSoft::drawBytes(uInt8* data, uInt32 tx, uInt32 ty, uInt32 rowbytes)
{
SDL_Rect rect;
rect.x = tx + myXOffset;
rect.y = ty + myYOffset;
rect.w = rect.h = 1;
for(uInt32 x = 0; x < rowbytes; x += 3)
{
SDL_FillRect(mySurface, &rect,
SDL_MapRGB(myFB.myFormat, data[x], data[x+1], data[x+2]));
rect.x++;
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void FBSurfaceSoft::drawSurface(const FBSurface* surface, uInt32 tx, uInt32 ty)
{
const FBSurfaceSoft* s = (const FBSurfaceSoft*) surface;
SDL_Rect dstrect;
dstrect.x = tx + myXOffset;
dstrect.y = ty + myYOffset;
SDL_Rect srcrect;
srcrect.x = 0;
srcrect.y = 0;
srcrect.w = s->myWidth;
srcrect.h = s->myHeight;
SDL_BlitSurface(s->mySurface, &srcrect, mySurface, &dstrect);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void FBSurfaceSoft::addDirtyRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h) void FBSurfaceSoft::addDirtyRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h)
{ {
@ -835,42 +868,3 @@ void FBSurfaceSoft::recalc()
break; break;
} }
} }
#if 0
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void FrameBufferSoft::drawSurface(const GUI::Surface* surface, Int32 x, Int32 y)
{
SDL_Rect dstrect;
dstrect.x = x * myZoomLevel + myImageDim.x;
dstrect.y = y * myZoomLevel + myImageDim.y;
SDL_Rect srcrect;
srcrect.x = 0;
srcrect.y = 0;
srcrect.w = surface->myClipWidth * myZoomLevel;
srcrect.h = surface->myClipHeight * myZoomLevel;
SDL_BlitSurface(surface->myData, &srcrect, myScreen, &dstrect);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void FrameBufferSoft::bytesToSurface(GUI::Surface* surface, int row,
uInt8* data, int rowbytes) const
{
// Calculate a scanline of zoomed surface data
SDL_Surface* s = surface->myData;
SDL_Rect rect;
rect.x = 0;
rect.y = row * myZoomLevel;
for(int c = 0; c < rowbytes; c += 3)
{
uInt32 pixel = SDL_MapRGB(s->format, data[c], data[c+1], data[c+2]);
rect.x += myZoomLevel;
rect.w = rect.h = myZoomLevel;
SDL_FillRect(surface->myData, &rect, pixel);
}
}
#endif

View File

@ -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.59 2008-12-28 21:01:55 stephena Exp $ // $Id: FrameBufferSoft.hxx,v 1.60 2008-12-29 20:42:15 stephena Exp $
//============================================================================ //============================================================================
#ifndef FRAMEBUFFER_SOFT_HXX #ifndef FRAMEBUFFER_SOFT_HXX
@ -32,7 +32,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.59 2008-12-28 21:01:55 stephena Exp $ @version $Id: FrameBufferSoft.hxx,v 1.60 2008-12-29 20:42:15 stephena Exp $
*/ */
class FrameBufferSoft : public FrameBuffer class FrameBufferSoft : public FrameBuffer
{ {
@ -166,7 +166,7 @@ class FrameBufferSoft : public FrameBuffer
A surface suitable for software rendering mode. A surface suitable for software rendering mode.
@author Stephen Anthony @author Stephen Anthony
@version $Id: FrameBufferSoft.hxx,v 1.59 2008-12-28 21:01:55 stephena Exp $ @version $Id: FrameBufferSoft.hxx,v 1.60 2008-12-29 20:42:15 stephena Exp $
*/ */
class FBSurfaceSoft : public FBSurface class FBSurfaceSoft : public FBSurface
{ {
@ -179,7 +179,9 @@ class FBSurfaceSoft : public FBSurface
void vLine(uInt32 x, uInt32 y, uInt32 y2, int color); void vLine(uInt32 x, uInt32 y, uInt32 y2, int color);
void fillRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h, int color); void fillRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h, int color);
void drawChar(const GUI::Font* font, uInt8 c, uInt32 x, uInt32 y, int color); void drawChar(const GUI::Font* font, uInt8 c, uInt32 x, uInt32 y, int color);
void drawBitmap(uInt32* bitmap, Int32 x, Int32 y, int color, Int32 h = 8); void drawBitmap(uInt32* bitmap, uInt32 x, uInt32 y, int color, uInt32 h = 8);
void drawBytes(uInt8* data, uInt32 x, uInt32 y, uInt32 rowbytes);
void drawSurface(const FBSurface* surface, uInt32 x, uInt32 y);
void addDirtyRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h); void addDirtyRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h);
void getPos(uInt32& x, uInt32& y) const; void getPos(uInt32& x, uInt32& y) const;
void setPos(uInt32 x, uInt32 y); void setPos(uInt32 x, uInt32 y);

View File

@ -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: EventHandler.cxx,v 1.232 2008-12-28 23:47:09 stephena Exp $ // $Id: EventHandler.cxx,v 1.233 2008-12-29 20:42:15 stephena Exp $
//============================================================================ //============================================================================
#include <sstream> #include <sstream>
@ -869,16 +869,6 @@ void EventHandler::handleJoyHatEvent(int stick, int hat, int value)
#endif #endif
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void EventHandler::handleResizeEvent()
{
// For now, only the overlay cares about resize events
// We don't know which one wants it, so we send it to all of them
// These events need to be sent even if the overlay isn't active
if(&myOSystem->launcher())
myOSystem->launcher().handleResizeEvent();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void EventHandler::handleEvent(Event::Type event, int state) void EventHandler::handleEvent(Event::Type event, int state)
{ {

View File

@ -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: EventHandler.hxx,v 1.112 2008-12-27 23:27:32 stephena Exp $ // $Id: EventHandler.hxx,v 1.113 2008-12-29 20:42:15 stephena Exp $
//============================================================================ //============================================================================
#ifndef EVENTHANDLER_HXX #ifndef EVENTHANDLER_HXX
@ -61,7 +61,7 @@ enum EventMode {
mapping can take place. mapping can take place.
@author Stephen Anthony @author Stephen Anthony
@version $Id: EventHandler.hxx,v 1.112 2008-12-27 23:27:32 stephena Exp $ @version $Id: EventHandler.hxx,v 1.113 2008-12-29 20:42:15 stephena Exp $
*/ */
class EventHandler class EventHandler
{ {
@ -213,11 +213,6 @@ class EventHandler
void leaveDebugMode(); void leaveDebugMode();
void takeSnapshot(); void takeSnapshot();
/**
Send a resize event to the handler.
*/
void handleResizeEvent();
/** /**
Send an event directly to the event handler. Send an event directly to the event handler.
These events cannot be remapped. These events cannot be remapped.

View File

@ -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.149 2008-12-28 21:01:55 stephena Exp $ // $Id: FrameBuffer.cxx,v 1.150 2008-12-29 20:42:15 stephena Exp $
//============================================================================ //============================================================================
#include <algorithm> #include <algorithm>
@ -587,7 +587,6 @@ bool FrameBuffer::changeVidMode(int direction)
if(saveModeChange) if(saveModeChange)
myOSystem->settings().setString("tia_filter", vidmode.gfxmode.name); myOSystem->settings().setString("tia_filter", vidmode.gfxmode.name);
myOSystem->eventHandler().handleResizeEvent(); // FIXME - this may no longer be required
refresh(); refresh();
} }
else else

View File

@ -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.109 2008-12-28 21:01:55 stephena Exp $ // $Id: FrameBuffer.hxx,v 1.110 2008-12-29 20:42:15 stephena Exp $
//============================================================================ //============================================================================
#ifndef FRAMEBUFFER_HXX #ifndef FRAMEBUFFER_HXX
@ -91,7 +91,7 @@ enum {
turn drawn here as well. turn drawn here as well.
@author Stephen Anthony @author Stephen Anthony
@version $Id: FrameBuffer.hxx,v 1.109 2008-12-28 21:01:55 stephena Exp $ @version $Id: FrameBuffer.hxx,v 1.110 2008-12-29 20:42:15 stephena Exp $
*/ */
class FrameBuffer class FrameBuffer
{ {
@ -544,7 +544,7 @@ class FrameBuffer
FrameBuffer type. FrameBuffer type.
@author Stephen Anthony @author Stephen Anthony
@version $Id: FrameBuffer.hxx,v 1.109 2008-12-28 21:01:55 stephena Exp $ @version $Id: FrameBuffer.hxx,v 1.110 2008-12-29 20:42:15 stephena Exp $
*/ */
// Text alignment modes for drawString() // Text alignment modes for drawString()
enum TextAlignment { enum TextAlignment {
@ -624,8 +624,28 @@ class FBSurface
@param color The color of the character @param color The color of the character
@param h The height of the data image @param h The height of the data image
*/ */
virtual void drawBitmap(uInt32* bitmap, Int32 x, Int32 y, int color, virtual void drawBitmap(uInt32* bitmap, uInt32 x, uInt32 y, int color,
Int32 h = 8) = 0; uInt32 h = 8) = 0;
/**
This method should be called to convert and copy a given row of RGB
data into a FrameBuffer surface.
@param data The data in uInt8 R/G/B format
@param row The row of the surface the data should be placed in
@param rowbytes The number of bytes in row of 'data'
*/
virtual void drawBytes(uInt8* data, uInt32 x, uInt32 y, uInt32 rowbytes) = 0;
/**
This method should be called copy the contents of the given
surface into the FrameBuffer surface.
@param surface The data to draw
@param x The x coordinate
@param y The y coordinate
*/
virtual void drawSurface(const FBSurface* surface, uInt32 x, uInt32 y) = 0;
/** /**
This method should be called to add a dirty rectangle This method should be called to add a dirty rectangle
@ -737,29 +757,3 @@ class FBSurface
}; };
#endif #endif
#if 0
/**
This method should be called to draw an SDL surface.
@param surface The data to draw
@param x The x coordinate
@param y The y coordinate
*/
virtual void drawSurface(const GUI::Surface* surface, Int32 x, Int32 y) = 0;
/**
This method should be called to convert and copy a given row of RGB
data into an SDL surface.
@param surface The data to draw
@param row The row of the surface the data should be placed in
@param data The data in uInt8 R/G/B format
@param rowbytes The number of bytes in row of 'data'
*/
virtual void bytesToSurface(GUI::Surface* surface, int row,
uInt8* data, int rowbytes) const = 0;
#endif

View File

@ -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: OSystem.cxx,v 1.135 2008-12-27 23:27:32 stephena Exp $ // $Id: OSystem.cxx,v 1.136 2008-12-29 20:42:15 stephena Exp $
//============================================================================ //============================================================================
#include <cassert> #include <cassert>
@ -341,10 +341,6 @@ bool OSystem::createFrameBuffer()
// Setup the SDL joysticks (must be done after FrameBuffer is created) // Setup the SDL joysticks (must be done after FrameBuffer is created)
myEventHandler->setupJoysticks(); myEventHandler->setupJoysticks();
// FIXME - this next line can probably be removed
// Let the system know that we've possibly resized the display
myEventHandler->handleResizeEvent();
// Update the UI palette // Update the UI palette
setUIPalette(); setUIPalette();
} }

View File

@ -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: Settings.cxx,v 1.150 2008-12-28 21:01:55 stephena Exp $ // $Id: Settings.cxx,v 1.151 2008-12-29 20:42:15 stephena Exp $
//============================================================================ //============================================================================
#include <cassert> #include <cassert>
@ -88,7 +88,7 @@ Settings::Settings(OSystem* osystem)
// ROM browser options // ROM browser options
setInternal("launcherres", "640x480"); setInternal("launcherres", "640x480");
setInternal("launcherfont", "small"); setInternal("launcherfont", "small");
setInternal("romviewer", "false"); setInternal("romviewer", "0");
setInternal("lastrom", ""); setInternal("lastrom", "");
// UI-related options // UI-related options
@ -259,6 +259,12 @@ void Settings::validate()
s = getString("launcherfont"); s = getString("launcherfont");
if(s != "small" && s != "large") if(s != "small" && s != "large")
setInternal("launcherfont", "small"); setInternal("launcherfont", "small");
i = getInt("romviewer");
if(i < 0)
setInternal("romviewer", "0");
else if(i > 2)
setInternal("romviewer", "2");
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -315,7 +321,7 @@ void Settings::usage()
<< " -pspeed <number> Speed of digital emulated paddle movement (1-15)\n" << " -pspeed <number> Speed of digital emulated paddle movement (1-15)\n"
<< " -sa1 <left|right> Stelladaptor 1 emulates specified joystick port\n" << " -sa1 <left|right> Stelladaptor 1 emulates specified joystick port\n"
<< " -sa2 <left|right> Stelladaptor 2 emulates specified joystick port\n" << " -sa2 <left|right> Stelladaptor 2 emulates specified joystick port\n"
<< " -romviewer <1|0> Show ROM info viewer in ROM launcher\n" << " -romviewer <0|1|2> Show ROM info viewer at given zoom level in ROM launcher (0 for off)\n"
<< " -autoslot <1|0> Automatically switch to next save slot when state saving\n" << " -autoslot <1|0> Automatically switch to next save slot when state saving\n"
<< " -ssdir <path> The directory to save snapshot files to\n" << " -ssdir <path> The directory to save snapshot files to\n"
<< " -sssingle <1|0> Generate single snapshot instead of many\n" << " -sssingle <1|0> Generate single snapshot instead of many\n"

View File

@ -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: DialogContainer.cxx,v 1.51 2008-12-28 21:01:55 stephena Exp $ // $Id: DialogContainer.cxx,v 1.52 2008-12-29 20:42:15 stephena Exp $
//============================================================================ //============================================================================
#include "OSystem.hxx" #include "OSystem.hxx"
@ -323,13 +323,6 @@ void DialogContainer::handleJoyHatEvent(int stick, int hat, int value)
activeDialog->handleJoyHat(stick, hat, value); activeDialog->handleJoyHat(stick, hat, value);
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void DialogContainer::handleResizeEvent()
{
// Send resize event to base dialog; it's up to the dialog to actually listen
myBaseDialog->handleCommand(NULL, kResizeCmd, 0, 0);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void DialogContainer::reset() void DialogContainer::reset()
{ {

View File

@ -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: DialogContainer.hxx,v 1.26 2008-12-28 21:01:55 stephena Exp $ // $Id: DialogContainer.hxx,v 1.27 2008-12-29 20:42:15 stephena Exp $
//============================================================================ //============================================================================
#ifndef DIALOG_CONTAINER_HXX #ifndef DIALOG_CONTAINER_HXX
@ -36,7 +36,7 @@ class OSystem;
a stack, and handles their events. a stack, and handles their events.
@author Stephen Anthony @author Stephen Anthony
@version $Id: DialogContainer.hxx,v 1.26 2008-12-28 21:01:55 stephena Exp $ @version $Id: DialogContainer.hxx,v 1.27 2008-12-29 20:42:15 stephena Exp $
*/ */
class DialogContainer class DialogContainer
{ {
@ -118,11 +118,6 @@ class DialogContainer
*/ */
void handleJoyHatEvent(int stick, int hat, int value); void handleJoyHatEvent(int stick, int hat, int value);
/**
Handle a resize event.
*/
void handleResizeEvent();
/** /**
Draw the stack of menus (full indicates to redraw all items). Draw the stack of menus (full indicates to redraw all items).
*/ */

View File

@ -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: GuiObject.hxx,v 1.25 2008-06-13 13:14:51 stephena Exp $ // $Id: GuiObject.hxx,v 1.26 2008-12-29 20:42:15 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
@ -43,8 +43,7 @@ enum {
kSetPositionCmd = 'SETP', kSetPositionCmd = 'SETP',
kTabChangedCmd = 'TBCH', kTabChangedCmd = 'TBCH',
kCheckActionCmd = 'CBAC', kCheckActionCmd = 'CBAC',
kRefreshAllCmd = 'REFA', kRefreshAllCmd = 'REFA'
kResizeCmd = 'RESZ'
}; };
enum { enum {
@ -55,7 +54,7 @@ enum {
This is the base class for all GUI objects/widgets. This is the base class for all GUI objects/widgets.
@author Stephen Anthony @author Stephen Anthony
@version $Id: GuiObject.hxx,v 1.25 2008-06-13 13:14:51 stephena Exp $ @version $Id: GuiObject.hxx,v 1.26 2008-12-29 20:42:15 stephena Exp $
*/ */
class GuiObject : public CommandReceiver class GuiObject : public CommandReceiver
{ {

View File

@ -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: LauncherDialog.cxx,v 1.89 2008-11-30 17:28:03 stephena Exp $ // $Id: LauncherDialog.cxx,v 1.90 2008-12-29 20:42:15 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
@ -53,8 +53,7 @@ LauncherDialog::LauncherDialog(OSystem* osystem, DialogContainer* parent,
myGameList(NULL), myGameList(NULL),
myProgressBar(NULL), myProgressBar(NULL),
myRomInfoWidget(NULL), myRomInfoWidget(NULL),
mySelectedItem(0), mySelectedItem(0)
myRomInfoFlag(false)
{ {
const GUI::Font& font = instance().launcherFont(); const GUI::Font& font = instance().launcherFont();
@ -64,15 +63,6 @@ LauncherDialog::LauncherDialog(OSystem* osystem, DialogContainer* parent,
int xpos = 0, ypos = 0, lwidth = 0; int xpos = 0, ypos = 0, lwidth = 0;
WidgetArray wid; WidgetArray wid;
// Check if we want the ROM info viewer
// Make sure it will fit within the current bounds
myRomInfoFlag = instance().settings().getBool("romviewer");
if((w < 640 || h < 480) && myRomInfoFlag)
{
cerr << "ERROR: ROM launcher too small, deactivating ROM info viewer" << endl;
myRomInfoFlag = false;
}
// Show game name // Show game name
lwidth = font.getStringWidth("Select an item from the list ..."); lwidth = font.getStringWidth("Select an item from the list ...");
xpos += 10; ypos += 8; xpos += 10; ypos += 8;
@ -87,7 +77,16 @@ LauncherDialog::LauncherDialog(OSystem* osystem, DialogContainer* parent,
// Add list with game titles // Add list with game titles
xpos = 10; ypos += fontHeight + 5; xpos = 10; ypos += fontHeight + 5;
int listWidth = myRomInfoFlag ? _w - 350 : _w - 20;
// Before we add the list, we need to know the size of the RomInfoWidget
int romWidth = 0;
int romSize = instance().settings().getInt("romviewer");
if(romSize > 1 && w >= 1000 && h >= 800)
romWidth = 375*2;
else if(romSize > 0 && w >= 640 && h >= 480)
romWidth = 375;
int listWidth = _w - (romWidth > 0 ? romWidth+25 : 20);
myList = new StringListWidget(this, font, xpos, ypos, myList = new StringListWidget(this, font, xpos, ypos,
listWidth, _h - 28 - bheight - 2*fontHeight); listWidth, _h - 28 - bheight - 2*fontHeight);
myList->setNumberingMode(kListNumberingOff); myList->setNumberingMode(kListNumberingOff);
@ -95,12 +94,11 @@ LauncherDialog::LauncherDialog(OSystem* osystem, DialogContainer* parent,
wid.push_back(myList); wid.push_back(myList);
// Add ROM info area (if enabled) // Add ROM info area (if enabled)
if(myRomInfoFlag) if(romWidth > 0)
{ {
xpos += myList->getWidth() + 15; xpos += myList->getWidth() + 15;
myRomInfoWidget = new RomInfoWidget(this, instance().font(), xpos, ypos, myRomInfoWidget = new RomInfoWidget(this, instance().consoleFont(), xpos, ypos,
326, myList->getHeight()); romWidth, myList->getHeight());
wid.push_back(myRomInfoWidget);
} }
// Add note textwidget to show any notes for the currently selected ROM // Add note textwidget to show any notes for the currently selected ROM
@ -202,7 +200,7 @@ void LauncherDialog::loadConfig()
} }
Dialog::setFocus(getFocusList()[mySelectedItem]); Dialog::setFocus(getFocusList()[mySelectedItem]);
if(myRomInfoFlag) if(myRomInfoWidget)
myRomInfoWidget->loadConfig(); myRomInfoWidget->loadConfig();
} }
@ -300,7 +298,7 @@ void LauncherDialog::loadDirListing()
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void LauncherDialog::loadRomInfo() void LauncherDialog::loadRomInfo()
{ {
if(!(myRomInfoFlag && myRomInfoWidget)) return; if(!myRomInfoWidget) return;
int item = myList->getSelected(); int item = myList->getSelected();
if(item < 0) return; if(item < 0) return;
@ -314,8 +312,7 @@ void LauncherDialog::loadRomInfo()
// Get the properties for this entry // Get the properties for this entry
Properties props; Properties props;
const string& md5 = myGameList->md5(item); instance().propSet().getMD5(myGameList->md5(item), props);
instance().propSet().getMD5(md5, props);
myRomInfoWidget->setProperties(props); myRomInfoWidget->setProperties(props);
} }
@ -406,16 +403,6 @@ void LauncherDialog::handleCommand(CommandSender* sender, int cmd,
updateListing(); updateListing();
break; break;
case kResizeCmd:
// Instead of figuring out how to resize the snapshot image,
// we just reload it
if(myRomInfoFlag)
{
myRomInfoWidget->initialize();
loadRomInfo();
}
break;
default: default:
Dialog::handleCommand(sender, cmd, data, 0); Dialog::handleCommand(sender, cmd, data, 0);
} }

View File

@ -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: LauncherDialog.hxx,v 1.35 2008-11-30 17:28:03 stephena Exp $ // $Id: LauncherDialog.hxx,v 1.36 2008-12-29 20:42:15 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
@ -92,7 +92,7 @@ class LauncherDialog : public Dialog
private: private:
int mySelectedItem; int mySelectedItem;
bool myRomInfoFlag; int myRomInfoSize;
FilesystemNode myCurrentNode; FilesystemNode myCurrentNode;
enum { enum {

View File

@ -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: RomInfoWidget.cxx,v 1.10 2008-12-28 21:01:55 stephena Exp $ // $Id: RomInfoWidget.cxx,v 1.11 2008-12-29 20:42:15 stephena Exp $
//============================================================================ //============================================================================
#include <cstring> #include <cstring>
@ -31,24 +31,18 @@
RomInfoWidget::RomInfoWidget(GuiObject* boss, const GUI::Font& font, RomInfoWidget::RomInfoWidget(GuiObject* boss, const GUI::Font& font,
int x, int y, int w, int h) int x, int y, int w, int h)
: Widget(boss, font, x, y, w, h), : Widget(boss, font, x, y, w, h),
// mySurface(NULL), mySurface(NULL),
myDrawSurface(false), mySurfaceID(-1),
mySurfaceIsValid(false),
myHaveProperties(false) myHaveProperties(false)
{ {
_flags = WIDGET_ENABLED | WIDGET_RETAIN_FOCUS; _flags = WIDGET_ENABLED;
_bgcolor = _bgcolorhi = kWidColor; _bgcolor = _bgcolorhi = kWidColor;
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RomInfoWidget::~RomInfoWidget() RomInfoWidget::~RomInfoWidget()
{ {
/*
if(mySurface)
{
delete mySurface;
mySurface = NULL;
}
*/
myRomInfo.clear(); myRomInfo.clear();
} }
@ -68,7 +62,6 @@ void RomInfoWidget::loadConfig()
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void RomInfoWidget::setProperties(const Properties& props) void RomInfoWidget::setProperties(const Properties& props)
{ {
return;
myHaveProperties = true; myHaveProperties = true;
myProperties = props; myProperties = props;
@ -83,8 +76,7 @@ return;
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void RomInfoWidget::clearProperties() void RomInfoWidget::clearProperties()
{ {
return; myHaveProperties = mySurfaceIsValid = false;
myHaveProperties = myDrawSurface = false;
// Decide whether the information should be shown immediately // Decide whether the information should be shown immediately
if(instance().eventHandler().state() == EventHandler::S_LAUNCHER) if(instance().eventHandler().state() == EventHandler::S_LAUNCHER)
@ -93,29 +85,23 @@ return;
} }
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void RomInfoWidget::initialize()
{
// Delete surface; a new one will be created by parseProperties
// delete mySurface;
// mySurface = NULL;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void RomInfoWidget::parseProperties() void RomInfoWidget::parseProperties()
{ {
// FIXME
#if 0
// Initialize to empty properties entry
mySurfaceErrorMsg = "";
myDrawSurface = false;
myRomInfo.clear();
// Check if a surface has ever been created; if so, we use it // Check if a surface has ever been created; if so, we use it
// The surface will always be the maximum size, but sometimes we'll // The surface will always be the maximum size, but sometimes we'll
// only draw certain parts of it // only draw certain parts of it
mySurface = instance().frameBuffer().surface(mySurfaceID);
if(mySurface == NULL) if(mySurface == NULL)
mySurface = instance().frameBuffer().createSurface(320, 260); {
mySurfaceID = instance().frameBuffer().allocateSurface(320, 260, false);
mySurface = instance().frameBuffer().surface(mySurfaceID);
}
// Initialize to empty properties entry
mySurfaceErrorMsg = "";
mySurfaceIsValid = false;
myRomInfo.clear();
// The input stream for the PNG file // The input stream for the PNG file
ifstream in; ifstream in;
@ -155,13 +141,12 @@ void RomInfoWidget::parseProperties()
if(!parseIHDR(width, height, data, size)) if(!parseIHDR(width, height, data, size))
throw "Invalid PNG image (IHDR)"; throw "Invalid PNG image (IHDR)";
mySurface->setClipWidth(width); mySurface->setWidth(width);
mySurface->setClipHeight(height); mySurface->setHeight(height);
} }
else if(type == "IDAT") else if(type == "IDAT")
{ {
if(!parseIDATChunk(instance().frameBuffer(), mySurface, if(!parseIDATChunk(mySurface, width, height, data, size))
width, height, data, size))
throw "PNG image too large"; throw "PNG image too large";
} }
else if(type == "tEXt") else if(type == "tEXt")
@ -171,11 +156,11 @@ void RomInfoWidget::parseProperties()
} }
in.close(); in.close();
myDrawSurface = true; mySurfaceIsValid = true;
} }
catch(const char* msg) catch(const char* msg)
{ {
myDrawSurface = false; mySurfaceIsValid = false;
myRomInfo.clear(); myRomInfo.clear();
if(data) delete[] data; if(data) delete[] data;
data = NULL; data = NULL;
@ -196,40 +181,36 @@ void RomInfoWidget::parseProperties()
myRomInfo.push_back("Controllers: " + myProperties.get(Controller_Left) + myRomInfo.push_back("Controllers: " + myProperties.get(Controller_Left) +
" (left), " + myProperties.get(Controller_Right) + " (right)"); " (left), " + myProperties.get(Controller_Right) + " (right)");
// TODO - add the PNG tEXt chunks // TODO - add the PNG tEXt chunks
#endif
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void RomInfoWidget::drawWidget(bool hilite) void RomInfoWidget::drawWidget(bool hilite)
{ {
// FIXME FBSurface& s = dialog().surface();
#if 0
FrameBuffer& fb = instance().frameBuffer();
fb.fillRect(_x+2, _y+2, _w-4, _h-4, kWidColor); s.fillRect(_x+2, _y+2, _w-4, _h-4, kWidColor);
fb.box(_x, _y, _w, _h, kColor, kShadowColor); s.box(_x, _y, _w, _h, kColor, kShadowColor);
fb.box(_x, _y+264, _w, _h-264, kColor, kShadowColor); s.box(_x, _y+275, _w, _h-275, kColor, kShadowColor);
if(!myHaveProperties) return; if(!myHaveProperties) return;
if(myDrawSurface && mySurface) if(mySurfaceIsValid)
{ {
int x = (_w - mySurface->getClipWidth()) >> 1; uInt32 x = ((_w - mySurface->getWidth()) >> 1) + getAbsX();
int y = (266 - mySurface->getClipHeight()) >> 1; uInt32 y = ((275 - mySurface->getHeight()) >> 1) + getAbsY();
fb.drawSurface(mySurface, x + getAbsX(), y + getAbsY()); s.drawSurface(mySurface, x, y);
} }
else if(mySurfaceErrorMsg != "") else if(mySurfaceErrorMsg != "")
{ {
int x = _x + ((_w - _font->getStringWidth(mySurfaceErrorMsg)) >> 1); int x = _x + ((_w - _font->getStringWidth(mySurfaceErrorMsg)) >> 1);
fb.drawString(_font, mySurfaceErrorMsg, x, 120, _w - 10, _textcolor); s.drawString(_font, mySurfaceErrorMsg, x, 120, _w - 10, _textcolor);
} }
int xpos = _x + 5, ypos = _y + 266 + 5; int xpos = _x + 5, ypos = _y + 280 + 5;
for(unsigned int i = 0; i < myRomInfo.size(); ++i) for(unsigned int i = 0; i < myRomInfo.size(); ++i)
{ {
fb.drawString(_font, myRomInfo[i], xpos, ypos, _w - 10, _textcolor); s.drawString(_font, myRomInfo[i], xpos, ypos, _w - 10, _textcolor);
ypos += _font->getLineHeight(); ypos += _font->getLineHeight();
} }
#endif
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -284,11 +265,9 @@ bool RomInfoWidget::parseIHDR(int& width, int& height, uInt8* data, int size)
return memcmp(trailer, data + 8, 5) == 0; return memcmp(trailer, data + 8, 5) == 0;
} }
// FIXME
#if 0
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool RomInfoWidget::parseIDATChunk(const FrameBuffer& fb, GUI::Surface* surface, bool RomInfoWidget::parseIDATChunk(FBSurface* surface, int width, int height,
int width, int height, uInt8* data, int size) uInt8* data, int size)
{ {
// The entire decompressed image data // The entire decompressed image data
uLongf bufsize = (width * 3 + 1) * height; uLongf bufsize = (width * 3 + 1) * height;
@ -300,8 +279,8 @@ bool RomInfoWidget::parseIDATChunk(const FrameBuffer& fb, GUI::Surface* surface,
uInt8* buf_ptr = buffer; uInt8* buf_ptr = buffer;
for(int row = 0; row < height; row++, buf_ptr += pitch) for(int row = 0; row < height; row++, buf_ptr += pitch)
{ {
buf_ptr++; // skip past first byte (PNG filter type) buf_ptr++; // skip past first byte (PNG filter type)
fb.bytesToSurface(surface, row, buf_ptr, pitch); surface->drawBytes(buf_ptr, 0, row, pitch);
} }
delete[] buffer; delete[] buffer;
return true; return true;
@ -309,7 +288,6 @@ bool RomInfoWidget::parseIDATChunk(const FrameBuffer& fb, GUI::Surface* surface,
delete[] buffer; delete[] buffer;
return false; return false;
} }
#endif
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string RomInfoWidget::parseTextChunk(uInt8* data, int size) string RomInfoWidget::parseTextChunk(uInt8* data, int size)

View File

@ -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: RomInfoWidget.hxx,v 1.5 2008-06-19 12:01:31 stephena Exp $ // $Id: RomInfoWidget.hxx,v 1.6 2008-12-29 20:42:15 stephena Exp $
//============================================================================ //============================================================================
#ifndef ROM_INFO_WIDGET_HXX #ifndef ROM_INFO_WIDGET_HXX
@ -37,7 +37,6 @@ class RomInfoWidget : public Widget
void setProperties(const Properties& props); void setProperties(const Properties& props);
void clearProperties(); void clearProperties();
void initialize();
void loadConfig(); void loadConfig();
protected: protected:
@ -48,16 +47,17 @@ class RomInfoWidget : public Widget
static bool isValidPNGHeader(uInt8* header); static bool isValidPNGHeader(uInt8* header);
static void readPNGChunk(ifstream& in, string& type, uInt8** data, int& size); static void readPNGChunk(ifstream& in, string& type, uInt8** data, int& size);
static bool parseIHDR(int& width, int& height, uInt8* data, int size); static bool parseIHDR(int& width, int& height, uInt8* data, int size);
// static bool parseIDATChunk(const FrameBuffer& fb, GUI::Surface* surface, static bool parseIDATChunk(FBSurface* surface, int width, int height,
// int width, int height, uInt8* data, int size); uInt8* data, int size);
static string parseTextChunk(uInt8* data, int size); static string parseTextChunk(uInt8* data, int size);
private: private:
// Surface holding the scaled PNG image // Surface id and pointer holding the scaled PNG image
// GUI::Surface* mySurface; FBSurface* mySurface;
int mySurfaceID;
// Whether the surface should be redrawn by drawWidget() // Whether the surface should be redrawn by drawWidget()
bool myDrawSurface; bool mySurfaceIsValid;
// Some ROM properties info, as well as 'tEXt' chunks from the PNG image // Some ROM properties info, as well as 'tEXt' chunks from the PNG image
StringList myRomInfo; StringList myRomInfo;

View File

@ -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: UIDialog.cxx,v 1.15 2008-07-25 12:41:41 stephena Exp $ // $Id: UIDialog.cxx,v 1.16 2008-12-29 20:42:15 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
@ -96,6 +96,7 @@ UIDialog::UIDialog(OSystem* osystem, DialogContainer* parent,
ypos += lineHeight + 4; ypos += lineHeight + 4;
// Launcher font // Launcher font
pwidth = font.getStringWidth("2x (1000x800)");
items.clear(); items.clear();
items.push_back("Small", "small"); items.push_back("Small", "small");
items.push_back("Large", "large"); items.push_back("Large", "large");
@ -106,10 +107,14 @@ UIDialog::UIDialog(OSystem* osystem, DialogContainer* parent,
ypos += lineHeight + 4; ypos += lineHeight + 4;
// ROM launcher info/snapshot viewer // ROM launcher info/snapshot viewer
xpos += ((_w - 40 - font.getStringWidth("ROM Info viewer")) >> 1); items.clear();
myRomViewerCheckbox = new CheckboxWidget(myTab, font, xpos, ypos, items.push_back("Off", "0");
"ROM Info viewer", 0); items.push_back("1x (640x480) ", "1");
wid.push_back(myRomViewerCheckbox); items.push_back("2x (1000x800)", "2");
myRomViewerPopup =
new PopUpWidget(myTab, font, xpos, ypos+1, pwidth, lineHeight, items,
"ROM Info viewer: ", lwidth);
wid.push_back(myRomViewerPopup);
// Add message concerning usage // Add message concerning usage
xpos = vBorder; ypos += 2*(lineHeight + 4); xpos = vBorder; ypos += 2*(lineHeight + 4);
@ -126,6 +131,7 @@ UIDialog::UIDialog(OSystem* osystem, DialogContainer* parent,
wid.clear(); wid.clear();
tabID = myTab->addTab(" Debugger "); tabID = myTab->addTab(" Debugger ");
lwidth = font.getStringWidth("Debugger Height: "); lwidth = font.getStringWidth("Debugger Height: ");
pwidth = font.getStringWidth("Standard");
xpos = ypos = vBorder; xpos = ypos = vBorder;
// Debugger width and height // Debugger width and height
@ -248,11 +254,12 @@ void UIDialog::loadConfig()
myLauncherHeightLabel->setValue(h); myLauncherHeightLabel->setValue(h);
// Launcher font // Launcher font
const string& s = instance().settings().getString("launcherfont"); const string& font = instance().settings().getString("launcherfont");
myLauncherFontPopup->setSelected(s, "small"); myLauncherFontPopup->setSelected(font, "small");
// ROM launcher info viewer // ROM launcher info viewer
myRomViewerCheckbox->setState(instance().settings().getBool("romviewer")); const string& viewer = instance().settings().getString("romviewer");
myRomViewerPopup->setSelected(viewer, "0");
// Debugger size // Debugger size
instance().settings().getSize("debuggerres", w, h); instance().settings().getSize("debuggerres", w, h);
@ -291,7 +298,8 @@ void UIDialog::saveConfig()
myLauncherFontPopup->getSelectedTag()); myLauncherFontPopup->getSelectedTag());
// ROM launcher info viewer // ROM launcher info viewer
instance().settings().setBool("romviewer", myRomViewerCheckbox->getState()); instance().settings().setString("romviewer",
myRomViewerPopup->getSelectedTag());
// Debugger size // Debugger size
instance().settings().setSize("debuggerres", instance().settings().setSize("debuggerres",
@ -320,7 +328,8 @@ void UIDialog::setDefaults()
myLauncherWidthLabel->setValue(w); myLauncherWidthLabel->setValue(w);
myLauncherHeightSlider->setValue(h); myLauncherHeightSlider->setValue(h);
myLauncherHeightLabel->setValue(h); myLauncherHeightLabel->setValue(h);
myRomViewerCheckbox->setState(false); myLauncherFontPopup->setSelected("small", "");
myRomViewerPopup->setSelected("0", "");
break; break;
} }

View File

@ -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: UIDialog.hxx,v 1.8 2008-03-23 16:22:46 stephena Exp $ // $Id: UIDialog.hxx,v 1.9 2008-12-29 20:42:15 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
@ -50,7 +50,7 @@ class UIDialog : public Dialog
SliderWidget* myLauncherHeightSlider; SliderWidget* myLauncherHeightSlider;
StaticTextWidget* myLauncherHeightLabel; StaticTextWidget* myLauncherHeightLabel;
PopUpWidget* myLauncherFontPopup; PopUpWidget* myLauncherFontPopup;
CheckboxWidget* myRomViewerCheckbox; PopUpWidget* myRomViewerPopup;
// Debugger options // Debugger options
SliderWidget* myDebuggerWidthSlider; SliderWidget* myDebuggerWidthSlider;