@@ -136,14 +136,23 void HorizontalAxis::updateGeometry() | |||||
136 | tickItem->setLine(layout[i], axisRect.top(), layout[i], axisRect.top() + labelPadding()); |
|
136 | tickItem->setLine(layout[i], axisRect.top(), layout[i], axisRect.top() + labelPadding()); | |
137 | } |
|
137 | } | |
138 |
|
138 | |||
139 |
//label in be |
|
139 | //label in between | |
140 | if(intervalAxis()&& i+1!=layout.size()) { |
|
140 | bool forceHide = false; | |
141 | const qreal delta = (layout[i+1] - layout[i])/2; |
|
141 | if (intervalAxis() && (i + 1) != layout.size()) { | |
142 | labelItem->setPos(layout[i] + delta - center.x(), labelItem->pos().y()); |
|
142 | qreal leftBound = qMax(layout[i], gridRect.left()); | |
|
143 | qreal rightBound = qMin(layout[i + 1], gridRect.right()); | |||
|
144 | const qreal delta = rightBound - leftBound; | |||
|
145 | // Hide label in case visible part of the category at the grid edge is too narrow | |||
|
146 | if (delta < boundingRect.width() | |||
|
147 | && (leftBound == gridRect.left() || rightBound == gridRect.right())) { | |||
|
148 | forceHide = true; | |||
|
149 | } else { | |||
|
150 | labelItem->setPos(leftBound + (delta / 2.0) - center.x(), labelItem->pos().y()); | |||
|
151 | } | |||
143 | } |
|
152 | } | |
144 |
|
153 | |||
145 | //label overlap detection - compensate one pixel for rounding errors |
|
154 | //label overlap detection - compensate one pixel for rounding errors | |
146 | if(labelItem->pos().x() < width || |
|
155 | if (labelItem->pos().x() < width || forceHide || | |
147 | labelItem->pos().x() < (axisRect.left() - 1.0) || |
|
156 | labelItem->pos().x() < (axisRect.left() - 1.0) || | |
148 | (labelItem->pos().x() + boundingRect.width() - 1.0) > axisRect.right()){ |
|
157 | (labelItem->pos().x() + boundingRect.width() - 1.0) > axisRect.right()){ | |
149 | labelItem->setVisible(false); |
|
158 | labelItem->setVisible(false); |
@@ -146,14 +146,23 void VerticalAxis::updateGeometry() | |||||
146 | tickItem->setLine(axisRect.left(), layout[i], axisRect.left() + labelPadding(), layout[i]); |
|
146 | tickItem->setLine(axisRect.left(), layout[i], axisRect.left() + labelPadding(), layout[i]); | |
147 | } |
|
147 | } | |
148 |
|
148 | |||
149 |
//label in be |
|
149 | //label in between | |
150 | if(intervalAxis()&& i+1!=layout.size()) { |
|
150 | bool forceHide = false; | |
151 | const qreal delta = (layout[i+1] - layout[i])/2; |
|
151 | if (intervalAxis() && (i + 1) != layout.size()) { | |
152 | labelItem->setPos(labelItem->pos().x() , layout[i] + delta - center.y()); |
|
152 | qreal lowerBound = qMin(layout[i], gridRect.bottom()); | |
|
153 | qreal upperBound = qMax(layout[i + 1], gridRect.top()); | |||
|
154 | const qreal delta = lowerBound - upperBound; | |||
|
155 | // Hide label in case visible part of the category at the grid edge is too narrow | |||
|
156 | if (delta < boundingRect.height() | |||
|
157 | && (lowerBound == gridRect.bottom() || upperBound == gridRect.top())) { | |||
|
158 | forceHide = true; | |||
|
159 | } else { | |||
|
160 | labelItem->setPos(labelItem->pos().x() , lowerBound - (delta / 2.0) - center.y()); | |||
|
161 | } | |||
153 | } |
|
162 | } | |
154 |
|
163 | |||
155 | //label overlap detection - compensate one pixel for rounding errors |
|
164 | //label overlap detection - compensate one pixel for rounding errors | |
156 | if (labelItem->pos().y() + boundingRect.height() > height || |
|
165 | if (labelItem->pos().y() + boundingRect.height() > height || forceHide || | |
157 | (labelItem->pos().y() + (boundingRect.height() / 2.0) - 1.0) > axisRect.bottom() || |
|
166 | (labelItem->pos().y() + (boundingRect.height() / 2.0) - 1.0) > axisRect.bottom() || | |
158 | labelItem->pos().y() + (boundingRect.height() / 2.0) < (axisRect.top() - 1.0)) { |
|
167 | labelItem->pos().y() + (boundingRect.height() / 2.0) < (axisRect.top() - 1.0)) { | |
159 | labelItem->setVisible(false); |
|
168 | labelItem->setVisible(false); |
General Comments 0
You need to be logged in to leave comments.
Login now