Return-Path: X-Original-To: apmail-directory-commits-archive@www.apache.org Delivered-To: apmail-directory-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 443EAD6E6 for ; Tue, 16 Oct 2012 11:39:11 +0000 (UTC) Received: (qmail 99174 invoked by uid 500); 16 Oct 2012 11:39:10 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 99099 invoked by uid 500); 16 Oct 2012 11:39:10 -0000 Mailing-List: contact commits-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@directory.apache.org Delivered-To: mailing list commits@directory.apache.org Received: (qmail 99086 invoked by uid 99); 16 Oct 2012 11:39:09 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 16 Oct 2012 11:39:09 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 16 Oct 2012 11:39:05 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 78C4523888FE for ; Tue, 16 Oct 2012 11:38:20 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1398743 - /directory/studio/trunk/plugins/valueeditors/src/main/java/org/apache/directory/studio/valueeditors/image/ImageDialog.java Date: Tue, 16 Oct 2012 11:38:20 -0000 To: commits@directory.apache.org From: pamarcelot@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20121016113820.78C4523888FE@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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(); }