- // Use all divs for the positive range if there are no negative values
- if ((min == 0) && (neg_vdivs_ > 0)) {
- pos_vdivs_ += neg_vdivs_;
- neg_vdivs_ = 0;
+ // If we're allowed to alter the div assignment...
+ if (!keep_divs) {
+ // Use all divs for the positive range if there are no negative values
+ if ((min == 0) && (neg_vdivs_ > 0)) {
+ pos_vdivs_ += neg_vdivs_;
+ neg_vdivs_ = 0;
+ }
+
+ // Split up the divs if there are negative values but no negative divs
+ if ((min < 0) && (neg_vdivs_ == 0)) {
+ neg_vdivs_ = pos_vdivs_ / 2;
+ pos_vdivs_ -= neg_vdivs_;
+ }
+ }
+
+ // If there is still no positive div when we need it, add one
+ // (this can happen when pos_vdivs==neg_vdivs==0)
+ if ((max > 0) && (pos_vdivs_ == 0)) {
+ pos_vdivs_ = 1;
+ owner_->extents_changed(false, true);