Implemented 'Fill to scanline' in TiaOutputWidget. Currently, you

have to be in 'scanline' mode for it to work (which means you must
have previously selected 'Alt l' or pressed the 'Scanline+1' button).
This is similar to the bug where stepping shows partial changes
only when you've first selected scanline mode; this bug will be
fixed shortly.

Fixed coordinate issues in TiaZoomWidget and when setting position
from TiaOutputWidget.  The position selected in TiaOutputWidget
now becomes the center point in the zoomed image.

Zooming in TiaZoomWidget now operates on the center coordinate.  That
means you actually zoom in on the center of the image (vs. before,
where you zoomed on the upper-left area).


git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@757 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
stephena 2005-09-01 16:49:52 +00:00
parent 1cefd6893e
commit 797cf67ee7
3 changed files with 56 additions and 30 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: TiaOutputWidget.cxx,v 1.2 2005-08-31 22:34:43 stephena Exp $ // $Id: TiaOutputWidget.cxx,v 1.3 2005-09-01 16:49:52 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
@ -25,6 +25,8 @@
#include "GuiObject.hxx" #include "GuiObject.hxx"
#include "ContextMenu.hxx" #include "ContextMenu.hxx"
#include "TiaZoomWidget.hxx" #include "TiaZoomWidget.hxx"
#include "Debugger.hxx"
#include "TIADebug.hxx"
#include "TiaOutputWidget.hxx" #include "TiaOutputWidget.hxx"
@ -82,18 +84,13 @@ void TiaOutputWidget::advance(int frames)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void TiaOutputWidget::handleMouseDown(int x, int y, int button, int clickCount) void TiaOutputWidget::handleMouseDown(int x, int y, int button, int clickCount)
{ {
// FIXME - these coords aren't yet accurate, but that doesn't stop // Grab right mouse button for command context menu
// us from implementing the functionality
int xstart = atoi(instance()->console().properties().get("Display.XStart").c_str());
int ystart = atoi(instance()->console().properties().get("Display.YStart").c_str());
// Grab right mouse button for zoom context menu
if(button == 2) if(button == 2)
{ {
myClickX = x + getAbsX(); myClickX = x;
myClickY = y + getAbsY(); myClickY = y;
myMenu->setPos(myClickX, myClickY); myMenu->setPos(x + getAbsX(), y + getAbsY());
myMenu->show(); myMenu->show();
} }
} }
@ -101,14 +98,24 @@ void TiaOutputWidget::handleMouseDown(int x, int y, int button, int clickCount)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void TiaOutputWidget::handleCommand(CommandSender* sender, int cmd, int data, int id) void TiaOutputWidget::handleCommand(CommandSender* sender, int cmd, int data, int id)
{ {
// FIXME - these coords aren't yet accurate, but that doesn't stop
// us from implementing the functionality
// Maybe they're accurate enough for our purposes??
int xstart = atoi(instance()->console().properties().get("Display.XStart").c_str());
int ystart = atoi(instance()->console().properties().get("Display.YStart").c_str());
switch(cmd) switch(cmd)
{ {
case kCMenuItemSelectedCmd: case kCMenuItemSelectedCmd:
switch(myMenu->getSelected()) switch(myMenu->getSelected())
{ {
case 0: case 0:
cerr << "Fill to scanline\n"; {
int lines = myClickY + ystart - instance()->debugger().tiaDebug().scanlines();
if(lines > 0)
instance()->debugger().nextScanline(lines);
break; break;
}
case 1: case 1:
cerr << "Set breakpoint\n"; cerr << "Set breakpoint\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: TiaZoomWidget.cxx,v 1.2 2005-08-31 22:34:43 stephena Exp $ // $Id: TiaZoomWidget.cxx,v 1.3 2005-09-01 16:49:52 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
@ -46,6 +46,8 @@ TiaZoomWidget::TiaZoomWidget(GuiObject* boss, int x, int y)
myNumRows = (_h - 4) / myZoomLevel; myNumRows = (_h - 4) / myZoomLevel;
myXoff = 0; myXoff = 0;
myYoff = 0; myYoff = 0;
myXCenter = myNumCols >> 1;
myYCenter = myNumRows >> 1;
// Create context menu for zoom levels // Create context menu for zoom levels
myMenu = new ContextMenu(this, instance()->consoleFont()); myMenu = new ContextMenu(this, instance()->consoleFont());
@ -73,8 +75,11 @@ void TiaZoomWidget::loadConfig()
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void TiaZoomWidget::setPos(int x, int y) void TiaZoomWidget::setPos(int x, int y)
{ {
myXoff = x; // Center zoom on given x,y point
myYoff = y; myXCenter = x >> 1;
myYCenter = y;
//cerr << " ==> myXCenter = " << myXCenter << ", myYCenter = " << myYCenter << endl;
recalc(); recalc();
} }
@ -96,19 +101,32 @@ void TiaZoomWidget::zoom(int level)
void TiaZoomWidget::recalc() void TiaZoomWidget::recalc()
{ {
// Don't go past end of framebuffer // Don't go past end of framebuffer
int imageWidth = instance()->console().mediaSource().width(); const int width = instance()->console().mediaSource().width(),
int imageHeight = instance()->console().mediaSource().height(); height = instance()->console().mediaSource().height();
if(myXoff < 0) // Figure out the bounding rectangle for the current center coords
myXoff = 0; const int xoff = myNumCols >> 1,
else if(myXoff > imageWidth - myNumCols) yoff = myNumRows >> 1;
myXoff = imageWidth - myNumCols;
else if(myYoff < 0)
myYoff = 0;
else if(myYoff > imageHeight - myNumRows)
myYoff = imageHeight - myNumRows;
setDirty(); draw(); if(myXCenter < xoff)
myXCenter = xoff;
else if(myXCenter + xoff >= width)
myXCenter = width - xoff - 1;
else if(myYCenter < yoff)
myYCenter = yoff;
else if(myYCenter + yoff >= height)
myYCenter = height - yoff - 1;
// Only redraw when necessary
int oldXoff = myXoff, oldYoff = myYoff;
myXoff = myXCenter - (myNumCols >> 1);
myYoff = myYCenter - (myNumRows >> 1);
if(oldXoff != myXoff || oldYoff != myYoff)
{
setDirty(); draw();
//cerr << " OLD ==> myXoff: " << oldXoff << ", myYoff = " << oldYoff << endl;
//cerr << " NEW ==> myXoff: " << myXoff << ", myYoff = " << myYoff << endl << endl;
}
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -130,22 +148,22 @@ bool TiaZoomWidget::handleKeyDown(int ascii, int keycode, int modifiers)
switch (keycode) switch (keycode)
{ {
case 256+17: // up arrow case 256+17: // up arrow
myYoff -= 4; myYCenter -= 4;
handled = true; handled = true;
break; break;
case 256+18: // down arrow case 256+18: // down arrow
myYoff += 4; myYCenter += 4;
handled = true; handled = true;
break; break;
case 256+20: // left arrow case 256+20: // left arrow
myXoff -= 2; myXCenter -= 2;
handled = true; handled = true;
break; break;
case 256+19: // right arrow case 256+19: // right arrow
myXoff += 2; myXCenter += 2;
handled = true; handled = true;
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: TiaZoomWidget.hxx,v 1.2 2005-08-31 22:34:43 stephena Exp $ // $Id: TiaZoomWidget.hxx,v 1.3 2005-09-01 16:49:52 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
@ -56,6 +56,7 @@ class TiaZoomWidget : public Widget, public CommandSender
int myZoomLevel; int myZoomLevel;
int myNumCols, myNumRows; int myNumCols, myNumRows;
int myXoff, myYoff; int myXoff, myYoff;
int myXCenter, myYCenter;
}; };
#endif #endif