diff --git a/src/gui/control/card_viewer.cpp b/src/gui/control/card_viewer.cpp index a489621c..12cbc6f5 100644 --- a/src/gui/control/card_viewer.cpp +++ b/src/gui/control/card_viewer.cpp @@ -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); } diff --git a/src/render/card/viewer.cpp b/src/render/card/viewer.cpp index ea7fbe84..80ed01b6 100644 --- a/src/render/card/viewer.cpp +++ b/src/render/card/viewer.cpp @@ -23,11 +23,13 @@ DECLARE_TYPEOF_NO_REV(IndexMap); // ----------------------------------------------------------------------------- : 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); diff --git a/src/render/card/viewer.hpp b/src/render/card/viewer.hpp index 19e16d0c..da5c1ab7 100644 --- a/src/render/card/viewer.hpp +++ b/src/render/card/viewer.hpp @@ -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 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 }; diff --git a/src/render/value/choice.cpp b/src/render/value/choice.cpp index 6d2c5fd4..41a026fa 100644 --- a/src/render/value/choice.cpp +++ b/src/render/value/choice.cpp @@ -10,8 +10,6 @@ #include #include -DECLARE_TYPEOF_COLLECTION(wxPoint); - // ----------------------------------------------------------------------------- : ChoiceValueViewer IMPLEMENT_VALUE_VIEWER(Choice); diff --git a/src/render/value/color.cpp b/src/render/value/color.cpp index d56636a3..c9b198eb 100644 --- a/src/render/value/color.cpp +++ b/src/render/value/color.cpp @@ -11,7 +11,6 @@ #include DECLARE_TYPEOF_COLLECTION(ColorField::ChoiceP); -DECLARE_TYPEOF_COLLECTION(wxPoint); // ----------------------------------------------------------------------------- : ColorValueViewer diff --git a/src/render/value/image.cpp b/src/render/value/image.cpp index 3376c7cc..2b25d1d8 100644 --- a/src/render/value/image.cpp +++ b/src/render/value/image.cpp @@ -11,8 +11,6 @@ #include #include -DECLARE_TYPEOF_COLLECTION(wxPoint); - // ----------------------------------------------------------------------------- : ImageValueViewer IMPLEMENT_VALUE_VIEWER(Image); diff --git a/src/render/value/multiple_choice.cpp b/src/render/value/multiple_choice.cpp index 7bfcbfb9..1afad23c 100644 --- a/src/render/value/multiple_choice.cpp +++ b/src/render/value/multiple_choice.cpp @@ -13,7 +13,6 @@ #include DECLARE_TYPEOF_COLLECTION(String); -DECLARE_TYPEOF_COLLECTION(wxPoint); // ----------------------------------------------------------------------------- : MultipleChoiceValueViewer