/* * This file is modified by Ivan Maidanski <ivmai@ivmaisoft.com> * Project name: JCGO-SUNAWT (http://www.ivmaisoft.com/jcgo/) */ /* * @(#)WEmbeddedFrame.java 1.22 03/01/23 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package sun.awt.windows; import sun.awt.*; import java.awt.*; import java.awt.event.*; import java.awt.peer.ComponentPeer; import java.util.*; import java.awt.color.*; import java.awt.image.*; import sun.awt.image.ByteInterleavedRaster; public class WEmbeddedFrame extends EmbeddedFrame { static { initIDs(); } private long handle; private int bandWidth = 0; private int bandHeight = 0; private BufferedImage bandImage = null; private static final int MAX_BAND_SIZE = (1024*768); public WEmbeddedFrame() { this((long)0); } /** * @deprecated This constructor will be removed in 1.5 */ public WEmbeddedFrame(int handle) { this((long)handle); } public WEmbeddedFrame(long handle) { this.handle = handle; WToolkit toolkit = (WToolkit)Toolkit.getDefaultToolkit(); setPeer(toolkit.createEmbeddedFrame(this)); show(); } /* * Print the embedded frame and its children using the specified HDC. */ void print(int hdc) { int frameHeight = getHeight(); if (bandImage == null) { bandWidth = getWidth(); if (bandWidth % 4 != 0) { bandWidth += (4 - (bandWidth % 4)); } if (bandWidth <= 0) { return; } bandHeight = Math.min(MAX_BAND_SIZE/bandWidth, frameHeight); bandImage = new BufferedImage(bandWidth, bandHeight, BufferedImage.TYPE_3BYTE_BGR); } Graphics clearGraphics = bandImage.getGraphics(); clearGraphics.setColor(Color.white); Graphics g2d = bandImage.getGraphics(); ByteInterleavedRaster ras = (ByteInterleavedRaster)bandImage.getRaster(); byte[] data = ras.getDataStorage(); for (int bandTop = 0; bandTop < frameHeight; bandTop += bandHeight) { clearGraphics.fillRect(0, 0, bandWidth, bandHeight); printComponents(g2d); int currBandHeight = bandHeight; if ((bandTop+bandHeight) > frameHeight) { // last band currBandHeight = frameHeight - bandTop; } printBand((long)hdc, data, 0, bandTop, bandWidth, currBandHeight); g2d.translate(0, -bandHeight); } } public void synthesizeWindowActivation(boolean doActivate) { synthesizeWmActivate(handle, doActivate); } private static native void synthesizeWmActivate(long handle, boolean doActivate); protected native void printBand(long hdc, byte[] data, int x, int y, int width, int height); /** * Initialize JNI field IDs */ private static native void initIDs(); }