Buggy code:
class CBannerLayout extends Layout { protected Point computeSize ( Composite composite , int wHint , int hHint , boolean flushCache ) { } Point computeChildSize ( Control control , int wHint , int hHint , boolean flushCache ) { } int computeTrim ( Control c ) { } protected boolean flushCache ( Control control ) { } protected void layout ( Composite composite , boolean flushCache ) { CBanner banner = ( ( CBanner ) ( composite ) ) ; Control left = banner . left ; Control right = banner . right ; Control bottom = banner . bottom ; Point size = banner . getSize ( ) ; boolean showCurve = ( left != null ) && ( right != null ) ; int width = size . x ; int height = size . y ; Point bottomSize = new Point ( 0 , 0 ) ; if ( bottom != null ) { int trim = computeTrim ( bottom ) ; int w = Math . max ( 0 , ( width - trim ) ) ; bottomSize = computeChildSize ( bottom , w , DEFAULT , flushCache ) ; height -= ( ( bottomSize . y ) + ( CBanner . BORDER_STRIPE ) ) + 2 ; } if ( showCurve ) height -= ( ( CBanner . BORDER_TOP ) + ( CBanner . BORDER_BOTTOM ) ) + ( 2 * ( CBanner . BORDER_STRIPE ) ) ; height = Math . max ( 0 , height ) ; Point rightSize = new Point ( 0 , 0 ) ; if ( right != null ) { int trim = computeTrim ( right ) ; int w = SWT . DEFAULT ; if ( ( banner . rightWidth ) != ( SWT . DEFAULT ) ) { w = ( banner . rightWidth ) - trim ; if ( left != null ) { w = Math . min ( w , ( ( ( ( width - ( banner . curve_width ) ) + ( 2 * ( banner . curve_indent ) ) ) - ( CBanner . MIN_LEFT ) ) - trim ) ) ; } w = Math . max ( 0 , w ) ; } rightSize = computeChildSize ( right , w , DEFAULT , flushCache ) ; <START_BUG> width -= ( ( rightSize . x ) + ( banner . curve_width ) ) - ( 2 * ( banner . curve_indent ) ) ; <END_BUG> } Point leftSize = new Point ( 0 , 0 ) ; if ( left != null ) { int trim = computeTrim ( left ) ; int w = Math . max ( 0 , ( width - trim ) ) ; leftSize = computeChildSize ( left , w , DEFAULT , flushCache ) ; } int x = 0 ; int y = 0 ; int oldStart = banner . curveStart ; Rectangle leftRect = null ; Rectangle rightRect = null ; Rectangle bottomRect = null ; if ( bottom != null ) { bottomRect = new Rectangle ( x , ( ( y + ( size . y ) ) - ( bottomSize . y ) ) , bottomSize . x , bottomSize . y ) ; } if ( showCurve ) y += ( CBanner . BORDER_TOP ) + ( CBanner . BORDER_STRIPE ) ; if ( left != null ) { leftRect = new Rectangle ( x , y , leftSize . x , leftSize . y ) ; banner . curveStart = ( x + ( leftSize . x ) ) - ( banner . curve_indent ) ; x += ( ( leftSize . x ) + ( banner . curve_width ) ) - ( 2 * ( banner . curve_indent ) ) ; } if ( right != null ) { if ( left != null ) { rightSize . y = Math . max ( leftSize . y , ( ( banner . rightMinHeight ) == ( SWT . DEFAULT ) ? rightSize . y : banner . rightMinHeight ) ) ; } rightRect = new Rectangle ( x , y , rightSize . x , rightSize . y ) ; } if ( ( banner . curveStart ) < oldStart ) { banner . redraw ( ( ( banner . curveStart ) - ( CBanner . CURVE_TAIL ) ) , 0 , ( ( ( ( oldStart + ( banner . curve_width ) ) - ( banner . curveStart ) ) + ( CBanner . CURVE_TAIL ) ) + 5 ) , size . y , false ) ; } if ( ( banner . curveStart ) > oldStart ) { banner . redraw ( ( oldStart - ( CBanner . CURVE_TAIL ) ) , 0 , ( ( ( ( ( banner . curveStart ) + ( banner . curve_width ) ) - oldStart ) + ( CBanner . CURVE_TAIL ) ) + 5 ) , size . y , false ) ; } banner . update ( ) ; banner . curveRect = new Rectangle ( banner . curveStart , 0 , banner . curve_width , size . y ) ; if ( bottomRect != null ) bottom . setBounds ( bottomRect ) ; if ( rightRect != null ) right . setBounds ( rightRect ) ; if ( leftRect != null ) left . setBounds ( leftRect ) ; } }

Fix:
width -= ( ( rightSize . x ) + ( banner . curve_width ) ) - ( banner . curve_indent ) ;