forked from mia/Aegisub
* Fixed some more memory leaks reported by valgrind and msvc by reimplementing a couple of singleton pattern based classes
* Fixed a memory leak that occurred from never deleting a wxBitmap allocated in OpenGLTextGlyph Originally committed to SVN as r2952.
This commit is contained in:
parent
14e3cb4323
commit
bace72cf29
6 changed files with 37 additions and 35 deletions
|
@ -44,11 +44,6 @@
|
|||
#include "utils.h"
|
||||
|
||||
|
||||
///////////////////
|
||||
// Static instance
|
||||
OpenGLText* OpenGLText::instance;
|
||||
|
||||
|
||||
///////////////
|
||||
// Constructor
|
||||
OpenGLText::OpenGLText() {
|
||||
|
@ -74,9 +69,8 @@ void OpenGLText::Reset() {
|
|||
|
||||
////////////////
|
||||
// Get instance
|
||||
OpenGLText* OpenGLText::GetInstance() {
|
||||
if (!instance) instance = new OpenGLText();
|
||||
wxASSERT(instance);
|
||||
OpenGLText& OpenGLText::GetInstance() {
|
||||
static OpenGLText instance;
|
||||
return instance;
|
||||
}
|
||||
|
||||
|
@ -392,6 +386,14 @@ void OpenGLTextGlyph::Draw(int x,int y) {
|
|||
}
|
||||
|
||||
|
||||
////////////////////
|
||||
// Glyph Destructor
|
||||
OpenGLTextGlyph::~OpenGLTextGlyph() {
|
||||
if (tempBmp) delete tempBmp;
|
||||
tempBmp = NULL;
|
||||
}
|
||||
|
||||
|
||||
/////////////////////
|
||||
// Get glyph metrics
|
||||
wxBitmap *OpenGLTextGlyph::tempBmp = NULL;
|
||||
|
|
|
@ -63,6 +63,8 @@ public:
|
|||
|
||||
void GetMetrics();
|
||||
void Draw(int x,int y);
|
||||
|
||||
~OpenGLTextGlyph();
|
||||
};
|
||||
|
||||
typedef std::map<int,OpenGLTextGlyph> glyphMap;
|
||||
|
@ -99,19 +101,19 @@ private:
|
|||
wxString fontFace;
|
||||
wxFont font;
|
||||
|
||||
static OpenGLText* instance;
|
||||
|
||||
glyphMap glyphs;
|
||||
std::vector <OpenGLTextTexture*> textures;
|
||||
|
||||
OpenGLText();
|
||||
~OpenGLText();
|
||||
OpenGLText(OpenGLText const&);
|
||||
OpenGLText& operator=(OpenGLText const&);
|
||||
|
||||
OpenGLTextGlyph GetGlyph(int i);
|
||||
OpenGLTextGlyph CreateGlyph(int i);
|
||||
void Reset();
|
||||
|
||||
static OpenGLText* GetInstance();
|
||||
static OpenGLText& GetInstance();
|
||||
void DoSetFont(wxString face,int size,bool bold,bool italics);
|
||||
void DoSetColour(wxColour col,float alpha);
|
||||
void DoPrint(wxString text,int x,int y);
|
||||
|
@ -119,9 +121,9 @@ private:
|
|||
void DoGetExtent(wxString text,int &w,int &h);
|
||||
|
||||
public:
|
||||
static wxFont GetFont() { return GetInstance()->font; }
|
||||
static void SetFont(wxString face=_T("Verdana"),int size=10,bool bold=true,bool italics=false) { GetInstance()->DoSetFont(face,size,bold,italics); }
|
||||
static void SetColour(wxColour col,float alpha=1.0f) { GetInstance()->DoSetColour(col,alpha); }
|
||||
static void Print(wxString text,int x,int y) { GetInstance()->DoPrint(text,x,y); }
|
||||
static void GetExtent(wxString text,int &w,int &h) { GetInstance()->DoGetExtent(text,w,h); }
|
||||
static wxFont GetFont() { return GetInstance().font; }
|
||||
static void SetFont(wxString face=_T("Verdana"),int size=10,bool bold=true,bool italics=false) { GetInstance().DoSetFont(face,size,bold,italics); }
|
||||
static void SetColour(wxColour col,float alpha=1.0f) { GetInstance().DoSetColour(col,alpha); }
|
||||
static void Print(wxString text,int x,int y) { GetInstance().DoPrint(text,x,y); }
|
||||
static void GetExtent(wxString text,int &w,int &h) { GetInstance().DoGetExtent(text,w,h); }
|
||||
};
|
||||
|
|
|
@ -45,8 +45,8 @@
|
|||
|
||||
////////////////
|
||||
// Get instance
|
||||
StandardPaths *StandardPaths::GetInstance() {
|
||||
if (!instance) instance = new StandardPaths();
|
||||
StandardPaths &StandardPaths::GetInstance() {
|
||||
static StandardPaths instance;
|
||||
return instance;
|
||||
}
|
||||
|
||||
|
@ -130,8 +130,3 @@ wxString StandardPaths::DoEncodePath(wxString path) {
|
|||
void StandardPaths::DoSetPathValue(wxString path,wxString value) {
|
||||
paths[path] = value;
|
||||
}
|
||||
|
||||
|
||||
///////////////////
|
||||
// Static instance
|
||||
StandardPaths *StandardPaths::instance = NULL;
|
||||
|
|
|
@ -47,19 +47,20 @@
|
|||
// Standard path conversion class
|
||||
class StandardPaths {
|
||||
private:
|
||||
static StandardPaths *instance;
|
||||
static StandardPaths *GetInstance();
|
||||
static StandardPaths &GetInstance();
|
||||
|
||||
std::map<wxString,wxString> paths;
|
||||
|
||||
StandardPaths();
|
||||
StandardPaths(StandardPaths const&);
|
||||
StandardPaths& operator=(StandardPaths const&);
|
||||
|
||||
wxString DoDecodePath(wxString path);
|
||||
wxString DoEncodePath(wxString path);
|
||||
void DoSetPathValue(wxString path,wxString value);
|
||||
|
||||
public:
|
||||
static wxString DecodePath(wxString path) { return GetInstance()->DoDecodePath(path); }
|
||||
static wxString EncodePath(wxString path) { return GetInstance()->DoEncodePath(path); }
|
||||
static void SetPathValue(wxString path,wxString value) { GetInstance()->DoSetPathValue(path,value); }
|
||||
static wxString DecodePath(wxString path) { return GetInstance().DoDecodePath(path); }
|
||||
static wxString EncodePath(wxString path) { return GetInstance().DoEncodePath(path); }
|
||||
static void SetPathValue(wxString path,wxString value) { GetInstance().DoSetPathValue(path,value); }
|
||||
};
|
||||
|
|
|
@ -84,9 +84,8 @@ void ToolTipManager::Bind(wxWindow *window,wxString tooltip,wxString hotkey1,wxS
|
|||
|
||||
///////////////////
|
||||
// Static instance
|
||||
ToolTipManager *ToolTipManager::instance = NULL;
|
||||
ToolTipManager *ToolTipManager::GetInstance() {
|
||||
if (!instance) instance = new ToolTipManager;
|
||||
ToolTipManager &ToolTipManager::GetInstance() {
|
||||
static ToolTipManager instance;
|
||||
return instance;
|
||||
}
|
||||
|
||||
|
|
|
@ -63,8 +63,11 @@ private:
|
|||
// Tooltip manager singleton
|
||||
class ToolTipManager {
|
||||
private:
|
||||
static ToolTipManager *instance;
|
||||
static ToolTipManager *GetInstance();
|
||||
ToolTipManager() {};
|
||||
ToolTipManager(ToolTipManager const&);
|
||||
ToolTipManager& operator=(ToolTipManager const&);
|
||||
|
||||
static ToolTipManager &GetInstance();
|
||||
|
||||
std::list<ToolTipBinding> tips;
|
||||
|
||||
|
@ -72,8 +75,8 @@ private:
|
|||
void AddTips(wxWindow *window,wxString tooltip,wxArrayString hotkeys);
|
||||
|
||||
public:
|
||||
static void Update() { GetInstance()->DoUpdate(); }
|
||||
static void Bind(wxWindow *window,wxString tooltip,wxArrayString hotkeys) { GetInstance()->AddTips(window,tooltip,hotkeys); }
|
||||
static void Update() { GetInstance().DoUpdate(); }
|
||||
static void Bind(wxWindow *window,wxString tooltip,wxArrayString hotkeys) { GetInstance().AddTips(window,tooltip,hotkeys); }
|
||||
static void Bind(wxWindow *window,wxString tooltip,wxString hotkey=_T(""));
|
||||
static void Bind(wxWindow *window,wxString tooltip,wxString hotkey1,wxString hotkey2);
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue