textinfo.java

来自「This is a resource based on j2me embedde」· Java 代码 · 共 216 行

JAVA
216
字号
/* *    * * 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.lcdui;/** * Class that represents the line-wrapping and scroll position of  * text in a TextBox (editable) or Label, StringItem, or ListItem(uneditable) * * From this structure, <code>Text.paintText()</code> should be able to  * quickly render wrapped text  */public class TextInfo {    /** total number of lines */    public int numLines;        /** number of visible lines */    public int visLines;          /** first visible line */    public int topVis;        /** the line where the cursor resides */    public int cursorLine;        /** set to true to indicate this has been modified */    public boolean isModified;    /** set to true if this has been scrolled in the Y direction */    public boolean scrollY;    /** set to true if this has been scrolled in the X direction */    public boolean scrollX;    /** starting offset of each line */    public int[] lineStart;    /** offset of last character of each line */    public int[] lineEnd;    /** the height of the block of text described by this object */    public int height;    /** scroll up */    public final static int BACK = 1;    /** scroll down */    public final static int FORWARD = 2;    /**     * Construct a new TextInfo object with <code>size</code>      * lines initially     *      * @param size maximum number of lines this TextInfo     *        struct can store without expanding      */    public TextInfo(int size) {	isModified = true;	scrollY = true;	scrollX = true;	lineStart = new int[size];	lineEnd = new int[size];    }    /**     * Expand the capacity of this TextInfo structure by doubling the     * length of the lineStart and lineEnd arrays     */    public void expand() {	int[] tmpStart = new int [lineStart.length * 2];	int[] tmpEnd = new int [tmpStart.length];	System.arraycopy(lineStart, 0, tmpStart, 0, 			 lineStart.length);	System.arraycopy(lineEnd, 0, tmpEnd, 0, 			 lineEnd.length);		lineStart = tmpStart;	lineEnd = tmpEnd;    }    /**     * Scroll Up or down by one line if possible     *     * @param dir direction of scroll, FORWARD or BACK     * @return true if scrolling happened, false if not     */    public boolean scroll(int dir) {        return scroll(dir, 1);    }        /**     * Scroll Up or down by one line if possible     *     * @param dir direction of scroll, FORWARD or BACK     * @param length how many lines to scroll         * @return true if scrolling happened, false if not     */    public boolean scroll(int dir, int length) {	boolean rv = false;		if (visLines < numLines) {	    switch (dir) {	    case FORWARD:                if (topVis + visLines < numLines) {                    topVis += length;                    if (topVis + visLines > numLines) {                        topVis = numLines - visLines;                    }                    rv = true;                }		break;	    case BACK:		if (topVis > 0) {		    topVis -= length;                    if (topVis < 0) {                        topVis = 0;                    }		    rv = true;		}		break;	    default:		// no-op	    }	}        scrollY |= rv;	return rv;    }        /**     * Scroll Up or down by page if possible     *     * @param dir direction of scroll, FORWARD or BACK     * @return number of scrolled lines     */    public int scrollByPage(int dir) {	int oldTopVis = topVis;            	if (visLines < numLines) {	    switch (dir) {	    case FORWARD:		if ((topVis + visLines) < numLines) {                    topVis = numLines - (topVis + visLines - 1) < visLines ?                        numLines - visLines : topVis + visLines - 1;		}		break;	    case BACK:		if (topVis > 0) {                    topVis = (topVis - visLines + 1) < 0 ?                        0 : topVis - visLines + 1;		}		break;	    default:		// no-op	    }	}        scrollY |= (topVis != oldTopVis);	return topVis - oldTopVis;    }    /**     * Returns scroll position from 0-100     * @return scroll position mapped to the range 0-100     */    public int getScrollPosition() {        // used to set scroll indicator visibility        if (numLines == 0 || numLines <= visLines) {            return 0;        } else {            return (topVis * 100) / (numLines - visLines);        }    }    /**     * Returns scroll proportion from 0-100     * @return scroll proportion, as a percentage of the screen that     *         is viewable.     */    public int getScrollProportion() {        // used to set scroll indicator visibility        if (visLines >= numLines || numLines == 0) {            return 100;        } else {            return (visLines * 100) / numLines;        }    }}    

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?