X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.utils.ui%2Fsrc%2Forg%2Fsimantics%2Futils%2Fui%2Fgfx%2Fclipboard%2FImageDataTransfer.java;fp=bundles%2Forg.simantics.utils.ui%2Fsrc%2Forg%2Fsimantics%2Futils%2Fui%2Fgfx%2Fclipboard%2FImageDataTransfer.java;h=7d4ae0f8d78a6124e71865fb14f1373a867b80f5;hb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;hp=19049c38cd3271d308b84d086c20dcbcfacc24d4;hpb=24e2b34260f219f0d1644ca7a138894980e25b14;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.utils.ui/src/org/simantics/utils/ui/gfx/clipboard/ImageDataTransfer.java b/bundles/org.simantics.utils.ui/src/org/simantics/utils/ui/gfx/clipboard/ImageDataTransfer.java index 19049c38c..7d4ae0f8d 100644 --- a/bundles/org.simantics.utils.ui/src/org/simantics/utils/ui/gfx/clipboard/ImageDataTransfer.java +++ b/bundles/org.simantics.utils.ui/src/org/simantics/utils/ui/gfx/clipboard/ImageDataTransfer.java @@ -1,106 +1,106 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 Association for Decentralized Information Management - * in Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.utils.ui.gfx.clipboard; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.dnd.ByteArrayTransfer; -import org.eclipse.swt.dnd.TransferData; -import org.eclipse.swt.graphics.ImageData; -import org.eclipse.swt.graphics.ImageLoader; -import org.simantics.utils.ui.ErrorLogger; -import org.simantics.utils.ui.gfx.clipboard.headers.Win32Constants; -import org.simantics.utils.ui.gfx.clipboard.streams.AddBitmapHeaderInputStream; -import org.simantics.utils.ui.gfx.clipboard.streams.RemoveBitmapHeaderOutputStream; -import org.simantics.utils.ui.gfx.clipboard.streams.UncompressedDIBInputStream; - - -/** - * Transfer class for handing image cut/copy/paste operations between Eclipse - * and native WIN32 apps - * - * @author Marko Luukkainen - * - */ -public class ImageDataTransfer extends ByteArrayTransfer { - - private static final ImageDataTransfer instance = new ImageDataTransfer(); - - private static final String CF_DIB = "CF_DIB"; - - private ImageDataTransfer() { - // - } - - public static ImageDataTransfer getInstance() { - return ImageDataTransfer.instance; - } - - /* (non-Javadoc) - * @see org.eclipse.swt.dnd.Transfer#getTypeIds() - */ - @Override - protected final int[] getTypeIds() { - return new int[] { Win32Constants.CF_DIB }; - } - - /* (non-Javadoc) - * @see org.eclipse.swt.dnd.Transfer#getTypeNames() - */ - @Override - protected final String[] getTypeNames() { - return new String[] { ImageDataTransfer.CF_DIB }; - } - - /* (non-Javadoc) - * @see org.eclipse.swt.dnd.ByteArrayTransfer#nativeToJava(org.eclipse.swt.dnd.TransferData) - */ - @Override - protected Object nativeToJava(TransferData transferData) { - final Object o = super.nativeToJava(transferData); - final byte[] bytes = (byte[]) o; - - try { - final InputStream iStream = new AddBitmapHeaderInputStream( - new UncompressedDIBInputStream(new ByteArrayInputStream( - bytes))); - final ImageData[] data = new ImageLoader().load(iStream); - if (data.length <= 0) { - return null; - } - return data[0]; - } catch (IOException e) { - ErrorLogger.defaultLogError("Cannot get image from clipboard", e); - return null; - } - } - - /* (non-Javadoc) - * @see org.eclipse.swt.dnd.ByteArrayTransfer#javaToNative(java.lang.Object, org.eclipse.swt.dnd.TransferData) - */ - @Override - protected void javaToNative(Object object, TransferData transferData) { - final ImageData imgData = (ImageData) object; - final ImageLoader loader = new ImageLoader(); - final ByteArrayOutputStream oStream = new ByteArrayOutputStream(); - final byte[] bytes; - - loader.data = new ImageData[] { imgData }; - loader.save(new RemoveBitmapHeaderOutputStream(oStream), SWT.IMAGE_BMP); - bytes = oStream.toByteArray(); - super.javaToNative(bytes, transferData); - } -} +/******************************************************************************* + * Copyright (c) 2007, 2010 Association for Decentralized Information Management + * in Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.utils.ui.gfx.clipboard; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.dnd.ByteArrayTransfer; +import org.eclipse.swt.dnd.TransferData; +import org.eclipse.swt.graphics.ImageData; +import org.eclipse.swt.graphics.ImageLoader; +import org.simantics.utils.ui.ErrorLogger; +import org.simantics.utils.ui.gfx.clipboard.headers.Win32Constants; +import org.simantics.utils.ui.gfx.clipboard.streams.AddBitmapHeaderInputStream; +import org.simantics.utils.ui.gfx.clipboard.streams.RemoveBitmapHeaderOutputStream; +import org.simantics.utils.ui.gfx.clipboard.streams.UncompressedDIBInputStream; + + +/** + * Transfer class for handing image cut/copy/paste operations between Eclipse + * and native WIN32 apps + * + * @author Marko Luukkainen + * + */ +public class ImageDataTransfer extends ByteArrayTransfer { + + private static final ImageDataTransfer instance = new ImageDataTransfer(); + + private static final String CF_DIB = "CF_DIB"; + + private ImageDataTransfer() { + // + } + + public static ImageDataTransfer getInstance() { + return ImageDataTransfer.instance; + } + + /* (non-Javadoc) + * @see org.eclipse.swt.dnd.Transfer#getTypeIds() + */ + @Override + protected final int[] getTypeIds() { + return new int[] { Win32Constants.CF_DIB }; + } + + /* (non-Javadoc) + * @see org.eclipse.swt.dnd.Transfer#getTypeNames() + */ + @Override + protected final String[] getTypeNames() { + return new String[] { ImageDataTransfer.CF_DIB }; + } + + /* (non-Javadoc) + * @see org.eclipse.swt.dnd.ByteArrayTransfer#nativeToJava(org.eclipse.swt.dnd.TransferData) + */ + @Override + protected Object nativeToJava(TransferData transferData) { + final Object o = super.nativeToJava(transferData); + final byte[] bytes = (byte[]) o; + + try { + final InputStream iStream = new AddBitmapHeaderInputStream( + new UncompressedDIBInputStream(new ByteArrayInputStream( + bytes))); + final ImageData[] data = new ImageLoader().load(iStream); + if (data.length <= 0) { + return null; + } + return data[0]; + } catch (IOException e) { + ErrorLogger.defaultLogError("Cannot get image from clipboard", e); + return null; + } + } + + /* (non-Javadoc) + * @see org.eclipse.swt.dnd.ByteArrayTransfer#javaToNative(java.lang.Object, org.eclipse.swt.dnd.TransferData) + */ + @Override + protected void javaToNative(Object object, TransferData transferData) { + final ImageData imgData = (ImageData) object; + final ImageLoader loader = new ImageLoader(); + final ByteArrayOutputStream oStream = new ByteArrayOutputStream(); + final byte[] bytes; + + loader.data = new ImageData[] { imgData }; + loader.save(new RemoveBitmapHeaderOutputStream(oStream), SWT.IMAGE_BMP); + bytes = oStream.toByteArray(); + super.javaToNative(bytes, transferData); + } +}