scrollarrowlayer.java
来自「This is a resource based on j2me embedde」· Java 代码 · 共 223 行
JAVA
223 行
/* * * * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). * * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. */package com.sun.midp.chameleon.layers;import com.sun.midp.chameleon.skins.SoftButtonSkin;import com.sun.midp.chameleon.*;import javax.microedition.lcdui.*;import com.sun.midp.chameleon.skins.ScrollIndSkin;import com.sun.midp.lcdui.EventConstants;/** * A ScrollArrowLayer is a region of the display used for showing scroll indicator * status arrows. * */public class ScrollArrowLayer extends ScrollIndLayer { /** * True if up arrow is visible */ protected boolean upViz; /** * True if down arrow is visible */ protected boolean downViz; /** * Construct a new ScrollIndLayer, visible, but transparent :) */ public ScrollArrowLayer(CLayer layer) { this(layer, null); } /** * Additional constructor. * @param layer the scrollable controlling the scrolling layer * @param listener the scrolling listener */ public ScrollArrowLayer(CLayer layer, ScrollListener listener) { super(layer, listener); } /** * Calculate layer bounds depending on the scrollable */ public void setBounds() { if (owner == null) { return; } bounds[H] = SoftButtonSkin.HEIGHT; if (ScrollIndSkin.IMAGE_UP != null) { bounds[W] = ScrollIndSkin.IMAGE_UP.getWidth(); bounds[H] = (2 * ScrollIndSkin.IMAGE_UP.getHeight()); bounds[Y] = (SoftButtonSkin.HEIGHT - bounds[H]) / 3; bounds[H] += bounds[Y]; bounds[Y] = owner.bounds[H] - SoftButtonSkin.HEIGHT + bounds[Y]; } else { bounds[W] = ScrollIndSkin.WIDTH; bounds[Y] = 3; } bounds[X] = (owner.bounds[W] - bounds[W]) / 2; } /** * Set the current vertical scroll position and proportion. * * @param scrollPosition vertical scroll position. * @param scrollProportion vertical scroll proportion. */ public void setVerticalScroll(int scrollPosition, int scrollProportion) { boolean up = upViz; boolean dn = downViz; if ( (scrollable != null) && (scrollProportion < 100)) { upViz = (scrollPosition > 0); downViz = (scrollPosition < 100); } else { upViz = downViz = false; } setVisible(upViz || downViz); if (up != upViz || dn != downViz) { requestRepaint(); } } /** * Paint the scroll indicator. The indicator arrows may be appear * individually * or together, and may vary in appearance based on whether they appear * in the normalsoft button region or an alert's softbutton region. * The visible state is based on the state of the <code>alertMode</code>, * <code>upViz</code>, and <code>downViz</code> variables set by the * <code>setVerticalScroll</code> method. * @param g the graphics context to paint in */ protected void paintBody(Graphics g) { if (upViz) { Image i = ScrollIndSkin.IMAGE_UP; if (alertMode && ScrollIndSkin.IMAGE_AU_UP != null) { i = ScrollIndSkin.IMAGE_AU_UP; } if (i != null) { g.drawImage(i, 0, 0, Graphics.LEFT| Graphics.TOP); } } if (downViz) { Image i = ScrollIndSkin.IMAGE_DN; if (alertMode && ScrollIndSkin.IMAGE_AU_DN != null) { i = ScrollIndSkin.IMAGE_AU_DN; } if (i != null) { g.drawImage(i, 0, bounds[H] - ScrollIndSkin.IMAGE_DN.getHeight(), Graphics.LEFT | Graphics.TOP); } } } /** * Handle input from a pen tap. Parameters describe * the type of pen event and the x,y location in the * layer at which the event occurred. Important : the * x,y location of the pen tap will already be translated * into the coordinate space of the layer. * * @param type the type of pen event * @param x the x coordinate of the event * @param y the y coordinate of the event */ public boolean pointerInput(int type, int x, int y) { switch(type) { case EventConstants.PRESSED: // case EventConstants.HOLD: // no action for tap-and-hold in scrollbar // cancel timer for any press. int scrollType = getScrollType(x, y); if (scrollType == SCROLL_LINEDOWN || scrollType == SCROLL_LINEUP) { listener.scrollContent(scrollType, 0); } break; case EventConstants.RELEASED: // do nothing break; default: break; } /* we should process all of the pointer event inside scroll layer and don't pass it to underlying layer */ return true; } /** * Determine he scroll type basing on the pointer coordinates * @param x - x coordinate * @param y - y coordinate * @return the scroll type * The possible types of scrolling are * @see #SCROLL_NONE * @see #SCROLL_LINEUP * @see #SCROLL_LINEDOWN */ private int getScrollType(int x, int y) { int ret = SCROLL_NONE; if (x >= 0 && x <= bounds[W] && y >= 0 && y <= bounds[H]) { if (upViz && y < bounds[H] / 2) { ret = SCROLL_LINEUP; } else if (downViz && y > bounds[H] / 2) { ret = SCROLL_LINEDOWN; } } return ret; } /** * Set new scrollable * @param layer new scrollable controlling the scrolling layer * @return true if the scrollable is changed, false - otherwise */ public boolean setScrollable(CLayer layer) { boolean ret = super.setScrollable(layer); if (ret) { alertMode |= scrollable instanceof MenuLayer; } upViz = downViz = false; return ret; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?