* @return an array containing {topArrowHeight, bottomArrowHeight}
*
* @since 3.6
*/
private int[] getVerticalScrollArrowHeights(StyledText textWidget, int bottomOffset) {
ScrollBar verticalBar= textWidget.getVerticalBar();
if (verticalBar == null)
return new int[] { 0, 0 };
int[] arrowHeights= computeScrollArrowHeights(textWidget, bottomOffset);
if (arrowHeights[0] > 0 || arrowHeights[1] > 0) {
fScrollArrowHeights= arrowHeights;
} else if (fScrollArrowHeights != null) {
return fScrollArrowHeights;
} else {
// No arrow heights available. Enlarge textWidget and tweak scroll bar to get reasonable values.
Point originalSize= textWidget.getSize();
try {
int fakeHeight= 1000;
bottomOffset= bottomOffset - originalSize.y + fakeHeight;
textWidget.setSize(originalSize.x, fakeHeight);
verticalBar.setValues(0, 0, 1 << 30, 1, 10, 10);
arrowHeights= computeScrollArrowHeights(textWidget, bottomOffset);
fScrollArrowHeights= arrowHeights;
} finally {
textWidget.setSize(originalSize); // also resets scroll bar values
}