- removed GDI lists from wxMGL
- friendlier wxApp::SetDisplayMode - redirects stdout and stderr to files if __WXDEBUG__ - wxLog initialization and flushing fixes git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12546 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
8b81a824c4
commit
d76048f514
@ -37,12 +37,6 @@
|
||||
#include "wx/univ/colschem.h"
|
||||
#include "wx/mgl/private.h"
|
||||
|
||||
#define MGL_DEBUG
|
||||
|
||||
#if defined(MGL_DEBUG) && !defined(__WXDEBUG__)
|
||||
#undef MGL_DEBUG
|
||||
#endif
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Global data
|
||||
//-----------------------------------------------------------------------------
|
||||
@ -166,14 +160,14 @@ static bool wxCreateMGL_WM(const wxDisplayModeInfo& displayMode)
|
||||
refresh = wxSystemOptions::GetOptionInt(wxT("mgl.screen-refresh"));
|
||||
#endif
|
||||
|
||||
mode = MGL_findMode(displayMode.GetScreenSize().x,
|
||||
displayMode.GetScreenSize().y,
|
||||
mode = MGL_findMode(displayMode.GetWidth(),
|
||||
displayMode.GetHeight(),
|
||||
displayMode.GetDepth());
|
||||
if ( mode == -1 )
|
||||
{
|
||||
wxLogError(_("Mode %ix%i-%i not available."),
|
||||
displayMode.GetScreenSize().x,
|
||||
displayMode.GetScreenSize().y,
|
||||
displayMode.GetWidth(),
|
||||
displayMode.GetHeight(),
|
||||
displayMode.GetDepth());
|
||||
return FALSE;
|
||||
}
|
||||
@ -253,12 +247,16 @@ bool wxApp::OnInitGui()
|
||||
if ( !wxAppBase::OnInitGui() )
|
||||
return FALSE;
|
||||
|
||||
#ifdef MGL_DEBUG
|
||||
// That damn MGL redirects stdin and stdout to physical console
|
||||
FILE *file = fopen("stderr", "wt");
|
||||
wxLog::SetActiveTarget(new wxLogStderr(file));
|
||||
#ifdef __WXDEBUG__
|
||||
// MGL redirects stdout and stderr to physical console, so lets redirect
|
||||
// it to file. Do it only when WXDEBUG environment variable is set
|
||||
if ( wxGetEnv(wxT("WXDEBUG"), NULL) )
|
||||
freopen("output.err", "wt", stderr);
|
||||
#endif
|
||||
|
||||
wxLog *oldLog = wxLog::SetActiveTarget(new wxLogGui);
|
||||
if ( oldLog ) delete oldLog;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -288,6 +286,11 @@ void wxApp::OnIdle(wxIdleEvent &event)
|
||||
// 'Garbage' collection of windows deleted with Close().
|
||||
DeletePendingObjects();
|
||||
|
||||
#if wxUSE_LOG
|
||||
// flush the logged messages if any
|
||||
wxLog::FlushActive();
|
||||
#endif // wxUSE_LOG
|
||||
|
||||
// Send OnIdle events to all windows
|
||||
if ( SendIdleEvents() )
|
||||
event.RequestMore(TRUE);
|
||||
@ -432,14 +435,7 @@ wxIcon wxApp::GetStdIcon(int which) const
|
||||
|
||||
void wxApp::CleanUp()
|
||||
{
|
||||
delete gs_rootWindow;
|
||||
|
||||
#if wxUSE_LOG
|
||||
// flush the logged messages if any
|
||||
wxLog *log = wxLog::GetActiveTarget();
|
||||
if (log != NULL && log->HasPendingMessages())
|
||||
log->Flush();
|
||||
|
||||
// continuing to use user defined log target is unsafe from now on because
|
||||
// some resources may be already unavailable, so replace it by something
|
||||
// more safe
|
||||
@ -448,6 +444,8 @@ void wxApp::CleanUp()
|
||||
delete oldlog;
|
||||
#endif // wxUSE_LOG
|
||||
|
||||
delete gs_rootWindow;
|
||||
|
||||
wxModule::CleanUpModules();
|
||||
|
||||
#if wxUSE_WX_RESOURCES
|
||||
@ -611,6 +609,12 @@ int wxEntry(int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
|
||||
#if wxUSE_LOG
|
||||
// flush the logged messages if any
|
||||
wxLog *log = wxLog::GetActiveTarget();
|
||||
if (log != NULL && log->HasPendingMessages())
|
||||
log->Flush();
|
||||
#endif // wxUSE_LOG
|
||||
retValue = wxTheApp->OnExit();
|
||||
}
|
||||
}
|
||||
|
@ -191,16 +191,9 @@ wxBitmapRefData::~wxBitmapRefData()
|
||||
IMPLEMENT_ABSTRACT_CLASS(wxBitmapHandler,wxObject)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxBitmap,wxBitmapBase)
|
||||
|
||||
wxBitmap::wxBitmap()
|
||||
{
|
||||
if ( wxTheBitmapList ) wxTheBitmapList->AddBitmap(this);
|
||||
}
|
||||
|
||||
wxBitmap::wxBitmap(int width, int height, int depth)
|
||||
{
|
||||
Create(width, height, depth);
|
||||
|
||||
if ( wxTheBitmapList ) wxTheBitmapList->AddBitmap(this);
|
||||
}
|
||||
|
||||
|
||||
@ -285,8 +278,6 @@ bool wxBitmap::CreateFromXpm(const char **bits)
|
||||
|
||||
*this = wxBitmap(img);
|
||||
|
||||
if ( wxTheBitmapList ) wxTheBitmapList->AddBitmap(this);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -370,15 +361,11 @@ wxImage wxBitmap::ConvertToImage() const
|
||||
wxBitmap::wxBitmap(const wxBitmap& bmp)
|
||||
{
|
||||
Ref(bmp);
|
||||
|
||||
if ( wxTheBitmapList ) wxTheBitmapList->AddBitmap(this);
|
||||
}
|
||||
|
||||
wxBitmap::wxBitmap(const wxString &filename, wxBitmapType type)
|
||||
{
|
||||
LoadFile(filename, type);
|
||||
|
||||
if ( wxTheBitmapList ) wxTheBitmapList->AddBitmap(this);
|
||||
}
|
||||
|
||||
wxBitmap::wxBitmap(const char bits[], int width, int height, int depth)
|
||||
@ -393,13 +380,6 @@ wxBitmap::wxBitmap(const char bits[], int width, int height, int depth)
|
||||
bdc->clearDevice();
|
||||
bdc->putMonoImage(0, 0, width, (width + 7) / 8, height, (void*)bits);
|
||||
delete bdc;
|
||||
|
||||
if ( wxTheBitmapList ) wxTheBitmapList->AddBitmap(this);
|
||||
}
|
||||
|
||||
wxBitmap::~wxBitmap()
|
||||
{
|
||||
if ( wxTheBitmapList ) wxTheBitmapList->DeleteObject(this);
|
||||
}
|
||||
|
||||
wxBitmap& wxBitmap::operator = (const wxBitmap& bmp)
|
||||
|
@ -121,18 +121,11 @@ wxBrushRefData::wxBrushRefData(const wxBrushRefData& data)
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxBrush,wxGDIObject)
|
||||
|
||||
wxBrush::wxBrush()
|
||||
{
|
||||
if (wxTheBrushList) wxTheBrushList->AddBrush(this);
|
||||
}
|
||||
|
||||
wxBrush::wxBrush(const wxColour &colour, int style)
|
||||
{
|
||||
m_refData = new wxBrushRefData();
|
||||
M_BRUSHDATA->m_style = style;
|
||||
M_BRUSHDATA->m_colour = colour;
|
||||
|
||||
if (wxTheBrushList) wxTheBrushList->AddBrush(this);
|
||||
}
|
||||
|
||||
wxBrush::wxBrush(const wxBitmap &stippleBitmap)
|
||||
@ -152,20 +145,11 @@ wxBrush::wxBrush(const wxBitmap &stippleBitmap)
|
||||
M_BRUSHDATA->m_style = wxSTIPPLE_MASK_OPAQUE;
|
||||
else
|
||||
M_BRUSHDATA->m_style = wxSTIPPLE;
|
||||
|
||||
if (wxTheBrushList) wxTheBrushList->AddBrush(this);
|
||||
}
|
||||
|
||||
wxBrush::wxBrush(const wxBrush &brush)
|
||||
{
|
||||
Ref(brush);
|
||||
|
||||
if (wxTheBrushList) wxTheBrushList->AddBrush(this);
|
||||
}
|
||||
|
||||
wxBrush::~wxBrush()
|
||||
{
|
||||
if (wxTheBrushList) wxTheBrushList->RemoveBrush(this);
|
||||
}
|
||||
|
||||
wxBrush& wxBrush::operator = (const wxBrush& brush)
|
||||
|
@ -150,12 +150,6 @@ wxFontRefData::~wxFontRefData()
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject)
|
||||
|
||||
void wxFont::Init()
|
||||
{
|
||||
if (wxTheFontList)
|
||||
wxTheFontList->Append(this);
|
||||
}
|
||||
|
||||
bool wxFont::Create(const wxNativeFontInfo& info)
|
||||
{
|
||||
return Create(info.pointSize, info.family, info.style, info.weight,
|
||||
@ -206,12 +200,6 @@ void wxFont::Unshare()
|
||||
}
|
||||
}
|
||||
|
||||
wxFont::~wxFont()
|
||||
{
|
||||
if (wxTheFontList)
|
||||
wxTheFontList->DeleteObject(this);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// accessors
|
||||
// ----------------------------------------------------------------------------
|
||||
|
@ -79,21 +79,12 @@ wxPenRefData::wxPenRefData(const wxPenRefData& data)
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxPen,wxGDIObject)
|
||||
|
||||
wxPen::wxPen()
|
||||
{
|
||||
if ( wxThePenList )
|
||||
wxThePenList->AddPen(this);
|
||||
}
|
||||
|
||||
wxPen::wxPen(const wxColour &colour, int width, int style)
|
||||
{
|
||||
m_refData = new wxPenRefData();
|
||||
M_PENDATA->m_width = width;
|
||||
M_PENDATA->m_style = style;
|
||||
M_PENDATA->m_colour = colour;
|
||||
|
||||
if ( wxThePenList )
|
||||
wxThePenList->AddPen(this);
|
||||
}
|
||||
|
||||
wxPen::wxPen(const wxBitmap& stipple, int width)
|
||||
@ -107,22 +98,11 @@ wxPen::wxPen(const wxBitmap& stipple, int width)
|
||||
M_PENDATA->m_style = wxSTIPPLE;
|
||||
M_PENDATA->m_stipple = stipple;
|
||||
wxBitmapToPixPattern(stipple, &(M_PENDATA->m_pixPattern), NULL);
|
||||
|
||||
if ( wxThePenList )
|
||||
wxThePenList->AddPen(this);
|
||||
}
|
||||
|
||||
wxPen::wxPen(const wxPen& pen)
|
||||
{
|
||||
Ref(pen);
|
||||
if ( wxThePenList )
|
||||
wxThePenList->AddPen(this);
|
||||
}
|
||||
|
||||
wxPen::~wxPen()
|
||||
{
|
||||
if ( wxThePenList )
|
||||
wxThePenList->RemovePen(this);
|
||||
}
|
||||
|
||||
wxPen& wxPen::operator = (const wxPen& pen)
|
||||
|
@ -132,6 +132,7 @@ static void wxWindowPainter(window_t *wnd, MGLDC *dc)
|
||||
static ibool wxWindowMouseHandler(window_t *wnd, event_t *e)
|
||||
{
|
||||
wxWindowMGL *win = (wxWindowMGL*)MGL_wmGetWindowUserData(wnd);
|
||||
wxPoint orig(win->GetClientAreaOrigin());
|
||||
wxPoint where;
|
||||
|
||||
MGL_wmCoordGlobalToLocal(win->GetHandle(),
|
||||
@ -149,8 +150,8 @@ static ibool wxWindowMouseHandler(window_t *wnd, event_t *e)
|
||||
wxMouseEvent event;
|
||||
event.SetEventObject(win);
|
||||
event.SetTimestamp(e->when);
|
||||
event.m_x = where.x;
|
||||
event.m_y = where.y;
|
||||
event.m_x = where.x - orig.x;
|
||||
event.m_y = where.y - orig.y;
|
||||
event.m_shiftDown = e->modifiers & EVT_SHIFTKEY;
|
||||
event.m_controlDown = e->modifiers & EVT_CTRLSTATE;
|
||||
event.m_altDown = e->modifiers & EVT_LEFTALT;
|
||||
@ -194,6 +195,10 @@ static ibool wxWindowMouseHandler(window_t *wnd, event_t *e)
|
||||
e->where_x, e->where_y,
|
||||
&event2.m_x, &event2.m_y);
|
||||
|
||||
wxPoint orig(gs_windowUnderMouse->GetClientAreaOrigin());
|
||||
event2.m_x -= orig.x;
|
||||
event2.m_y -= orig.y;
|
||||
|
||||
event2.SetEventObject(gs_windowUnderMouse);
|
||||
event2.SetEventType(wxEVT_LEAVE_WINDOW);
|
||||
gs_windowUnderMouse->GetEventHandler()->ProcessEvent(event2);
|
||||
@ -469,7 +474,7 @@ void wxWindowMGL::Init()
|
||||
// First of all, make sure window manager is up and running. If it is
|
||||
// not the case, initialize it in default display mode
|
||||
if ( !g_winMng )
|
||||
wxTheApp->SetDisplayMode(wxDisplayModeInfo(wxSize(640, 480), 16));
|
||||
wxTheApp->SetDisplayMode(wxDisplayModeInfo(640, 480, 16));
|
||||
|
||||
// generic:
|
||||
InitBase();
|
||||
|
Loading…
Reference in New Issue
Block a user