mirror of https://github.com/stella-emu/stella.git
Some more tweaks to the GUI hLine and vLine methods.
Integrated some changes from the ScummVM 0.7,1 codebase wrt the scrollbar widget. git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@397 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
5e88a64305
commit
44bdcdeaf9
|
@ -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.17 2005-04-04 02:19:20 stephena Exp $
|
// $Id: FrameBufferGL.cxx,v 1.18 2005-04-24 01:57:46 stephena Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
|
@ -369,7 +369,7 @@ void FrameBufferGL::blendRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h,
|
||||||
myGUIPalette[color][1],
|
myGUIPalette[color][1],
|
||||||
myGUIPalette[color][2],
|
myGUIPalette[color][2],
|
||||||
0.7);
|
0.7);
|
||||||
glRecti(x, y, x+w, y+h);
|
glRecti(x, y, x+w-1, y+h-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -381,7 +381,7 @@ void FrameBufferGL::fillRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h,
|
||||||
myGUIPalette[color][1],
|
myGUIPalette[color][1],
|
||||||
myGUIPalette[color][2],
|
myGUIPalette[color][2],
|
||||||
1.0);
|
1.0);
|
||||||
glRecti(x, y, x+w, y+h);
|
glRecti(x, y, x+w-1, y+h-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
|
@ -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.16 2005-04-04 02:19:20 stephena Exp $
|
// $Id: FrameBufferSoft.cxx,v 1.17 2005-04-24 01:57:46 stephena Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
|
@ -336,7 +336,7 @@ void FrameBufferSoft::hLine(uInt32 x, uInt32 y, uInt32 x2, OverlayColor color)
|
||||||
tmp.x = x * theZoomLevel;
|
tmp.x = x * theZoomLevel;
|
||||||
tmp.y = y * theZoomLevel;
|
tmp.y = y * theZoomLevel;
|
||||||
tmp.w = (x2 - x) * theZoomLevel;
|
tmp.w = (x2 - x) * theZoomLevel;
|
||||||
tmp.h = 2;//theZoomLevel;
|
tmp.h = theZoomLevel;
|
||||||
SDL_FillRect(myScreen, &tmp, myGUIPalette[color]);
|
SDL_FillRect(myScreen, &tmp, myGUIPalette[color]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -348,7 +348,7 @@ void FrameBufferSoft::vLine(uInt32 x, uInt32 y, uInt32 y2, OverlayColor color)
|
||||||
// Vertical line
|
// Vertical line
|
||||||
tmp.x = x * theZoomLevel;
|
tmp.x = x * theZoomLevel;
|
||||||
tmp.y = y * theZoomLevel;
|
tmp.y = y * theZoomLevel;
|
||||||
tmp.w = 2;//theZoomLevel;
|
tmp.w = theZoomLevel;
|
||||||
tmp.h = (y2 - y) * theZoomLevel;
|
tmp.h = (y2 - y) * theZoomLevel;
|
||||||
SDL_FillRect(myScreen, &tmp, myGUIPalette[color]);
|
SDL_FillRect(myScreen, &tmp, 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: FrameBuffer.cxx,v 1.26 2005-04-06 23:47:07 stephena Exp $
|
// $Id: FrameBuffer.cxx,v 1.27 2005-04-24 01:57:47 stephena Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
@ -47,7 +47,7 @@ FrameBuffer::FrameBuffer(OSystem* osystem)
|
||||||
myMessageTime(0),
|
myMessageTime(0),
|
||||||
myMessageText(""),
|
myMessageText(""),
|
||||||
myMenuRedraws(2),
|
myMenuRedraws(2),
|
||||||
val(0) // FIXME
|
myNumRedraws(0)
|
||||||
{
|
{
|
||||||
// Add the framebuffer to the system
|
// Add the framebuffer to the system
|
||||||
myOSystem->attach(this);
|
myOSystem->attach(this);
|
||||||
|
|
|
@ -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.25 2005-04-04 02:19:21 stephena Exp $
|
// $Id: FrameBuffer.hxx,v 1.26 2005-04-24 01:57:47 stephena Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#ifndef FRAMEBUFFER_HXX
|
#ifndef FRAMEBUFFER_HXX
|
||||||
|
@ -41,7 +41,7 @@ class OSystem;
|
||||||
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.25 2005-04-04 02:19:21 stephena Exp $
|
@version $Id: FrameBuffer.hxx,v 1.26 2005-04-24 01:57:47 stephena Exp $
|
||||||
*/
|
*/
|
||||||
class FrameBuffer
|
class FrameBuffer
|
||||||
{
|
{
|
||||||
|
@ -133,7 +133,7 @@ class FrameBuffer
|
||||||
*/
|
*/
|
||||||
void refresh(bool now = false)
|
void refresh(bool now = false)
|
||||||
{
|
{
|
||||||
//cerr << "refresh() " << val++ << endl;
|
// cerr << "refresh() " << myNumRedraws++ << endl;
|
||||||
theRedrawEntireFrameIndicator = true;
|
theRedrawEntireFrameIndicator = true;
|
||||||
myMenuRedraws = 2;
|
myMenuRedraws = 2;
|
||||||
if(now) drawMediaSource();
|
if(now) drawMediaSource();
|
||||||
|
@ -453,7 +453,9 @@ FIXME
|
||||||
// Number of times menu have been drawn
|
// Number of times menu have been drawn
|
||||||
uInt32 myMenuRedraws;
|
uInt32 myMenuRedraws;
|
||||||
|
|
||||||
int val; // FIXME - remove
|
// Indicates how many times the framebuffer has been redrawn
|
||||||
|
// Used only for debugging purposes
|
||||||
|
uInt32 myNumRedraws;
|
||||||
};
|
};
|
||||||
|
|
||||||
#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.9 2005-04-04 02:19:22 stephena Exp $
|
// $Id: Dialog.cxx,v 1.10 2005-04-24 01:57:47 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
|
||||||
|
@ -40,6 +40,7 @@ Dialog::Dialog(OSystem* instance, uInt16 x, uInt16 y, uInt16 w, uInt16 h)
|
||||||
: GuiObject(instance, x, y, w, h),
|
: GuiObject(instance, x, y, w, h),
|
||||||
_mouseWidget(0),
|
_mouseWidget(0),
|
||||||
_focusedWidget(0),
|
_focusedWidget(0),
|
||||||
|
_dragWidget(0),
|
||||||
_visible(true),
|
_visible(true),
|
||||||
_openCount(0)
|
_openCount(0)
|
||||||
{
|
{
|
||||||
|
@ -144,14 +145,11 @@ void Dialog::handleMouseDown(int x, int y, int button, int clickCount)
|
||||||
Widget* w;
|
Widget* w;
|
||||||
w = findWidget(x, y);
|
w = findWidget(x, y);
|
||||||
|
|
||||||
|
_dragWidget = w;
|
||||||
|
|
||||||
// If the click occured inside a widget which is not the currently
|
// If the click occured inside a widget which is not the currently
|
||||||
// focused one, change the focus to that widget.
|
// focused one, change the focus to that widget.
|
||||||
// TODO: use the wantsFocus() method to objects, so that only fields
|
if(w && w != _focusedWidget && w->wantsFocus())
|
||||||
// that want it get the focus (like edit fields, list field...)
|
|
||||||
// However, right now we "abuse" the focus also for the click&drag
|
|
||||||
// behaviour of buttons. This should probably be changed by adding
|
|
||||||
// a nother field, e.g. _clickedWidget or _dragWidget.
|
|
||||||
if(w && w != _focusedWidget)
|
|
||||||
{
|
{
|
||||||
// The focus will change. Tell the old focused widget (if any)
|
// The focus will change. Tell the old focused widget (if any)
|
||||||
// that it lost the focus.
|
// that it lost the focus.
|
||||||
|
@ -164,8 +162,8 @@ void Dialog::handleMouseDown(int x, int y, int button, int clickCount)
|
||||||
_focusedWidget = w;
|
_focusedWidget = w;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(w && w == _focusedWidget)
|
if(w)
|
||||||
_focusedWidget->handleMouseDown(x - (_focusedWidget->getAbsX() - _x), y - (_focusedWidget->getAbsY() - _y), button, clickCount);
|
w->handleMouseDown(x - (w->getAbsX() - _x), y - (w->getAbsY() - _y), button, clickCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -175,17 +173,19 @@ void Dialog::handleMouseUp(int x, int y, int button, int clickCount)
|
||||||
|
|
||||||
if(_focusedWidget)
|
if(_focusedWidget)
|
||||||
{
|
{
|
||||||
w = _focusedWidget;
|
//w = _focusedWidget;
|
||||||
|
|
||||||
// Lose focus on mouseup unless the widget requested to retain the focus
|
// Lose focus on mouseup unless the widget requested to retain the focus
|
||||||
if(! (_focusedWidget->getFlags() & WIDGET_RETAIN_FOCUS ))
|
if(! (_focusedWidget->getFlags() & WIDGET_RETAIN_FOCUS ))
|
||||||
releaseFocus();
|
releaseFocus();
|
||||||
}
|
}
|
||||||
else
|
|
||||||
w = findWidget(x, y);
|
w = _dragWidget;
|
||||||
|
|
||||||
if(w)
|
if(w)
|
||||||
w->handleMouseUp(x - (w->getAbsX() - _x), y - (w->getAbsY() - _y), button, clickCount);
|
w->handleMouseUp(x - (w->getAbsX() - _x), y - (w->getAbsY() - _y), button, clickCount);
|
||||||
|
|
||||||
|
_dragWidget = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -244,7 +244,7 @@ void Dialog::handleMouseMoved(int x, int y, int button)
|
||||||
{
|
{
|
||||||
Widget* w;
|
Widget* w;
|
||||||
|
|
||||||
if(_focusedWidget)
|
if(_focusedWidget && !_dragWidget)
|
||||||
{
|
{
|
||||||
w = _focusedWidget;
|
w = _focusedWidget;
|
||||||
int wx = w->getAbsX() - _x;
|
int wx = w->getAbsX() - _x;
|
||||||
|
@ -255,6 +255,8 @@ void Dialog::handleMouseMoved(int x, int y, int button)
|
||||||
bool mouseInFocusedWidget = (x >= wx && x < wx + w->_w && y >= wy && y < wy + w->_h);
|
bool mouseInFocusedWidget = (x >= wx && x < wx + w->_w && y >= wy && y < wy + w->_h);
|
||||||
if(mouseInFocusedWidget && _mouseWidget != w)
|
if(mouseInFocusedWidget && _mouseWidget != w)
|
||||||
{
|
{
|
||||||
|
if(_mouseWidget)
|
||||||
|
_mouseWidget->handleMouseLeft(button);
|
||||||
_mouseWidget = w;
|
_mouseWidget = w;
|
||||||
w->handleMouseEntered(button);
|
w->handleMouseEntered(button);
|
||||||
}
|
}
|
||||||
|
@ -267,21 +269,23 @@ void Dialog::handleMouseMoved(int x, int y, int button)
|
||||||
w->handleMouseMoved(x - wx, y - wy, button);
|
w->handleMouseMoved(x - wx, y - wy, button);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// While a "drag" is in process (i.e. mouse is moved while a button is pressed),
|
||||||
|
// only deal with the widget in which the click originated.
|
||||||
|
if (_dragWidget)
|
||||||
|
w = _dragWidget;
|
||||||
|
else
|
||||||
w = findWidget(x, y);
|
w = findWidget(x, y);
|
||||||
|
|
||||||
if(_mouseWidget != w)
|
if (_mouseWidget != w)
|
||||||
{
|
{
|
||||||
if(_mouseWidget)
|
if (_mouseWidget)
|
||||||
_mouseWidget->handleMouseLeft(button);
|
_mouseWidget->handleMouseLeft(button);
|
||||||
if(w)
|
if (w)
|
||||||
w->handleMouseEntered(button);
|
w->handleMouseEntered(button);
|
||||||
|
|
||||||
_mouseWidget = w;
|
_mouseWidget = w;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!w || !(w->getFlags() & WIDGET_TRACK_MOUSE))
|
if (w && (w->getFlags() & WIDGET_TRACK_MOUSE))
|
||||||
return;
|
|
||||||
|
|
||||||
w->handleMouseMoved(x - (w->getAbsX() - _x), y - (w->getAbsY() - _y), button);
|
w->handleMouseMoved(x - (w->getAbsX() - _x), y - (w->getAbsY() - _y), button);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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.hxx,v 1.7 2005-03-26 19:26:47 stephena Exp $
|
// $Id: Dialog.hxx,v 1.8 2005-04-24 01:57:47 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
|
||||||
|
@ -35,7 +35,7 @@ class Menu;
|
||||||
This is the base class for all dialog boxes.
|
This is the base class for all dialog boxes.
|
||||||
|
|
||||||
@author Stephen Anthony
|
@author Stephen Anthony
|
||||||
@version $Id: Dialog.hxx,v 1.7 2005-03-26 19:26:47 stephena Exp $
|
@version $Id: Dialog.hxx,v 1.8 2005-04-24 01:57:47 stephena Exp $
|
||||||
*/
|
*/
|
||||||
class Dialog : public GuiObject
|
class Dialog : public GuiObject
|
||||||
{
|
{
|
||||||
|
@ -81,6 +81,7 @@ class Dialog : public GuiObject
|
||||||
protected:
|
protected:
|
||||||
Widget* _mouseWidget;
|
Widget* _mouseWidget;
|
||||||
Widget* _focusedWidget;
|
Widget* _focusedWidget;
|
||||||
|
Widget* _dragWidget;
|
||||||
bool _visible;
|
bool _visible;
|
||||||
uInt32 _openCount;
|
uInt32 _openCount;
|
||||||
|
|
||||||
|
|
|
@ -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: ListWidget.cxx,v 1.1 2005-04-04 02:19:22 stephena Exp $
|
// $Id: ListWidget.cxx,v 1.2 2005-04-24 01:57:47 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
|
||||||
|
@ -171,8 +171,6 @@ void ListWidget::handleMouseDown(Int32 x, Int32 y, Int32 button, Int32 clickCoun
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void ListWidget::handleMouseUp(Int32 x, Int32 y, Int32 button, Int32 clickCount)
|
void ListWidget::handleMouseUp(Int32 x, Int32 y, Int32 button, Int32 clickCount)
|
||||||
{
|
{
|
||||||
_scrollBar->handleMouseUp(x, y, button, clickCount);
|
|
||||||
|
|
||||||
// If this was a double click and the mouse is still over the selected item,
|
// If this was a double click and the mouse is still over the selected item,
|
||||||
// send the double click command
|
// send the double click command
|
||||||
if (clickCount == 2 && (_selectedItem == (y - 1) / kLineHeight + _currentPos))
|
if (clickCount == 2 && (_selectedItem == (y - 1) / kLineHeight + _currentPos))
|
||||||
|
|
Loading…
Reference in New Issue