mirror of https://github.com/stella-emu/stella.git
Convert FrameBuffer/FBSurface to use shared_ptr instead of raw pointers.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@3072 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
4544f59b53
commit
690b681fe7
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
* The conversion to C++11 has begun :) From this point on, to build
|
* The conversion to C++11 has begun :) From this point on, to build
|
||||||
Stella you will need a C++11 compatible compiler (Visual Studio 2013,
|
Stella you will need a C++11 compatible compiler (Visual Studio 2013,
|
||||||
Clang 3.5, gcc 4.9, Xcode 5, etc). Eventually, this will bring more
|
Clang 3.3, gcc 4.7, Xcode 5, etc). Eventually, this will bring more
|
||||||
bug-free and (hopefully) faster code.
|
bug-free and (hopefully) faster code.
|
||||||
|
|
||||||
* The minimum supported version for the OSX port is now OSX 10.7.
|
* The minimum supported version for the OSX port is now OSX 10.7.
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// This comes directly from SDL_scancode.h
|
// This comes directly from SDL_scancode.h
|
||||||
typedef enum
|
enum StellaKey
|
||||||
{
|
{
|
||||||
KBDK_UNKNOWN = 0,
|
KBDK_UNKNOWN = 0,
|
||||||
|
|
||||||
|
@ -390,10 +390,10 @@ typedef enum
|
||||||
|
|
||||||
KBDK_LAST = 512 /**< not a key, just marks the number of scancodes
|
KBDK_LAST = 512 /**< not a key, just marks the number of scancodes
|
||||||
for array bounds */
|
for array bounds */
|
||||||
} StellaKey;
|
};
|
||||||
|
|
||||||
// This comes directly from SDL_keycode.h
|
// This comes directly from SDL_keycode.h
|
||||||
typedef enum
|
enum StellaMod
|
||||||
{
|
{
|
||||||
KBDM_NONE = 0x0000,
|
KBDM_NONE = 0x0000,
|
||||||
KBDM_LSHIFT = 0x0001,
|
KBDM_LSHIFT = 0x0001,
|
||||||
|
@ -412,6 +412,6 @@ typedef enum
|
||||||
KBDM_SHIFT = (KBDM_LSHIFT|KBDM_RSHIFT),
|
KBDM_SHIFT = (KBDM_LSHIFT|KBDM_RSHIFT),
|
||||||
KBDM_ALT = (KBDM_LALT|KBDM_RALT),
|
KBDM_ALT = (KBDM_LALT|KBDM_RALT),
|
||||||
KBDM_GUI = (KBDM_LGUI|KBDM_RGUI)
|
KBDM_GUI = (KBDM_LGUI|KBDM_RGUI)
|
||||||
} StellaMod;
|
};
|
||||||
|
|
||||||
#endif /* StellaKeys */
|
#endif /* StellaKeys */
|
||||||
|
|
|
@ -556,13 +556,13 @@ void FrameBuffer::refresh()
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
FBSurface* FrameBuffer::allocateSurface(int w, int h, const uInt32* data)
|
shared_ptr<FBSurface> FrameBuffer::allocateSurface(int w, int h, const uInt32* data)
|
||||||
{
|
{
|
||||||
// Add new surface to the list
|
// Add new surface to the list
|
||||||
mySurfaceList.push_back(createSurface(w, h, data));
|
mySurfaceList.push_back(createSurface(w, h, data));
|
||||||
|
|
||||||
// And return a pointer to it (pointer should be treated read-only)
|
// And return a pointer to it (pointer should be treated read-only)
|
||||||
return mySurfaceList.at(mySurfaceList.size() - 1).get();
|
return mySurfaceList.at(mySurfaceList.size() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
|
@ -206,7 +206,7 @@ class FrameBuffer
|
||||||
|
|
||||||
@return A pointer to a valid surface object, or nullptr.
|
@return A pointer to a valid surface object, or nullptr.
|
||||||
*/
|
*/
|
||||||
FBSurface* allocateSurface(int w, int h, const uInt32* data = 0);
|
shared_ptr<FBSurface> allocateSurface(int w, int h, const uInt32* data = 0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns the current dimensions of the framebuffer image.
|
Returns the current dimensions of the framebuffer image.
|
||||||
|
@ -546,7 +546,7 @@ class FrameBuffer
|
||||||
int x, y, w, h;
|
int x, y, w, h;
|
||||||
MessagePosition position;
|
MessagePosition position;
|
||||||
uInt32 color;
|
uInt32 color;
|
||||||
FBSurface* surface;
|
shared_ptr<FBSurface> surface;
|
||||||
bool enabled;
|
bool enabled;
|
||||||
};
|
};
|
||||||
Message myMsg;
|
Message myMsg;
|
||||||
|
@ -561,7 +561,7 @@ class FrameBuffer
|
||||||
VariantList myTIAZoomLevels;
|
VariantList myTIAZoomLevels;
|
||||||
|
|
||||||
// Holds a reference to all the surfaces that have been created
|
// Holds a reference to all the surfaces that have been created
|
||||||
vector<unique_ptr<FBSurface>> mySurfaceList;
|
vector<shared_ptr<FBSurface>> mySurfaceList;
|
||||||
|
|
||||||
// Holds UI palette data (standard and classic colours)
|
// Holds UI palette data (standard and classic colours)
|
||||||
static uInt32 ourGUIColors[2][kNumColors-256];
|
static uInt32 ourGUIColors[2][kNumColors-256];
|
||||||
|
|
|
@ -32,9 +32,6 @@ TIASurface::TIASurface(OSystem& system)
|
||||||
: myOSystem(system),
|
: myOSystem(system),
|
||||||
myFB(system.frameBuffer()),
|
myFB(system.frameBuffer()),
|
||||||
myTIA(nullptr),
|
myTIA(nullptr),
|
||||||
myTiaSurface(nullptr),
|
|
||||||
mySLineSurface(nullptr),
|
|
||||||
myBaseTiaSurface(nullptr),
|
|
||||||
myFilterType(kNormal),
|
myFilterType(kNormal),
|
||||||
myUsePhosphor(false),
|
myUsePhosphor(false),
|
||||||
myPhosphorBlend(77),
|
myPhosphorBlend(77),
|
||||||
|
|
|
@ -139,7 +139,7 @@ class TIASurface
|
||||||
FrameBuffer& myFB;
|
FrameBuffer& myFB;
|
||||||
TIA* myTIA;
|
TIA* myTIA;
|
||||||
|
|
||||||
FBSurface *myTiaSurface, *mySLineSurface, *myBaseTiaSurface;
|
shared_ptr<FBSurface> myTiaSurface, mySLineSurface, myBaseTiaSurface;
|
||||||
|
|
||||||
// Enumeration created such that phosphor off/on is in LSB,
|
// Enumeration created such that phosphor off/on is in LSB,
|
||||||
// and Blargg off/on is in MSB
|
// and Blargg off/on is in MSB
|
||||||
|
|
|
@ -267,7 +267,7 @@ void Dialog::redrawFocus()
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void Dialog::addSurface(FBSurface* surface)
|
void Dialog::addSurface(shared_ptr<FBSurface> surface)
|
||||||
{
|
{
|
||||||
mySurfaceStack.push(surface);
|
mySurfaceStack.push(surface);
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,7 +81,7 @@ class Dialog : public GuiObject
|
||||||
the surface render() call will always occur in such a case, the
|
the surface render() call will always occur in such a case, the
|
||||||
surface should call setVisible() to enable/disable its output.
|
surface should call setVisible() to enable/disable its output.
|
||||||
*/
|
*/
|
||||||
void addSurface(FBSurface* surface);
|
void addSurface(shared_ptr<FBSurface> surface);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void draw();
|
virtual void draw();
|
||||||
|
@ -124,7 +124,7 @@ class Dialog : public GuiObject
|
||||||
bool _visible;
|
bool _visible;
|
||||||
bool _processCancel;
|
bool _processCancel;
|
||||||
|
|
||||||
Common::FixedStack<FBSurface*> mySurfaceStack;
|
Common::FixedStack<shared_ptr<FBSurface>> mySurfaceStack;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct Focus {
|
struct Focus {
|
||||||
|
@ -154,7 +154,7 @@ class Dialog : public GuiObject
|
||||||
TabFocusList _myTabList; // focus for each tab (if any)
|
TabFocusList _myTabList; // focus for each tab (if any)
|
||||||
|
|
||||||
WidgetArray _buttonGroup;
|
WidgetArray _buttonGroup;
|
||||||
FBSurface* _surface;
|
shared_ptr<FBSurface> _surface;
|
||||||
|
|
||||||
int _tabID;
|
int _tabID;
|
||||||
};
|
};
|
||||||
|
|
|
@ -28,7 +28,6 @@
|
||||||
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(nullptr),
|
|
||||||
mySurfaceIsValid(false),
|
mySurfaceIsValid(false),
|
||||||
myHaveProperties(false),
|
myHaveProperties(false),
|
||||||
myAvail(w > 400 ? GUI::Size(640, 512) : GUI::Size(320, 256))
|
myAvail(w > 400 ? GUI::Size(640, 512) : GUI::Size(320, 256))
|
||||||
|
@ -174,22 +173,3 @@ void RomInfoWidget::drawWidget(bool hilite)
|
||||||
ypos += _font.getLineHeight();
|
ypos += _font.getLineHeight();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
cerr << "surface:" << endl
|
|
||||||
<< " w = " << sw << endl
|
|
||||||
<< " h = " << sh << endl
|
|
||||||
<< " szoom = " << myZoomLevel << endl
|
|
||||||
<< " spitch = " << spitch << endl
|
|
||||||
<< endl;
|
|
||||||
|
|
||||||
cerr << "image:" << endl
|
|
||||||
<< " width = " << width << endl
|
|
||||||
<< " height = " << height << endl
|
|
||||||
<< " izoom = " << izoom << endl
|
|
||||||
<< " ipitch = " << ipitch << endl
|
|
||||||
<< " bufsize = " << bufsize << endl
|
|
||||||
<< " buf_offset = " << buf_offset << endl
|
|
||||||
<< " i_offset = " << i_offset << endl
|
|
||||||
<< endl;
|
|
||||||
*/
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ class RomInfoWidget : public Widget
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Surface pointer holding the PNG image
|
// Surface pointer holding the PNG image
|
||||||
FBSurface* mySurface;
|
shared_ptr<FBSurface> mySurface;
|
||||||
|
|
||||||
// Whether the surface should be redrawn by drawWidget()
|
// Whether the surface should be redrawn by drawWidget()
|
||||||
bool mySurfaceIsValid;
|
bool mySurfaceIsValid;
|
||||||
|
|
Loading…
Reference in New Issue