mirror of https://github.com/PCSX2/pcsx2.git
pcsx2: Use std::array for Console colours
Using a memcpy to copy non-POD classes with virtual methods is undefined behaviour. clang was warning that the vtable was being overwritten. Replace the SafeArray with std::array.
This commit is contained in:
parent
e8596f0430
commit
f3f0d743ff
|
@ -156,20 +156,15 @@ static bool OpenLogFile(wxFile& file, wxString& filename, wxWindow *parent)
|
||||||
// (actual font used is the system-selected fixed-width font)
|
// (actual font used is the system-selected fixed-width font)
|
||||||
//
|
//
|
||||||
ConsoleLogFrame::ColorArray::ColorArray( int fontsize )
|
ConsoleLogFrame::ColorArray::ColorArray( int fontsize )
|
||||||
: m_table( ConsoleColors_Count )
|
|
||||||
{
|
{
|
||||||
Create( fontsize );
|
SetFont( fontsize );
|
||||||
}
|
}
|
||||||
|
|
||||||
ConsoleLogFrame::ColorArray::~ColorArray() throw()
|
ConsoleLogFrame::ColorArray::~ColorArray() throw()
|
||||||
{
|
{
|
||||||
try {
|
|
||||||
Cleanup();
|
|
||||||
}
|
|
||||||
DESTRUCTOR_CATCHALL
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConsoleLogFrame::ColorArray::Create( int fontsize )
|
void ConsoleLogFrame::ColorArray::SetFont( int fontsize )
|
||||||
{
|
{
|
||||||
const wxFont fixed( pxGetFixedFont( fontsize ) );
|
const wxFont fixed( pxGetFixedFont( fontsize ) );
|
||||||
const wxFont fixedB( pxGetFixedFont( fontsize+1, wxBOLD ) );
|
const wxFont fixedB( pxGetFixedFont( fontsize+1, wxBOLD ) );
|
||||||
|
@ -178,30 +173,11 @@ void ConsoleLogFrame::ColorArray::Create( int fontsize )
|
||||||
//const wxFont fixedB( fontsize, wxMODERN, wxNORMAL, wxBOLD );
|
//const wxFont fixedB( fontsize, wxMODERN, wxNORMAL, wxBOLD );
|
||||||
|
|
||||||
// Standard R, G, B format:
|
// Standard R, G, B format:
|
||||||
new (&m_table[Color_Default]) wxTextAttr( wxNullColour, wxNullColour, fixed );
|
for (size_t i = 0; i < Color_StrongBlack; ++i)
|
||||||
new (&m_table[Color_Black]) wxTextAttr( wxNullColour, wxNullColour, fixed );
|
m_table[i].SetFont(fixed);
|
||||||
new (&m_table[Color_Red]) wxTextAttr( wxNullColour, wxNullColour, fixed );
|
|
||||||
new (&m_table[Color_Green]) wxTextAttr( wxNullColour, wxNullColour, fixed );
|
|
||||||
new (&m_table[Color_Blue]) wxTextAttr( wxNullColour, wxNullColour, fixed );
|
|
||||||
new (&m_table[Color_Magenta]) wxTextAttr( wxNullColour, wxNullColour, fixed );
|
|
||||||
new (&m_table[Color_Orange]) wxTextAttr( wxNullColour, wxNullColour, fixed );
|
|
||||||
new (&m_table[Color_Gray]) wxTextAttr( wxNullColour, wxNullColour, fixed );
|
|
||||||
|
|
||||||
new (&m_table[Color_Cyan]) wxTextAttr( wxNullColour, wxNullColour, fixed );
|
for (size_t i = Color_StrongBlack; i < ConsoleColors_Count; ++i)
|
||||||
new (&m_table[Color_Yellow]) wxTextAttr( wxNullColour, wxNullColour, fixed );
|
m_table[i].SetFont(fixedB);
|
||||||
new (&m_table[Color_White]) wxTextAttr( wxNullColour, wxNullColour, fixed );
|
|
||||||
|
|
||||||
new (&m_table[Color_StrongBlack]) wxTextAttr( wxNullColour, wxNullColour, fixedB );
|
|
||||||
new (&m_table[Color_StrongRed]) wxTextAttr( wxNullColour, wxNullColour, fixedB );
|
|
||||||
new (&m_table[Color_StrongGreen]) wxTextAttr( wxNullColour, wxNullColour, fixedB );
|
|
||||||
new (&m_table[Color_StrongBlue]) wxTextAttr( wxNullColour, wxNullColour, fixedB );
|
|
||||||
new (&m_table[Color_StrongMagenta]) wxTextAttr( wxNullColour, wxNullColour, fixedB );
|
|
||||||
new (&m_table[Color_StrongOrange]) wxTextAttr( wxNullColour, wxNullColour, fixedB );
|
|
||||||
new (&m_table[Color_StrongGray]) wxTextAttr( wxNullColour, wxNullColour, fixedB );
|
|
||||||
|
|
||||||
new (&m_table[Color_StrongCyan]) wxTextAttr( wxNullColour, wxNullColour, fixedB );
|
|
||||||
new (&m_table[Color_StrongYellow]) wxTextAttr( wxNullColour, wxNullColour, fixedB );
|
|
||||||
new (&m_table[Color_StrongWhite]) wxTextAttr( wxNullColour, wxNullColour, fixedB );
|
|
||||||
|
|
||||||
SetColorScheme_Light();
|
SetColorScheme_Light();
|
||||||
}
|
}
|
||||||
|
@ -262,15 +238,6 @@ void ConsoleLogFrame::ColorArray::SetColorScheme_Light()
|
||||||
m_table[Color_StrongWhite] .SetTextColour(wxColor( 160, 160, 160 ));
|
m_table[Color_StrongWhite] .SetTextColour(wxColor( 160, 160, 160 ));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConsoleLogFrame::ColorArray::Cleanup()
|
|
||||||
{
|
|
||||||
// The contents of m_table were created with placement new, and must be
|
|
||||||
// disposed of manually:
|
|
||||||
|
|
||||||
for( int i=0; i<ConsoleColors_Count; ++i )
|
|
||||||
m_table[i].~wxTextAttr();
|
|
||||||
}
|
|
||||||
|
|
||||||
// fixme - not implemented yet.
|
// fixme - not implemented yet.
|
||||||
void ConsoleLogFrame::ColorArray::SetFont( const wxFont& font )
|
void ConsoleLogFrame::ColorArray::SetFont( const wxFont& font )
|
||||||
{
|
{
|
||||||
|
@ -278,12 +245,6 @@ void ConsoleLogFrame::ColorArray::SetFont( const wxFont& font )
|
||||||
// m_table[i].SetFont( font );
|
// m_table[i].SetFont( font );
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConsoleLogFrame::ColorArray::SetFont( int fontsize )
|
|
||||||
{
|
|
||||||
Cleanup();
|
|
||||||
Create( fontsize );
|
|
||||||
}
|
|
||||||
|
|
||||||
enum MenuIDs_t
|
enum MenuIDs_t
|
||||||
{
|
{
|
||||||
MenuId_FontSize_Small = 0x10,
|
MenuId_FontSize_Small = 0x10,
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "App.h"
|
#include "App.h"
|
||||||
|
#include <array>
|
||||||
|
|
||||||
BEGIN_DECLARE_EVENT_TYPES()
|
BEGIN_DECLARE_EVENT_TYPES()
|
||||||
DECLARE_EVENT_TYPE(pxEvt_DockConsole, -1)
|
DECLARE_EVENT_TYPE(pxEvt_DockConsole, -1)
|
||||||
|
@ -137,16 +138,12 @@ protected:
|
||||||
DeclareNoncopyableObject(ColorArray);
|
DeclareNoncopyableObject(ColorArray);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
SafeArray<wxTextAttr> m_table;
|
std::array<wxTextAttr, ConsoleColors_Count> m_table;
|
||||||
wxTextAttr m_color_default;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual ~ColorArray() throw();
|
virtual ~ColorArray() throw();
|
||||||
ColorArray( int fontsize=8 );
|
ColorArray( int fontsize=8 );
|
||||||
|
|
||||||
void Create( int fontsize );
|
|
||||||
void Cleanup();
|
|
||||||
|
|
||||||
void SetFont( const wxFont& font );
|
void SetFont( const wxFont& font );
|
||||||
void SetFont( int fontsize );
|
void SetFont( int fontsize );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue