@ -103,14 +103,11 @@ public class WidgetBoundPane extends BasicPane {
}
public void populate ( ) {
Rectangle bounds = new Rectangle ( creator . getBounds ( ) ) ;
if ( ratioLockedButton ! = null ) {
// 临时禁止尺寸比例锁定,关掉widthSpinner/heightSpinner之间的数值关联,以更新其高度和宽度值
ratioLockedButton . setLocked ( false ) ;
}
width . setValue ( bounds . width ) ;
height . setValue ( bounds . height ) ;
if ( ratioLockedButton ! = null ) {
if ( ratioLockedButton = = null ) {
Rectangle bounds = new Rectangle ( creator . getBounds ( ) ) ;
width . setValue ( bounds . width ) ;
height . setValue ( bounds . height ) ;
} else {
ratioLockedButton . populate ( creator ) ;
}
}
@ -213,8 +210,7 @@ public class WidgetBoundPane extends BasicPane {
private final UISpinner mWidthSpinner ;
private final UISpinner mHeightSpinner ;
protected double width4Backup = 0 ;
protected double height4Backup = 0 ;
protected double aspectRatioBackup = 0 ;
public AspectRatioLockedButton ( UISpinner widthSpinner , UISpinner heightSpinner ) {
setUI ( new BasicButtonUI ( ) ) ;
@ -229,12 +225,16 @@ public class WidgetBoundPane extends BasicPane {
addActionListener ( new ActionListener ( ) {
@Override
public void actionPerformed ( ActionEvent e ) {
// 改变图标icon
setLocked ( ! isLocked ( ) ) ;
if ( isLocked ( ) & & isLockEnabled ( ) ) {
width4Backup = mWidthSpinner . getValue ( ) ;
height4Backup = mHeightSpinner . getValue ( ) ;
double width = mWidthSpinner . getValue ( ) ;
double height = mHeightSpinner . getValue ( ) ;
boolean nextLocked = ! isLocked ( ) ;
if ( nextLocked & & width > 0 & & height > 0 ) {
setLocked ( true ) ;
aspectRatioBackup = width / height ;
} else {
setLocked ( false ) ;
aspectRatioBackup = - 1 ;
}
if ( globalNameListener ! = null ) {
@ -250,16 +250,26 @@ public class WidgetBoundPane extends BasicPane {
mWidthSpinner . addChangeListener ( new ChangeListener ( ) {
@Override
public void stateChanged ( ChangeEvent e ) {
if ( isLockEnabled ( ) & & isLocked ( ) & & width4Backup > 0 & & height4Backup > 0 ) {
mHeightSpinner . setValue ( mWidthSpinner . getValue ( ) * height4Backup / width4Backup , false ) ;
if ( isLockEnabled ( ) & & isLocked ( ) ) {
if ( mWidthSpinner . getValue ( ) = = 0 ) {
setLocked ( false ) ;
aspectRatioBackup = - 1 ;
} else if ( aspectRatioBackup > 0 ) {
double value = mWidthSpinner . getValue ( ) / aspectRatioBackup ;
mHeightSpinner . setValue ( Math . round ( value ) , false ) ;
}
}
}
} ) ;
mHeightSpinner . addChangeListener ( new ChangeListener ( ) {
@Override
public void stateChanged ( ChangeEvent e ) {
if ( isLockEnabled ( ) & & isLocked ( ) & & width4Backup > 0 & & height4Backup > 0 ) {
mWidthSpinner . setValue ( mHeightSpinner . getValue ( ) * width4Backup / height4Backup , false ) ;
if ( isLockEnabled ( ) & & isLocked ( ) ) {
setLocked ( false ) ;
aspectRatioBackup = - 1 ;
} else if ( aspectRatioBackup > 0 ) {
double value = mHeightSpinner . getValue ( ) * aspectRatioBackup ;
mWidthSpinner . setValue ( Math . round ( value ) , false ) ;
}
}
} ) ;
@ -301,14 +311,26 @@ public class WidgetBoundPane extends BasicPane {
public void populate ( XCreator creator ) {
Rectangle bounds = new Rectangle ( creator . getBounds ( ) ) ;
width4Backup = bounds . width ;
height4Backup = bounds . height ;
Widget widget = creator . toData ( ) ;
aspectRatioBackup = widget . getAspectRatioBackup ( ) ;
setLocked ( widget . isAspectRatioLocked ( ) ) ;
mWidthSpinner . setValue ( bounds . width , false ) ;
mHeightSpinner . setValue ( bounds . height , false ) ;
}
public void update ( XCreator creator ) {
creator . toData ( ) . setAspectRatioLocked ( this . isLocked ( ) ) ;
Widget widget = creator . toData ( ) ;
if ( widget ! = null ) {
if ( this . isLocked ( ) ) {
widget . setAspectRatioLocked ( true ) ;
widget . setAspectRatioBackup ( this . aspectRatioBackup ) ;
} else {
widget . setAspectRatioLocked ( false ) ;
widget . setAspectRatioBackup ( - 1 . 0 ) ;
}
}
}
@Override