color.java

来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 198 行

JAVA
198
字号
/* class Color
 *
 * Copyright (C) 2001  R M Pitman
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package charva.awt;

/**
 * A class used to represent the color values available on a text terminal.
 */
public class Color
{
    /**
     * Construct a Color from the specified RGB values. Each value must
     * be in the range 0-255.
     */
    public Color(int red_, int green_, int blue_) {
	_red = (red_ != 0) ? 255 : 0;
	_green = (green_ != 0) ? 255 : 0;
	_blue = (blue_ != 0) ? 255 : 0;
    }

    public boolean equals(Object obj_) {
	if (obj_ == null)
	    return false;

	if ( ! (obj_ instanceof Color))
	    return false;

	Color othercolor = (Color) obj_;
	if (_red != othercolor._red)
	    return false;
	if (_green != othercolor._green)
	    return false;
	if (_blue != othercolor._blue)
	    return false;

	return true;
    }

    /** Convert the Color object to an integer value compatible with
     * the ncurses library.
     */
    public int getCursesColor()
    {
	if (_red != 0) {
	    if (_green != 0) {
		if (_blue != 0)
		    return Toolkit.WHITE;
		else
		    return Toolkit.YELLOW;
	    }
	    else {
		if (_blue != 0)
		    return Toolkit.MAGENTA;
		else
		    return Toolkit.RED;
	    }
	}
	else {
	    if (_green != 0) {
		if (_blue != 0)
		    return Toolkit.CYAN;
		else
		    return Toolkit.GREEN;
	    }
	    else {
		if (_blue != 0)
		    return Toolkit.BLUE;
		else
		    return Toolkit.BLACK;
	    }
	}
    }

    public String toString()
    {
	if (_red != 0) {
	    if (_green != 0) {
		if (_blue != 0)
		    return "white";
		else
		    return "cyan";
	    }
	    else {
		if (_blue != 0)
		    return "magenta";
		else
		    return "red";
	    }
	}
	else {
	    if (_green != 0) {
		if (_blue != 0)
		    return "white";
		else
		    return "green";
	    }
	    else {
		if (_blue != 0)
		    return "blue";
		else
		    return "black";
	    }
	}
    }

    /** Compute the ncurses color-pair number corresponding to the specified
     * foreground and background color.
     */
    public static int getCursesColor(Color foreground_, Color background_)
    {
	if ( ! Toolkit.isColorEnabled)
	    return 0;

	/* The default colors (in case an exception occurs) are white 
	 * on black.
	 */
	int curses_color_pair = 0;
	try {
	    Toolkit toolkit = Toolkit.getDefaultToolkit();
	    
	    // if the terminal is capable of colors
	    if (toolkit.hasColors()) {
		ColorPair color_pair = new ColorPair(foreground_, background_);
		curses_color_pair = toolkit.getColorPairIndex(color_pair);
	    }
	}
	catch (TerminfoCapabilityException e) {
	    System.err.println( "can't set color pair: foreground " + 
		foreground_ + " background " + background_);
	}
	return curses_color_pair;
    }


    /** Convert an ncurses color value to a color name.
     */
    public static String getColorName(int colorval_) {
	if (colorval_ == Toolkit.BLACK)		return "black";
	else if (colorval_ == Toolkit.RED)	return "red";
	else if (colorval_ == Toolkit.GREEN)	return "green";
	else if (colorval_ == Toolkit.YELLOW)   return "yellow";
	else if (colorval_ == Toolkit.BLUE)	return "blue";
	else if (colorval_ == Toolkit.MAGENTA)  return "magenta";
	else if (colorval_ == Toolkit.CYAN)	return "cyan";
	else if (colorval_ == Toolkit.WHITE)	return "white";
	    else
	return "UNKNOWN";
    }

    /** Convert from an integer (ncurses-compatible) value to
     * a Color object.
     */
    public static Color fromCursesColor(int colorval_) {
	if (colorval_ == Toolkit.BLACK)		return black;
	else if (colorval_ == Toolkit.RED)	return red;
	else if (colorval_ == Toolkit.GREEN)	return green;
	else if (colorval_ == Toolkit.YELLOW)   return yellow;
	else if (colorval_ == Toolkit.BLUE)	return blue;
	else if (colorval_ == Toolkit.MAGENTA)  return magenta;
	else if (colorval_ == Toolkit.CYAN)	return cyan;
	else if (colorval_ == Toolkit.WHITE)	return white;
	    else
	return null;
    }

    //====================================================================
    // INSTANCE VARIABLES
    private int _red;
    private int _green;
    private int _blue;

    public static final Color black = new Color(0, 0, 0);
    public static final Color red = new Color(255, 0, 0);
    public static final Color green = new Color(0, 255, 0);
    public static final Color yellow = new Color(255, 255, 0);
    public static final Color blue = new Color(0, 0, 255);
    public static final Color magenta = new Color(255, 0, 255);
    public static final Color cyan = new Color(0, 255, 255);
    public static final Color white = new Color(255, 255, 255);

}

⌨️ 快捷键说明

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