/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @author Mikhail Danilov * @version $Revision$ */ package org.apache.harmony.awt.wtk; import java.awt.Image; import java.awt.Insets; import java.awt.Point; import java.awt.Rectangle; import org.apache.harmony.awt.gl.MultiRectArea; /** * Provides cross-platform way to manipulate native window. * * Results of methods are reported through native messages. */ public interface NativeWindow { /** * Returns system id of the associated window * @return HWND on Windows, xwindow on X */ long getId(); /** * Shows/hides window * @param v - new visibility */ void setVisible(boolean v); /** * Means only size should be changed */ static final int BOUNDS_NOMOVE = 1; /** * Means only position should be changed */ static final int BOUNDS_NOSIZE = 2; /** * Tries to set desired window bounds. It's not gurantied the * property will have the desired value. The value change * should be reported by system event (as for other properties). * * <p/> If child, position is relative to parent window. * @param x - desired x * @param y - desired y * @param w - desired width * @param h - desired height * @param boundsMask - bitwise OR of BOUNDS_* constants. * Governs the new bounds interpretation. */ void setBounds(int x, int y, int w, int h, int boundsMask); /** * Returns last notified window bounds. This means the last bounds * reported by system event. * * <p/> If child, position is relative to parent window. * @return last notified window bounds */ Rectangle getBounds(); /** * Returns last notified insets. This means the last insets * reported by system event. Insets are margins around client area * ocupied by system provided decor, ususally border and titlebar. * @return last notified insets */ Insets getInsets(); /** * Enables/disables processing of input (key, mouse) event * by window. If disabled input events are ignored. * @param value - if enabled */ void setEnabled(boolean value); /** * Sets the "focusable" window state. * @param value - if true makes window focusable */ void setFocusable(boolean value); /** * * @return current focusable window state */ boolean isFocusable(); /** * Tries to set application input focus to the window or clear * current focus from focused window. * * <p/> For toplevel windows it's not gurantied focus will land in * desired window even if function returns true. Focus traversal should be tracked * by processing system events. * * @param focus - if true sets focus, else clears focus * @return if success */ boolean setFocus(boolean focus); /** * Destroys the asscoiated window. * Attempts to use it thereafter can result in * unpredictable bechavior. */ void dispose(); /** * Changes window Z-order to place this window under, If w is null * places places this window on the top. Z-order is per parent. * Toplevels a children of desktop in terms of Z-order. * @param w - window to place under. */ void placeAfter(NativeWindow w); /** * Places window on top of Z-order */ void toFront(); /** * Places window on bottom of Z-order */ void toBack(); /** * Makes the window resizable/not resizable by user * @param value - if resizable */ void setResizable(boolean value); /** * Sets the window caption * @param title - caption text */ void setTitle(String title); /** * Activate the mouse event capturing */ void grabMouse(); /** * Deactivate mouse event capturing */ void ungrabMouse(); /** * Set extended state for top-level window. * * @param state - new state, bitmask of ICONIFIED, MAXIMIZED_BOTH, etc. */ void setState(int state); /** * Set the image to be displayed in the minimized icon for * top-level [decorated] window. * @param image the icon image to be displayed */ void setIconImage(Image image); /** * Makes window top-most if value is true, * non-topmost(normal) otherwise. */ void setAlwaysOnTop(boolean value); /** * Set desired [top-level] window bounds when being in maximized state. * Fields set to Integer.MAX_VALUE are ignored[system-supplied values are * used instead] */ void setMaximizedBounds(Rectangle bounds); /** * Get absolute position on the screen */ Point getScreenPos(); /** * Set a window "packed" flag: * the flag indicates that if insets change * client area shouldn't be resized, but frame * must be resized instead */ void setPacked(boolean packed); /** * Make window an "input method window" by setting * special window style, e. g. small title bar, no * close, minimize/maximize buttons. For internal * use by input method framework. * */ void setIMStyle(); MultiRectArea getObscuredRegion(Rectangle part); }