From ed8286415224d8f0c95fdb234638ca44c1846e3e Mon Sep 17 00:00:00 2001 From: stephena Date: Sat, 25 Jun 2005 16:35:36 +0000 Subject: [PATCH] Fixed bug where no key events were being sent to any Tab child widget that had WIDGET_TAB_NAVIGATE set (which is exactly the opposite of what we want). Added a dashed line to FrameBuffer::frameRect(). This is currently used to indicate which widget is selected in debugger mode. IMO, it looks much better than using a solid line. git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@563 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba --- stella/src/emucore/FrameBuffer.cxx | 38 +++++++++++++++++++++++++----- stella/src/emucore/FrameBuffer.hxx | 18 +++++++++----- stella/src/gui/TabWidget.cxx | 19 ++++++--------- stella/src/gui/Widget.cxx | 4 ++-- 4 files changed, 53 insertions(+), 26 deletions(-) diff --git a/stella/src/emucore/FrameBuffer.cxx b/stella/src/emucore/FrameBuffer.cxx index d12301ba7..18ff937c0 100644 --- a/stella/src/emucore/FrameBuffer.cxx +++ b/stella/src/emucore/FrameBuffer.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: FrameBuffer.cxx,v 1.47 2005-06-23 14:33:11 stephena Exp $ +// $Id: FrameBuffer.cxx,v 1.48 2005-06-25 16:35:36 stephena Exp $ //============================================================================ #include @@ -557,12 +557,38 @@ void FrameBuffer::box(uInt32 x, uInt32 y, uInt32 w, uInt32 h, // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void FrameBuffer::frameRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h, - OverlayColor color) + OverlayColor color, FrameStyle style) { - hLine(x, y, x + w - 1, color); - hLine(x, y + h - 1, x + w - 1, color); - vLine(x, y, y + h - 1, color); - vLine(x + w - 1, y, y + h - 1, color); + switch(style) + { + case kSolidLine: + hLine(x, y, x + w - 1, color); + hLine(x, y + h - 1, x + w - 1, color); + vLine(x, y, y + h - 1, color); + vLine(x + w - 1, y, y + h - 1, color); + break; + + case kDashLine: + unsigned int i, skip, lwidth = 1; + + for(i = x, skip = 1; i < x+w-1; i=i+lwidth+1, ++skip) + { + if(skip % 2) + { + hLine(i, y, i + lwidth, color); + hLine(i, y + h - 1, i + lwidth, color); + } + } + for(i = y, skip = 1; i < y+h-1; i=i+lwidth+1, ++skip) + { + if(skip % 2) + { + vLine(x, i, i + lwidth, color); + vLine(x + w - 1, i, i + lwidth, color); + } + } + break; + } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/stella/src/emucore/FrameBuffer.hxx b/stella/src/emucore/FrameBuffer.hxx index dfafe5776..c7b90b1a8 100644 --- a/stella/src/emucore/FrameBuffer.hxx +++ b/stella/src/emucore/FrameBuffer.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: FrameBuffer.hxx,v 1.42 2005-06-23 14:33:11 stephena Exp $ +// $Id: FrameBuffer.hxx,v 1.43 2005-06-25 16:35:36 stephena Exp $ //============================================================================ #ifndef FRAMEBUFFER_HXX @@ -33,9 +33,15 @@ class Console; // Text alignment modes for drawString() enum TextAlignment { - kTextAlignLeft, - kTextAlignCenter, - kTextAlignRight + kTextAlignLeft, + kTextAlignCenter, + kTextAlignRight +}; + +// Line types for drawing rectangular frames +enum FrameStyle { + kSolidLine, + kDashLine }; /** @@ -46,7 +52,7 @@ enum TextAlignment { All GUI elements (ala ScummVM) are drawn here as well. @author Stephen Anthony - @version $Id: FrameBuffer.hxx,v 1.42 2005-06-23 14:33:11 stephena Exp $ + @version $Id: FrameBuffer.hxx,v 1.43 2005-06-25 16:35:36 stephena Exp $ */ class FrameBuffer { @@ -233,7 +239,7 @@ class FrameBuffer @param color The color of the surrounding frame */ void frameRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h, - OverlayColor color); + OverlayColor color, FrameStyle style = kSolidLine); /** This method should be called to draw the specified string. diff --git a/stella/src/gui/TabWidget.cxx b/stella/src/gui/TabWidget.cxx index 695575917..d3e8c09b0 100644 --- a/stella/src/gui/TabWidget.cxx +++ b/stella/src/gui/TabWidget.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: TabWidget.cxx,v 1.11 2005-06-24 12:01:27 stephena Exp $ +// $Id: TabWidget.cxx,v 1.12 2005-06-25 16:35:36 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -204,12 +204,6 @@ void TabWidget::handleMouseDown(int x, int y, int button, int clickCount) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool TabWidget::handleKeyDown(int ascii, int keycode, int modifiers) { - // Pass the tab key to the activeWidget if we know that widget - // navigation won't be needed - bool navigateWanted = false; - if(_activeWidget && (_activeWidget->getFlags() & WIDGET_TAB_NAVIGATE)) - navigateWanted = true; - // Test for TAB character // Ctrl-Tab selects next tab // Shift-Ctrl-Tab selects previous tab @@ -223,20 +217,21 @@ bool TabWidget::handleKeyDown(int ascii, int keycode, int modifiers) cycleTab(-1); else cycleTab(+1); + + return true; // this key-combo is never passed to the child widget } - else if(navigateWanted) + else if(_activeWidget && (_activeWidget->getFlags() & WIDGET_TAB_NAVIGATE)) { if(_boss->instance()->eventHandler().kbdShift(modifiers)) cycleWidget(-1); else cycleWidget(+1); - } - if(navigateWanted) - return true; + return true; // swallow tab key if the current widget wants navigation + } } - if (_activeWidget && !navigateWanted) + if (_activeWidget) return _activeWidget->handleKeyDown(ascii, keycode, modifiers); else return Widget::handleKeyDown(ascii, keycode, modifiers); diff --git a/stella/src/gui/Widget.cxx b/stella/src/gui/Widget.cxx index d8b02da4a..2c8c27890 100644 --- a/stella/src/gui/Widget.cxx +++ b/stella/src/gui/Widget.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Widget.cxx,v 1.19 2005-06-23 14:33:12 stephena Exp $ +// $Id: Widget.cxx,v 1.20 2005-06-25 16:35:36 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -91,7 +91,7 @@ void Widget::draw() // Indicate if this is the currently active widget // by drawing a box around it. if((_activeWidget == this) && (_flags & WIDGET_TAB_NAVIGATE)) - fb.frameRect(_x-1, _y-1, _w+2, _h+2, kTextColorEm); // FIXME - maybe chose a better color + fb.frameRect(_x-1, _y-1, _w+2, _h+2, kTextColorEm, kDashLine); // Restore x/y if (_flags & WIDGET_BORDER) {