0N/A/*
2362N/A * Copyright (c) 2002, 2006, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
2362N/A * published by the Free Software Foundation. Oracle designates this
0N/A * particular file as subject to the "Classpath" exception as provided
2362N/A * by Oracle in the LICENSE file that accompanied this code.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A * or visit www.oracle.com if you need additional information or have any
2362N/A * questions.
0N/A */
0N/A
0N/Apackage sun.awt.X11;
0N/A
0N/Aimport java.awt.*;
0N/Aimport java.awt.event.*;
0N/Aimport java.awt.peer.*;
1696N/Aimport sun.util.logging.PlatformLogger;
0N/A
0N/Aclass XScrollbarPeer extends XComponentPeer implements ScrollbarPeer, XScrollbarClient {
1696N/A private final static PlatformLogger log = PlatformLogger.getLogger("sun.awt.X11.XScrollbarPeer");
0N/A
0N/A private static final int DEFAULT_LENGTH = 50;
0N/A private static final int DEFAULT_WIDTH_SOLARIS = 19;
0N/A private static final int DEFAULT_WIDTH_LINUX;
0N/A
0N/A XScrollbar tsb;
0N/A
0N/A static {
0N/A DEFAULT_WIDTH_LINUX = XToolkit.getUIDefaults().getInt("ScrollBar.defaultWidth");
0N/A }
0N/A
0N/A public void preInit(XCreateWindowParams params) {
0N/A super.preInit(params);
0N/A Scrollbar target = (Scrollbar) this.target;
0N/A if (target.getOrientation() == Scrollbar.VERTICAL) {
0N/A tsb = new XVerticalScrollbar(this);
0N/A } else {
0N/A tsb = new XHorizontalScrollbar(this);
0N/A }
0N/A int min = target.getMinimum();
0N/A int max = target.getMaximum();
0N/A int vis = target.getVisibleAmount();
0N/A int val = target.getValue();
0N/A int line = target.getLineIncrement();
0N/A int page = target.getPageIncrement();
0N/A tsb.setValues(val, vis, min, max, line, page);
0N/A }
0N/A
0N/A /**
0N/A * Create a scrollbar.
0N/A */
0N/A XScrollbarPeer(Scrollbar target) {
0N/A super(target);
0N/A this.target = target;
0N/A xSetVisible(true);
0N/A }
0N/A
0N/A /**
0N/A * Returns default size of scrollbar on the platform
0N/A * Currently uses hardcoded values
0N/A */
0N/A private int getDefaultDimension() {
0N/A if (System.getProperty("os.name").equals("Linux")) {
0N/A return DEFAULT_WIDTH_LINUX;
0N/A } else {
0N/A return DEFAULT_WIDTH_SOLARIS;
0N/A }
0N/A }
0N/A
0N/A /**
0N/A * Compute the minimum size for the scrollbar.
0N/A */
0N/A public Dimension getMinimumSize() {
0N/A Scrollbar sb = (Scrollbar)target;
0N/A return (sb.getOrientation() == Scrollbar.VERTICAL)
0N/A ? new Dimension(getDefaultDimension(), DEFAULT_LENGTH)
0N/A : new Dimension(DEFAULT_LENGTH, getDefaultDimension());
0N/A }
0N/A
0N/A public void repaint() {
0N/A Graphics g = getGraphics();
0N/A if (g != null) paint(g);
0N/A }
0N/A
0N/A /**
0N/A * Paint the scrollbar.
0N/A */
0N/A public void paint(Graphics g) {
0N/A Scrollbar sb = (Scrollbar)target;
0N/A Color colors[] = getGUIcolors();
0N/A g.setColor(colors[BACKGROUND_COLOR]);
0N/A tsb.paint(g, colors, true);
0N/A // paint the whole scrollbar
0N/A }
0N/A
0N/A public void repaintScrollbarRequest(XScrollbar sb) {
0N/A repaint();
0N/A }
0N/A
0N/A /**
0N/A * The value has changed.
0N/A */
0N/A public void notifyValue(XScrollbar obj, int type, int value, boolean isAdjusting) {
0N/A Scrollbar sb = (Scrollbar)target;
0N/A sb.setValue(value);
0N/A postEvent( new AdjustmentEvent(sb, AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED, type, value, isAdjusting));
0N/A }
0N/A
0N/A /**
0N/A *
0N/A * @see java.awt.event.MouseEvent
0N/A * MouseEvent.MOUSE_CLICKED
0N/A * MouseEvent.MOUSE_PRESSED
0N/A * MouseEvent.MOUSE_RELEASED
0N/A * MouseEvent.MOUSE_MOVED
0N/A * MouseEvent.MOUSE_ENTERED
0N/A * MouseEvent.MOUSE_EXITED
0N/A * MouseEvent.MOUSE_DRAGGED
0N/A */
0N/A public void handleJavaMouseEvent( MouseEvent mouseEvent ) {
0N/A super.handleJavaMouseEvent(mouseEvent);
0N/A
0N/A int x = mouseEvent.getX();
0N/A int y = mouseEvent.getY();
0N/A int modifiers = mouseEvent.getModifiers();
0N/A int id = mouseEvent.getID();
0N/A
0N/A
0N/A if ((mouseEvent.getModifiers() & InputEvent.BUTTON1_MASK) == 0) {
0N/A return;
0N/A }
0N/A
0N/A switch (mouseEvent.getID()) {
0N/A case MouseEvent.MOUSE_PRESSED:
0N/A target.requestFocus();
0N/A tsb.handleMouseEvent(id, modifiers,x,y);
0N/A break;
0N/A
0N/A case MouseEvent.MOUSE_RELEASED:
0N/A tsb.handleMouseEvent(id, modifiers,x,y);
0N/A break;
0N/A
0N/A case MouseEvent.MOUSE_DRAGGED:
0N/A tsb.handleMouseEvent(id, modifiers,x,y);
0N/A break;
0N/A }
0N/A }
0N/A
0N/A public void handleJavaKeyEvent(KeyEvent event) {
0N/A super.handleJavaKeyEvent(event);
1696N/A if (log.isLoggable(PlatformLogger.FINEST)) log.finer("KeyEvent on scrollbar: " + event);
0N/A if (!(event.isConsumed()) && event.getID() == KeyEvent.KEY_RELEASED) {
0N/A switch(event.getKeyCode()) {
0N/A case KeyEvent.VK_UP:
0N/A log.finer("Scrolling up");
0N/A tsb.notifyValue(tsb.getValue() - tsb.getUnitIncrement());
0N/A break;
0N/A case KeyEvent.VK_DOWN:
0N/A log.finer("Scrolling down");
0N/A tsb.notifyValue(tsb.getValue() + tsb.getUnitIncrement());
0N/A break;
0N/A case KeyEvent.VK_LEFT:
0N/A log.finer("Scrolling up");
0N/A tsb.notifyValue(tsb.getValue() - tsb.getUnitIncrement());
0N/A break;
0N/A case KeyEvent.VK_RIGHT:
0N/A log.finer("Scrolling down");
0N/A tsb.notifyValue(tsb.getValue() + tsb.getUnitIncrement());
0N/A break;
0N/A case KeyEvent.VK_PAGE_UP:
0N/A log.finer("Scrolling page up");
0N/A tsb.notifyValue(tsb.getValue() - tsb.getBlockIncrement());
0N/A break;
0N/A case KeyEvent.VK_PAGE_DOWN:
0N/A log.finer("Scrolling page down");
0N/A tsb.notifyValue(tsb.getValue() + tsb.getBlockIncrement());
0N/A break;
0N/A case KeyEvent.VK_HOME:
0N/A log.finer("Scrolling to home");
0N/A tsb.notifyValue(0);
0N/A break;
0N/A case KeyEvent.VK_END:
0N/A log.finer("Scrolling to end");
0N/A tsb.notifyValue(tsb.getMaximum());
0N/A break;
0N/A }
0N/A }
0N/A }
0N/A
0N/A public void setValue(int value) {
0N/A tsb.setValue(value);
0N/A repaint();
0N/A }
0N/A
0N/A public void setValues(int value, int visible, int minimum, int maximum) {
0N/A
0N/A tsb.setValues(value, visible, minimum, maximum);
0N/A repaint();
0N/A }
0N/A
0N/A public void setLineIncrement(int l) {
0N/A tsb.setUnitIncrement(l);
0N/A }
0N/A
0N/A public void setPageIncrement(int p) {
0N/A tsb.setBlockIncrement(p);
0N/A }
0N/A
0N/A public void layout() {
0N/A super.layout();
0N/A tsb.setSize(width, height);
0N/A }
0N/A}