Skip to content

Commit d9dec7f

Browse files
committed
fix to propagate_scale_change
1 parent ee788c8 commit d9dec7f

File tree

1 file changed

+18
-17
lines changed

1 file changed

+18
-17
lines changed

geometry.cpp

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1451,25 +1451,26 @@ EX void check_cgi() {
14511451

14521452
}
14531453

1454-
EX void propagate_scale_change() {
1454+
/** auxiliary for propagate_scale_change */
1455+
template<class T> void affect_scale_change(geometry_information*& alt_cgip, const T& switcher) {
1456+
auto gi = alt_cgip;
1457+
bool changed = false;
1458+
switcher([&] {
1459+
check_cgi();
1460+
changed = gi != cgip;
1461+
if(changed && (gi->state & 1)) cgi.require_basics();
1462+
if(changed && (gi->state & 2)) cgi.require_shapes();
1463+
gi = alt_cgip = cgip;
1464+
});
1465+
alt_cgip = gi;
1466+
if(changed) switcher(propagate_scale_change);
1467+
};
14551468

1456-
auto affect = [] (geometry_information*& alt_cgip, const auto& switcher) {
1457-
auto gi = alt_cgip;
1458-
bool changed = false;
1459-
switcher([&] {
1460-
check_cgi();
1461-
changed = gi != cgip;
1462-
if(changed && (gi->state & 1)) cgi.require_basics();
1463-
if(changed && (gi->state & 2)) cgi.require_shapes();
1464-
gi = alt_cgip = cgip;
1465-
});
1466-
alt_cgip = gi;
1467-
if(changed) switcher(propagate_scale_change);
1468-
};
1469+
EX void propagate_scale_change() {
14691470

1470-
if(mhybrid) affect(hybrid::underlying_cgip, [] (const auto& f) { hybrid::in_underlying_geometry(f); });
1471-
if(hybrid::pmap) affect(hybrid::pcgip, [] (const auto& f) { hybrid::in_actual(f); });
1472-
if(fake::in()) affect(fake::underlying_cgip, [] (const auto& f) { fake::in_underlying_geometry(f); });
1471+
if(mhybrid) affect_scale_change(hybrid::underlying_cgip, [] (const auto& f) { hybrid::in_underlying_geometry(f); });
1472+
if(hybrid::pmap) affect_scale_change(hybrid::pcgip, [] (const auto& f) { hybrid::in_actual(f); });
1473+
if(fake::in()) affect_scale_change(fake::underlying_cgip, [] (const auto& f) { fake::in_underlying_geometry(f); });
14731474
}
14741475

14751476
void clear_cgis() {

0 commit comments

Comments
 (0)