Region Transform::transform(const Region& reg) const { Region out; if (UNLIKELY(transformed())) { if (LIKELY(preserveRects())) { Rect r; Region::iterator iterator(reg); while (iterator.iterate(&r)) { out.orSelf(transform(r)); } } else { out.set(transform(reg.bounds())); } } else { out = reg.translate(tx(), ty()); } return out; }
Region Transform::transform(const Region& reg) const { Region out; if (CC_UNLIKELY(type() > TRANSLATE)) { if (CC_LIKELY(preserveRects())) { Region::const_iterator it = reg.begin(); Region::const_iterator const end = reg.end(); while (it != end) { out.orSelf(transform(*it++)); } } else { out.set(transform(reg.bounds())); } } else { int xpos = floorf(tx() + 0.5f); int ypos = floorf(ty() + 0.5f); out = reg.translate(xpos, ypos); } return out; }