You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pa...@apache.org on 2012/10/16 13:38:20 UTC
svn commit: r1398743 -
/directory/studio/trunk/plugins/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/image/ImageDialog.java
Author: pamarcelot
Date: Tue Oct 16 11:38:20 2012
New Revision: 1398743
URL: http://svn.apache.org/viewvc?rev=1398743&view=rev
Log:
Fixed for DIRSTUDIO-775 (Display issues in Image Editor)
Modified:
directory/studio/trunk/plugins/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/image/ImageDialog.java
Modified: directory/studio/trunk/plugins/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/image/ImageDialog.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/image/ImageDialog.java?rev=1398743&r1=1398742&r2=1398743&view=diff
==============================================================================
--- directory/studio/trunk/plugins/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/image/ImageDialog.java (original)
+++ directory/studio/trunk/plugins/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/image/ImageDialog.java Tue Oct 16 11:38:20 2012
@@ -44,6 +44,7 @@ import org.eclipse.swt.events.ModifyEven
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.ImageLoader;
@@ -52,6 +53,7 @@ import org.eclipse.swt.layout.GridLayout
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
@@ -68,65 +70,55 @@ import org.eclipse.swt.widgets.Text;
*/
public class ImageDialog extends Dialog
{
+ /** The dialog setting key for the currently selected tab item */
+ private static final String SELECTED_TAB_DIALOGSETTINGS_KEY = ImageDialog.class.getName() + ".tab"; //$NON-NLS-1$
- private static final int MAX_WIDTH = 250;
-
- private static final int MAX_HEIGHT = 250;
+ /** The maximum width for the image */
+ private static final int MAX_WIDTH = 400;
+ /** The maximum height for the image */
+ private static final int MAX_HEIGHT = 400;
+ /** The current image tab item */
private static final int CURRENT_TAB = 0;
-
+ /** The new image tab item */
private static final int NEW_TAB = 1;
- private static final String SELECTED_TAB_DIALOGSETTINGS_KEY = ImageDialog.class.getName() + ".tab"; //$NON-NLS-1$
-
- private TabFolder tabFolder;
+ /** The current image bytes */
+ private byte[] currentImageRawData;
- private TabItem currentTab;
+ /** The required image type */
+ private int requiredImageType;
- private TabItem newTab;
+ /** The new image bytes */
+ private byte[] newImageRawData;
- private byte[] currentImageRawData;
+ /** The new image bytes in the required image format */
+ private byte[] newImageRawDataInRequiredFormat;
- private Image currentImage;
+ // UI widgets
+ private TabFolder tabFolder;
+ private TabItem currentTab;
private Composite currentImageContainer;
-
+ private Image currentImage;
private Label currentImageLabel;
-
private Text currentImageTypeText;
-
private Text currentImageWidthText;
-
private Text currentImageHeightText;
-
private Text currentImageSizeText;
-
private Button currentImageSaveButton;
- private byte[] newImageRawData;
-
- private Image newImage;
-
+ private TabItem newTab;
private Composite newImageContainer;
-
+ private Image newImage;
private Label newImageLabel;
-
private Text newImageTypeText;
-
private Text newImageWidthText;
-
private Text newImageHeightText;
-
private Text newImageSizeText;
-
private Text newImageFilenameText;
-
private Button newImageBrowseButton;
- private int requiredImageType;
-
- private byte[] newImageRawDataInRequiredFormat;
-
private Button okButton;
@@ -153,16 +145,19 @@ public class ImageDialog extends Dialog
*/
public boolean close()
{
+ // Disposing the current image
if ( currentImage != null && !currentImage.isDisposed() )
{
currentImage.dispose();
}
+
+ // Disposing the new image
if ( newImage != null && !newImage.isDisposed() )
{
newImage.dispose();
}
- // save selected tab to dialog settings
+ // Saving the selected tab item to dialog settings
ValueEditorsActivator.getDefault().getDialogSettings().put( SELECTED_TAB_DIALOGSETTINGS_KEY,
tabFolder.getSelectionIndex() );
@@ -179,11 +174,13 @@ public class ImageDialog extends Dialog
{
if ( newImageRawData != null )
{
+ // Preparing the new image bytes for the required format
try
{
ImageData imageData = new ImageData( new ByteArrayInputStream( newImageRawData ) );
if ( imageData.type != requiredImageType )
{
+ // Converting the new image in the required format
ImageLoader imageLoader = new ImageLoader();
imageLoader.data = new ImageData[]
{ imageData };
@@ -193,6 +190,7 @@ public class ImageDialog extends Dialog
}
else
{
+ // Directly using the new image bytes
newImageRawDataInRequiredFormat = newImageRawData;
}
}
@@ -239,9 +237,10 @@ public class ImageDialog extends Dialog
}
catch ( Exception e )
{
+ // Nothing to do
}
- // update on load
+ // Updating the tab folder on load
updateTabFolder();
}
@@ -252,17 +251,13 @@ public class ImageDialog extends Dialog
protected Control createDialogArea( Composite parent )
{
Composite composite = ( Composite ) super.createDialogArea( parent );
- GridData gd1 = new GridData( GridData.FILL_BOTH );
- gd1.widthHint = convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH );
- gd1.heightHint = convertVerticalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH );
- composite.setLayoutData( gd1 );
+ // GridData compositeGridData = new GridData( SWT.FILL, SWT.FILL, true, true );
+ // compositeGridData.widthHint = convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH );
+ // compositeGridData.heightHint = convertVerticalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH );
+ // composite.setLayoutData( compositeGridData );
tabFolder = new TabFolder( composite, SWT.TOP );
- GridLayout mainLayout = new GridLayout();
- mainLayout.marginWidth = 0;
- mainLayout.marginHeight = 0;
- tabFolder.setLayout( mainLayout );
- tabFolder.setLayoutData( new GridData( GridData.FILL_BOTH ) );
+ tabFolder.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
tabFolder.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
@@ -274,15 +269,10 @@ public class ImageDialog extends Dialog
// current image
if ( currentImageRawData != null && currentImageRawData.length > 0 )
{
- currentImageContainer = new Composite( tabFolder, SWT.NONE );
- GridLayout currentLayout = new GridLayout();
- currentLayout.marginHeight = convertVerticalDLUsToPixels( IDialogConstants.VERTICAL_MARGIN );
- currentLayout.marginWidth = convertHorizontalDLUsToPixels( IDialogConstants.HORIZONTAL_MARGIN );
- currentLayout.verticalSpacing = convertVerticalDLUsToPixels( IDialogConstants.VERTICAL_SPACING );
- currentLayout.horizontalSpacing = convertHorizontalDLUsToPixels( IDialogConstants.HORIZONTAL_SPACING );
- currentImageContainer.setLayout( currentLayout );
- currentImageContainer.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+ currentTab = new TabItem( tabFolder, SWT.NONE );
+ currentTab.setText( Messages.getString( "ImageDialog.CurrentImage" ) ); //$NON-NLS-1$
+ currentImageContainer = createTabItemComposite();
currentImageLabel = createImageLabel( currentImageContainer );
Composite currentImageInfoContainer = createImageInfoContainer( currentImageContainer );
@@ -321,7 +311,6 @@ public class ImageDialog extends Dialog
}
catch ( FileNotFoundException e )
{
-
ConnectionUIPlugin.getDefault().getExceptionHandler().handleException(
new Status( IStatus.ERROR, ValueEditorsConstants.PLUGIN_ID, IStatus.ERROR, Messages
.getString( "ImageDialog.CantWriteFile" ), e ) ); //$NON-NLS-1$
@@ -336,20 +325,14 @@ public class ImageDialog extends Dialog
}
} );
- currentTab = new TabItem( tabFolder, SWT.NONE );
- currentTab.setText( Messages.getString( "ImageDialog.CurrentImage" ) ); //$NON-NLS-1$
currentTab.setControl( currentImageContainer );
}
// new image
- newImageContainer = new Composite( tabFolder, SWT.NONE );
- GridLayout newLayout = new GridLayout();
- newLayout.marginHeight = convertVerticalDLUsToPixels( IDialogConstants.VERTICAL_MARGIN );
- newLayout.marginWidth = convertHorizontalDLUsToPixels( IDialogConstants.HORIZONTAL_MARGIN );
- newLayout.verticalSpacing = convertVerticalDLUsToPixels( IDialogConstants.VERTICAL_SPACING );
- newLayout.horizontalSpacing = convertHorizontalDLUsToPixels( IDialogConstants.HORIZONTAL_SPACING );
- newImageContainer.setLayout( newLayout );
- newImageContainer.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+ newTab = new TabItem( tabFolder, SWT.NONE );
+ newTab.setText( Messages.getString( "ImageDialog.NewImage" ) ); //$NON-NLS-1$
+
+ newImageContainer = createTabItemComposite();
newImageLabel = createImageLabel( newImageContainer );
@@ -377,9 +360,9 @@ public class ImageDialog extends Dialog
{
FileDialog fileDialog = new FileDialog( ImageDialog.this.getShell(), SWT.OPEN );
fileDialog.setText( Messages.getString( "ImageDialog.SelectImage" ) ); //$NON-NLS-1$
- // fileDialog.setFilterExtensions(IMAGE_FILE_EXTENSIONS);
fileDialog.setFileName( new File( newImageFilenameText.getText() ).getName() );
fileDialog.setFilterPath( new File( newImageFilenameText.getText() ).getParent() );
+
String returnedFileName = fileDialog.open();
if ( returnedFileName != null )
{
@@ -388,8 +371,6 @@ public class ImageDialog extends Dialog
}
} );
- newTab = new TabItem( tabFolder, SWT.NONE );
- newTab.setText( Messages.getString( "ImageDialog.NewImage" ) ); //$NON-NLS-1$
newTab.setControl( newImageContainer );
applyDialogFont( composite );
@@ -398,6 +379,51 @@ public class ImageDialog extends Dialog
/**
+ * Creates a tab item composite.
+ *
+ * @return a tab item composite
+ */
+ private Composite createTabItemComposite()
+ {
+ Composite composite = new Composite( tabFolder, SWT.NONE );
+
+ GridLayout compositeLayout = new GridLayout( 1, false );
+ compositeLayout.marginHeight = convertVerticalDLUsToPixels( IDialogConstants.VERTICAL_MARGIN );
+ compositeLayout.marginWidth = convertHorizontalDLUsToPixels( IDialogConstants.HORIZONTAL_MARGIN );
+ compositeLayout.verticalSpacing = convertVerticalDLUsToPixels( IDialogConstants.VERTICAL_SPACING );
+ compositeLayout.horizontalSpacing = convertHorizontalDLUsToPixels( IDialogConstants.HORIZONTAL_SPACING );
+ composite.setLayout( compositeLayout );
+
+ composite.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
+
+ return composite;
+ }
+
+
+ /**
+ * Creates the image label.
+ *
+ * @param parent the parent
+ * @return the image label
+ */
+ private Label createImageLabel( Composite parent )
+ {
+ Composite labelComposite = new Composite( parent, SWT.BORDER );
+ labelComposite.setLayout( new GridLayout() );
+ GridData gd = new GridData( SWT.FILL, SWT.FILL, true, true );
+ // gd.widthHint = MAX_WIDTH;
+ // gd.heightHint = MAX_HEIGHT;
+ labelComposite.setLayoutData( gd );
+ labelComposite.setBackground( getShell().getDisplay().getSystemColor( SWT.COLOR_WIDGET_NORMAL_SHADOW ) );
+
+ Label imageLabel = new Label( labelComposite, SWT.CENTER );
+ gd = new GridData( SWT.CENTER, SWT.CENTER, true, true );
+ imageLabel.setLayoutData( gd );
+ return imageLabel;
+ }
+
+
+ /**
* Update current image tab.
*/
private void updateCurrentImageGroup()
@@ -418,6 +444,10 @@ public class ImageDialog extends Dialog
currentImage = new Image( getShell().getDisplay(), resizeImage( imageData ) );
currentImageLabel.setText( "" ); //$NON-NLS-1$
currentImageLabel.setImage( currentImage );
+ GridData currentImageLabelGridData = new GridData( SWT.CENTER, SWT.CENTER, true, true );
+ currentImageLabelGridData.widthHint = currentImage.getBounds().width;
+ currentImageLabelGridData.heightHint = currentImage.getBounds().height;
+ currentImageLabel.setLayoutData( currentImageLabelGridData );
currentImageTypeText.setText( getImageType( imageData.type ) );
currentImageSizeText.setText( getSizeString( currentImageRawData.length ) );
currentImageWidthText.setText( NLS
@@ -586,55 +616,52 @@ public class ImageDialog extends Dialog
*/
private ImageData resizeImage( ImageData imageData )
{
+ // Computing the width scale factor
double widthScaleFactor = 1.0;
if ( imageData.width > MAX_WIDTH )
{
widthScaleFactor = ( double ) MAX_WIDTH / imageData.width;
}
+
+ // Computing the height scale factor
double heightScaleFactor = 1.0;
if ( imageData.height > MAX_HEIGHT )
{
heightScaleFactor = ( double ) MAX_HEIGHT / imageData.height;
}
- if ( heightScaleFactor < widthScaleFactor )
- {
- imageData = imageData.scaledTo(
- convertHorizontalDLUsToPixels( ( int ) ( imageData.width * heightScaleFactor ) ),
- convertHorizontalDLUsToPixels( ( int ) ( imageData.height * heightScaleFactor ) ) );
- }
- else
- {
- imageData = imageData.scaledTo(
- convertHorizontalDLUsToPixels( ( int ) ( imageData.width * widthScaleFactor ) ),
- convertHorizontalDLUsToPixels( ( int ) ( imageData.height * widthScaleFactor ) ) );
- }
+ // Taking the minimum of both
+ double minScalefactor = Math.min( heightScaleFactor, widthScaleFactor );
- return imageData;
+ // Resizing the image data
+ return resize( imageData, ( int ) ( imageData.width * minScalefactor ),
+ ( int ) ( imageData.height * minScalefactor ) );
}
/**
- * Creates the image label.
- *
- * @param parent the parent
- *
- * @return the image label
+ * Resizes an image using the GC (for better quality).
+ *
+ * @param imageData the image data
+ * @param width the width
+ * @param height the height
+ * @return the resized image
*/
- private Label createImageLabel( Composite parent )
+ private ImageData resize( ImageData imageData, int width, int height )
{
- Composite labelComposite = new Composite( parent, SWT.BORDER );
- labelComposite.setLayout( new GridLayout() );
- GridData gd = new GridData( SWT.FILL, SWT.FILL, true, true );
- gd.widthHint = MAX_WIDTH;
- gd.heightHint = MAX_HEIGHT;
- labelComposite.setLayoutData( gd );
- labelComposite.setBackground( getShell().getDisplay().getSystemColor( SWT.COLOR_WIDGET_NORMAL_SHADOW ) );
+ Image image = new Image( Display.getDefault(), imageData );
- Label imageLabel = new Label( labelComposite, SWT.CENTER );
- gd = new GridData( SWT.CENTER, SWT.CENTER, true, true );
- imageLabel.setLayoutData( gd );
- return imageLabel;
+ Image resizedImage = new Image( Display.getDefault(), width, height );
+
+ GC gc = new GC( resizedImage );
+ gc.setAntialias( SWT.ON );
+ gc.setInterpolation( SWT.HIGH );
+ gc.drawImage( image, 0, 0, image.getBounds().width, image.getBounds().height, 0, 0, width, height );
+ gc.dispose();
+
+ image.dispose();
+
+ return resizedImage.getImageData();
}