- 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:
Václav Slavík 2001-11-21 00:00:12 +00:00
parent 8b81a824c4
commit d76048f514
6 changed files with 33 additions and 92 deletions

View File

@ -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();
}
}

View File

@ -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)

View File

@ -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)

View File

@ -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
// ----------------------------------------------------------------------------

View File

@ -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)

View File

@ -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();