mirror of
https://github.com/amyinspace/MagicSetEditor2.git
synced 2026-06-10 21:06:59 -04:00
Catch all exceptions in onPaint functions, because otherwise we show a message box. Message boxes while in a paint handler lead to a crash on win32.
Made a CATCH_ALL_ERRORS macro containing the common catch statements. git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@1034 0fc631ac-6414-0410-93d0-97cfa31319b6
This commit is contained in:
@@ -87,7 +87,9 @@ void CardViewer::onPaint(wxPaintEvent&) {
|
||||
// draw
|
||||
if (!up_to_date) {
|
||||
up_to_date = true;
|
||||
draw(dc);
|
||||
try {
|
||||
draw(dc);
|
||||
} CATCH_ALL_ERRORS(false); // don't show message boxes in onPaint!
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -183,7 +183,9 @@ wxSize GalleryList::DoGetBestSize() const {
|
||||
|
||||
void GalleryList::onPaint(wxPaintEvent&) {
|
||||
wxBufferedPaintDC dc(this);
|
||||
OnDraw(dc);
|
||||
try {
|
||||
OnDraw(dc);
|
||||
} CATCH_ALL_ERRORS(false); // don't show message boxes in onPaint!
|
||||
}
|
||||
void GalleryList::OnDraw(DC& dc) {
|
||||
wxSize cs = GetClientSize();
|
||||
|
||||
@@ -985,16 +985,18 @@ size_t GraphControl::getDimensionality() const {
|
||||
|
||||
void GraphControl::onPaint(wxPaintEvent&) {
|
||||
wxBufferedPaintDC dc(this);
|
||||
wxSize cs = GetClientSize();
|
||||
RotatedDC rdc(dc, 0, RealRect(RealPoint(0,0),cs), 1, QUALITY_LOW);
|
||||
rdc.SetPen(*wxTRANSPARENT_PEN);
|
||||
rdc.SetBrush(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
|
||||
rdc.DrawRectangle(rdc.getInternalRect());
|
||||
if (graph) {
|
||||
for (int layer = LAYER_BOTTOM ; layer < LAYER_COUNT ; ++layer) {
|
||||
graph->draw(rdc, current_item, (DrawLayer)layer);
|
||||
try {
|
||||
wxSize cs = GetClientSize();
|
||||
RotatedDC rdc(dc, 0, RealRect(RealPoint(0,0),cs), 1, QUALITY_LOW);
|
||||
rdc.SetPen(*wxTRANSPARENT_PEN);
|
||||
rdc.SetBrush(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
|
||||
rdc.DrawRectangle(rdc.getInternalRect());
|
||||
if (graph) {
|
||||
for (int layer = LAYER_BOTTOM ; layer < LAYER_COUNT ; ++layer) {
|
||||
graph->draw(rdc, current_item, (DrawLayer)layer);
|
||||
}
|
||||
}
|
||||
}
|
||||
} CATCH_ALL_ERRORS(false); // don't show message boxes in onPaint!
|
||||
}
|
||||
|
||||
void GraphControl::onSize(wxSizeEvent&) {
|
||||
|
||||
@@ -115,6 +115,7 @@ class PackageInfoPanel : public wxPanel {
|
||||
DECLARE_EVENT_TABLE();
|
||||
|
||||
void onPaint(wxPaintEvent&);
|
||||
void draw(DC&);
|
||||
};
|
||||
|
||||
PackageInfoPanel::PackageInfoPanel(Window* parent)
|
||||
@@ -128,6 +129,11 @@ void PackageInfoPanel::setPackage(const InstallablePackageP& package) {
|
||||
|
||||
void PackageInfoPanel::onPaint(wxPaintEvent&) {
|
||||
wxBufferedPaintDC dc(this);
|
||||
try {
|
||||
draw(dc);
|
||||
} CATCH_ALL_ERRORS(false); // don't show message boxes in onPaint!
|
||||
}
|
||||
void PackageInfoPanel::draw(DC& dc) {
|
||||
wxSize cs = GetClientSize();
|
||||
dc.SetPen(*wxTRANSPARENT_PEN);
|
||||
dc.SetBrush(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
|
||||
|
||||
@@ -200,7 +200,9 @@ void SymbolControl::draw(DC& dc) {
|
||||
}
|
||||
void SymbolControl::onPaint(wxPaintEvent&) {
|
||||
wxBufferedPaintDC dc(this);
|
||||
draw(dc);
|
||||
try {
|
||||
draw(dc);
|
||||
} CATCH_ALL_ERRORS(false); // don't show message boxes in onPaint!
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------- : Events
|
||||
|
||||
Reference in New Issue
Block a user