You need to sign in or sign up before continuing.
Commit ca8e4031 authored by twanvl's avatar twanvl

Fixed: CardViewers fighting over styles when multiple windows are open

parent 7858d5b8
......@@ -37,7 +37,10 @@ wxSize CardViewer::DoGetBestSize() const {
}
void CardViewer::redraw(const ValueViewer& v) {
if (drawing) return;
// Don't refresh if we OR ANOTHER CardViewer is drawing
// drawing another viewer causes styles to be updated for its active card, which may be different,
// causing the two viewers to continously refresh.
if (drawing_card()) return;
up_to_date = false;
RefreshRect(getRotation().trRectToBB(v.boundingBox()), false);
}
......@@ -47,7 +50,7 @@ void CardViewer::onChange() {
}
void CardViewer::redraw() {
if (drawing) return;
if (drawing_card()) return;
up_to_date = false;
Refresh(false);
}
......
......@@ -23,11 +23,13 @@ DECLARE_TYPEOF_NO_REV(IndexMap<FieldP COMMA StyleP>);
// ----------------------------------------------------------------------------- : DataViewer
DataViewer::DataViewer() : drawing(false) {}
DataViewer::DataViewer() {}
DataViewer::~DataViewer() {}
// ----------------------------------------------------------------------------- : Drawing
IMPLEMENT_DYNAMIC_ARG(bool, drawing_card, false);
void DataViewer::draw(DC& dc) {
StyleSheetSettings& ss = settings.stylesheetSettingsFor(*stylesheet);
RotatedDC rdc(dc, getRotation(),
......@@ -36,7 +38,7 @@ void DataViewer::draw(DC& dc) {
}
void DataViewer::draw(RotatedDC& dc, const Color& background) {
if (!set) return; // no set specified, don't draw anything
drawing = true;
WITH_DYNAMIC_ARG(drawing_card, true);
// fill with background color
clearDC(dc.getDC(), background);
// update style scripts
......@@ -69,7 +71,6 @@ void DataViewer::draw(RotatedDC& dc, const Color& background) {
}
}
}
drawing = false;
}
void DataViewer::drawViewer(RotatedDC& dc, ValueViewer& v) {
v.draw(dc);
......
......@@ -20,6 +20,8 @@ class Context;
// ----------------------------------------------------------------------------- : DataViewer
DECLARE_DYNAMIC_ARG(bool, drawing_card);
/// A viewer can generate an image of some values, usually a card.
class DataViewer : public SetView {
public:
......@@ -98,7 +100,6 @@ class DataViewer : public SetView {
vector<ValueViewerP> viewers; ///< The viewers for the different values in the data
CardP card; ///< The card that is currently displayed, if any
bool drawing; ///< Are we currently drawing?
mutable StyleSheetP stylesheet; ///< Stylesheet being used
};
......
......@@ -10,8 +10,6 @@
#include <render/value/choice.hpp>
#include <render/card/viewer.hpp>
DECLARE_TYPEOF_COLLECTION(wxPoint);
// ----------------------------------------------------------------------------- : ChoiceValueViewer
IMPLEMENT_VALUE_VIEWER(Choice);
......
......@@ -11,7 +11,6 @@
#include <render/card/viewer.hpp>
DECLARE_TYPEOF_COLLECTION(ColorField::ChoiceP);
DECLARE_TYPEOF_COLLECTION(wxPoint);
// ----------------------------------------------------------------------------- : ColorValueViewer
......
......@@ -11,8 +11,6 @@
#include <render/card/viewer.hpp>
#include <gui/util.hpp>
DECLARE_TYPEOF_COLLECTION(wxPoint);
// ----------------------------------------------------------------------------- : ImageValueViewer
IMPLEMENT_VALUE_VIEWER(Image);
......
......@@ -13,7 +13,6 @@
#include <gui/util.hpp>
DECLARE_TYPEOF_COLLECTION(String);
DECLARE_TYPEOF_COLLECTION(wxPoint);
// ----------------------------------------------------------------------------- : MultipleChoiceValueViewer
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment