From 62dba68578a2aab0c4b50bf8d22a70a5d396b1e3 Mon Sep 17 00:00:00 2001 From: Nikolay Pultsin Date: Fri, 16 Nov 2007 20:36:43 +0000 Subject: [PATCH] better implementation for ZLColor class git-svn-id: https://only.mawhrin.net/repos/FBReaderJ/trunk@153 6a642e6f-84f6-412e-ac94-c4a38d5a04b0 --- src/org/zlibrary/options/ZLColorOption.java | 62 +++++----- src/org/zlibrary/options/util/ZLColor.java | 128 +++++--------------- 2 files changed, 60 insertions(+), 130 deletions(-) diff --git a/src/org/zlibrary/options/ZLColorOption.java b/src/org/zlibrary/options/ZLColorOption.java index 33689db56..c7e8c9f6c 100644 --- a/src/org/zlibrary/options/ZLColorOption.java +++ b/src/org/zlibrary/options/ZLColorOption.java @@ -11,39 +11,37 @@ import org.zlibrary.options.util.*; * */ public final class ZLColorOption extends ZLOption { - private long myIntValue; private long myDefaultValue; - public ZLColorOption (String category, String group, String optionName, ZLColor defaultValue){ - super(category, group, optionName); - myDefaultValue = defaultValue.getIntValue(); - myIntValue = myDefaultValue; - } - - public long getValue(){ - if (!myIsSynchronized){ - String strDefaultValue = ZLToStringConverter.convert(myDefaultValue); - String value = myConfig.getValue(myCategory, myGroup, - myOptionName, strDefaultValue); - myIntValue = ZLFromStringConverter.getIntegerValue(value); - myIsSynchronized = true; - } - return myIntValue; - } - - public void setValue(ZLColor colorValue){ - long value = colorValue.getIntValue(); - if (myIsSynchronized && (myIntValue == value)) { - return; - } - myIntValue = value; - myIsSynchronized = true; - if (myIntValue == myDefaultValue) { - myConfig.unsetValue(myCategory, myGroup, myOptionName); - } else { - String stringValue = ZLToStringConverter.convert(myIntValue); - myConfig.setValue(myCategory, myGroup, myOptionName, stringValue); - } - } + public ZLColorOption (String category, String group, String optionName, ZLColor defaultValue){ + super(category, group, optionName); + myDefaultValue = defaultValue.getIntValue(); + myIntValue = myDefaultValue; + } + + public long getValue(){ + if (!myIsSynchronized){ + String strDefaultValue = ZLToStringConverter.convert(myDefaultValue); + String value = myConfig.getValue(myCategory, myGroup, myOptionName, strDefaultValue); + myIntValue = ZLFromStringConverter.getIntegerValue(value); + myIsSynchronized = true; + } + return myIntValue; + } + + public void setValue(ZLColor colorValue){ + long value = colorValue.getIntValue(); + if (myIsSynchronized && (myIntValue == value)) { + return; + } + myIntValue = value; + myIsSynchronized = true; + if (myIntValue == myDefaultValue) { + myConfig.unsetValue(myCategory, myGroup, myOptionName); + } else { + String stringValue = ZLToStringConverter.convert(myIntValue); + myConfig.setValue(myCategory, myGroup, myOptionName, stringValue); + } + } } diff --git a/src/org/zlibrary/options/util/ZLColor.java b/src/org/zlibrary/options/util/ZLColor.java index 6760ea0e7..f1c683c29 100644 --- a/src/org/zlibrary/options/util/ZLColor.java +++ b/src/org/zlibrary/options/util/ZLColor.java @@ -1,114 +1,46 @@ package org.zlibrary.options.util; -import java.awt.Color; - /** - * сущность "цвет". представление здесь - стандартные RGB компоненты - * @author Администратор - * + * class Color. Color is presented as the triple of short's (Red, Green, Blue components) + * Each component should be in the range 0..255 */ public class ZLColor { + public final short Red; + public final short Green; + public final short Blue; - private int myRed = 0; - private int myGreen = 0; - private int myBlue = 0; - - /** - * и конструктор соответственно для удобства - * @param color - */ - public ZLColor(Color color){ - setColor((int)color.getRed(), (int)color.getGreen(), (int)color.getBlue()); - } + public ZLColor() { + Red = 0; + Green = 0; + Blue = 0; + } - /** - * конструктор по умолчанию делает цвет черным - */ - public ZLColor(){ - } - - /** - * конструктор с параметрами - */ - public ZLColor(int red, int green, int blue){ - setColor(red, green, blue); - } - - public ZLColor(String color){ - String[] components = color.split(","); - setColor(Integer.parseInt(components[0]), Integer.parseInt(components[1]), - Integer.parseInt(components[2])); - } - - /** - * перекрываем метод toString, - * по сути - кодировка в десятичную запись - * результат должен наглядно совпадать с результатом getIntValue - */ - public String toString(){ - return "" + myRed + "," + myGreen + "," + myBlue; + public ZLColor(short r, short g, short b) { + Red = (short)(r & 0xFF); + Green = (short)(g & 0xFF); + Blue = (short)(b & 0xFF); } - /** - * является ли число корректным значением компоненты ргб цвета. - */ - private boolean isCorrectComponent(int value){ - return (value >=0 && value <= 255); + public ZLColor(int intValue) { + Red = (short)((intValue >> 16) & 0xFF); + Green = (short)((intValue >> 8) & 0xFF); + Blue = (short)(intValue & 0xFF); } - /** - * устанавливаем только те компоненты, которые заданы корректно, - * то есть являются неотрицательным числом < 256 - */ - public void setColor (int red, int green, int blue){ - if (isCorrectComponent(red)) { - myRed = red; - } - if (isCorrectComponent(green)) { - myGreen = green; - } - if (isCorrectComponent(blue)) { - myBlue = blue; - } + public int getIntValue() { + return (Red << 16) + (Green << 8) + Blue; } - - /** - * конвертирование в АВТшный цвет. - * @param color - */ - //TODO решить нужно ли это вообще - public void convertFromColor(Color color){ - myRed = (int)color.getRed(); - myGreen = (int)color.getGreen(); - myBlue = (int)color.getBlue(); - } - - public Color convertToColor(){ - return new Color(myRed, myGreen, myBlue); - } - - /** - * @return цвет одним числом, чтобы хранить в памяти меньше =) - */ - public long getIntValue(){ - return myRed*1000000 + myGreen*1000 + myBlue; - } - - /** - * перекрываем метод equals. цвета считаем равными при равенстве всех компонент - */ - public boolean equals (Object o){ - if (o == this) + + public boolean equals(Object o) { + if (o == this) { return true; - - if (! (o.getClass() == this.getClass())) + } + + if (!(o instanceof ZLColor)) { return false; - - ZLColor zlc = (ZLColor) o; - - return ((zlc.myRed == this.myRed) && - (zlc.myGreen == this.myGreen) && - (zlc.myBlue == this.myBlue)); + } + + ZLColor color = (ZLColor)o; + return (color.Red == Red) && (color.Green == Green) && (color.Blue == Blue); } - }