From 5eb034e82da77044a699b2523ae0edb71d0343f3 Mon Sep 17 00:00:00 2001 From: "munkyu.im" Date: Thu, 14 Jun 2012 13:50:12 +0900 Subject: [PATCH] [Title]add screenshot scaling [Type] [Module] [Priority] [CQ#] [Redmine#] [Problem] [Cause] [Solution] [TestCase] --- .../client/resource/icons/decrease_scale.png | Bin 0 -> 3526 bytes .../client/resource/icons/increase_scale.png | Bin 0 -> 3560 bytes .../emulator/skin/image/ImageRegistry.java | 2 + .../skin/screenshot/ScreenShotDialog.java | 205 ++++++++++++++++-- 4 files changed, 187 insertions(+), 20 deletions(-) create mode 100644 tizen/src/skin/client/resource/icons/decrease_scale.png create mode 100644 tizen/src/skin/client/resource/icons/increase_scale.png diff --git a/tizen/src/skin/client/resource/icons/decrease_scale.png b/tizen/src/skin/client/resource/icons/decrease_scale.png new file mode 100644 index 0000000000000000000000000000000000000000..756c3e74dcad23d44ab3ad5edb98787e5fcc5c8a GIT binary patch literal 3526 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 (monitorBound.x + monitorBound.width)) { - x = parent.getLocation().x - shell.getSize().x - 20; + + label = new Label(shell, SWT.NORMAL ); + label.setText(" Resolution : " + config.getArgInt(ArgsConstants.RESOLUTION_WIDTH) + + "x" + config.getArgInt(ArgsConstants.RESOLUTION_HEIGHT) + " " + scaleLevel + "%"); + +// imageCanvas.addMouseMoveListener(new MouseMoveListener() { +// public void mouseMove(MouseEvent e) { +// Rectangle rectangle = imageCanvas.getBounds(); +// if(rectangle.contains(e.x - CANVAS_MARGIN, e.y - CANVAS_MARGIN) == true ) { +// ImageData imageData = image.getImageData(); +// +// try { +// int pixel = imageData.getPixel(e.x - CANVAS_MARGIN , e.y - CANVAS_MARGIN); +// if(pixel != 0) { +// PaletteData paletteData = new PaletteData( RED_MASK, GREEN_MASK, BLUE_MASK ); +// RGB rgb = paletteData.getRGB(pixel); +// label.setText("R: "+ rgb.red + " G: " + rgb.green + " B: " + rgb.blue); +// label.update(); +// } +// }catch (IllegalArgumentException e1) { +// logger.warning(e1.getMessage()); +// } +// +// } +// } +// }); + + Rectangle monitorBound = Display.getDefault().getBounds(); + logger.info("host monitor display bound : " + monitorBound); + Rectangle emulatorBound = parent.getBounds(); + logger.info("current Emulator window bound : " + emulatorBound); + Rectangle dialogBound = shell.getBounds(); + logger.info("current ScreenShot Dialog bound : " + dialogBound); + + /* size correction */ + shell.setSize(emulatorBound.width, emulatorBound.height); + dialogBound = shell.getBounds(); + logger.info("current ScreenShot Dialog bound : " + dialogBound); + + /* location correction */ + int x = emulatorBound.x + emulatorBound.width + 20; + int y = emulatorBound.y; + if ((x + dialogBound.width) > (monitorBound.x + monitorBound.width)) { + x = emulatorBound.x - dialogBound.width - 20; } shell.setLocation(x, y); + dialogBound = shell.getBounds(); + logger.info("current ScreenShot Dialog bound : " + dialogBound); } @@ -227,20 +281,35 @@ public class ScreenShotDialog { int width = config.getArgInt( ArgsConstants.RESOLUTION_WIDTH ); int height = config.getArgInt( ArgsConstants.RESOLUTION_HEIGHT ); - ImageData imageData = new ImageData( width, height, COLOR_DEPTH, paletteData, 1, receivedData ); - + ImageData imageData = new ImageData( width , height, COLOR_DEPTH, paletteData, 1, receivedData ); + RotationInfo rotation = getCurrentRotation(); imageData = rotateImageData( imageData, rotation ); - this.image = new Image( Display.getDefault(), imageData ); - imageCanvas.redraw(); - + this.image = new Image( Display.getDefault(), imageData ); + + imageCanvas.redraw(); + } else { throw new ScreenShotException( "Fail to get image data." ); } } + + public double getScaleLevel() { + return scaleLevel; + } + public void DownScaleLevel() { + scaleLevel /= 2; + logger.info("down scaling level : " + scaleLevel); + } + + public void UpScaleLevel() { + scaleLevel *= 2; + logger.info("up scaling level : " + scaleLevel); + } + private void arrageImageLayout() { ImageData imageData = image.getImageData(); @@ -376,7 +445,7 @@ public class ScreenShotDialog { } ); - ToolItem copyItem = new ToolItem( toolBar, SWT.FLAT ); + copyItem = new ToolItem( toolBar, SWT.FLAT ); copyItem.setImage( ImageRegistry.getInstance().getIcon( IconName.COPY_SCREEN_SHOT ) ); copyItem.setToolTipText( "Copy to clipboard" ); @@ -389,6 +458,18 @@ public class ScreenShotDialog { return; } + copyItem.setEnabled(false); + shell.getDisplay().asyncExec(new Runnable() { + public void run() { + try { + Thread.sleep(TOOLITEM_COOLTIME); + } catch (InterruptedException e) { + e.printStackTrace(); + } + copyItem.setEnabled(true); + } + }); + ImageLoader loader = new ImageLoader(); ImageData data = null; @@ -420,7 +501,7 @@ public class ScreenShotDialog { } ); - ToolItem refreshItem = new ToolItem( toolBar, SWT.FLAT ); + refreshItem = new ToolItem( toolBar, SWT.FLAT ); refreshItem.setImage( ImageRegistry.getInstance().getIcon( IconName.REFRESH_SCREEN_SHOT ) ); refreshItem.setToolTipText( "Refresh image" ); @@ -428,16 +509,100 @@ public class ScreenShotDialog { @Override public void widgetSelected( SelectionEvent e ) { + refreshItem.setEnabled(false); + shell.getDisplay().asyncExec(new Runnable() { + public void run() { + try { + Thread.sleep(TOOLITEM_COOLTIME); + } catch (InterruptedException e) { + e.printStackTrace(); + } + refreshItem.setEnabled(true); + } + }); + + Point dialogSize = shell.getSize(); + try { clickShutter(); } catch ( ScreenShotException ex ) { logger.log( Level.SEVERE, "Fail to create a screen shot.", ex ); SkinUtil.openMessage( shell, null, "Fail to create a screen shot.", SWT.ERROR, config ); } + + /* restoration */ + if (shell.getSize() != dialogSize) { + shell.setSize(dialogSize); + } + } + + } ); + + IncreaseScaleItem = new ToolItem( toolBar, SWT.FLAT ); + IncreaseScaleItem.setImage( ImageRegistry.getInstance().getIcon( IconName.INCREASE_SCALE ) ); + IncreaseScaleItem.setToolTipText( "Increase view size" ); + IncreaseScaleItem.addSelectionListener( new SelectionAdapter() { + @Override + public void widgetSelected( SelectionEvent e ) { + double level = getScaleLevel(); + Point dialogSize = shell.getSize(); + + UpScaleLevel(); + imageCanvas.redraw(); + arrageImageLayout(); + label.setText(" Resolution : " + config.getArgInt(ArgsConstants.RESOLUTION_WIDTH) + + "x" + config.getArgInt(ArgsConstants.RESOLUTION_HEIGHT) + " " + scaleLevel + "%"); + label.update(); + + if(level >= 400d) { + IncreaseScaleItem.setEnabled(false); + DecreaseScaleItem.setEnabled(true); + }else { + IncreaseScaleItem.setEnabled(true); + DecreaseScaleItem.setEnabled(true); + } + + /* restoration */ + if (shell.getSize() != dialogSize) { + shell.setSize(dialogSize); + } + } + + } ); + + DecreaseScaleItem = new ToolItem( toolBar, SWT.FLAT ); + DecreaseScaleItem.setImage( ImageRegistry.getInstance().getIcon( IconName.DECREASE_SCALE ) ); + DecreaseScaleItem.setToolTipText( "Decrease view size" ); + DecreaseScaleItem.addSelectionListener( new SelectionAdapter() { + @Override + public void widgetSelected( SelectionEvent e ) { + double level = getScaleLevel(); + Point dialogSize = shell.getSize(); + + DownScaleLevel(); + imageCanvas.redraw(); + arrageImageLayout(); + label.setText(" Resolution : " + config.getArgInt(ArgsConstants.RESOLUTION_WIDTH) + + "x" + config.getArgInt(ArgsConstants.RESOLUTION_HEIGHT) + " " + scaleLevel + "%"); + label.update(); + + if(level <= 25) { + DecreaseScaleItem.setEnabled(false); + IncreaseScaleItem.setEnabled(true); + }else { + DecreaseScaleItem.setEnabled(true); + IncreaseScaleItem.setEnabled(true); + } + + /* restoration */ + if (shell.getSize() != dialogSize) { + shell.setSize(dialogSize); + } } } ); + } private void saveFile( String fileFullPath, FileDialog fileDialog ) { @@ -548,4 +713,4 @@ public class ScreenShotDialog { return shell; } -} +} \ No newline at end of file -- 2.34.1