Package com.scriptographer.script

Source Code of com.scriptographer.script.ColorConverter

/*
* Scriptographer
*
* This file is part of Scriptographer, a Scripting Plugin for Adobe Illustrator
* http://scriptographer.org/
*
* Copyright (c) 2002-2010, Juerg Lehni
* http://scratchdisk.com/
*
* All rights reserved. See LICENSE file for details.
*
* File created on Feb 12, 2008.
*/

package com.scriptographer.script;

import java.lang.reflect.Field;

import com.scratchdisk.script.ArgumentConverter;
import com.scratchdisk.script.ArgumentReader;
import com.scriptographer.ai.CMYKColor;
import com.scriptographer.ai.Color;
import com.scriptographer.ai.GrayColor;
import com.scriptographer.ai.RGBColor;

/**
* @author lehni
*
*/
public class ColorConverter extends ArgumentConverter<Color> {

  public Color convert(ArgumentReader reader, Object from) {
    // TODO: gradient & pattern color
    // Since StringArgumentReaders also return true for isArray (they
    // can behave like arrays as well), always check for isString first!
    if (reader.isString()) {
      String name = reader.readString();
      if ("".equals(name))
        return Color.NONE;
      try {
        // Try hex string first
        String str = name.startsWith("#") ? name : "#" + name;
        return new RGBColor(java.awt.Color.decode(str));
      } catch (Exception e1) {
        try {
          // If that does not work, try accessing the static Color.NAME field
          Field field = java.awt.Color.class.getField(name.toUpperCase());
          return new RGBColor((java.awt.Color) field.get(java.awt.Color.class));
        } catch (Exception e2) {
        }
      }
    } else if (reader.isArray()) {
      int size = reader.size();
      if (size == 4) {
        // CMYK
        return new CMYKColor(
            reader.readFloat(0),
            reader.readFloat(0),
            reader.readFloat(0),
            reader.readFloat(0)
        );
      } else  if (size == 3) {
        // RGB
        return new RGBColor(
            reader.readFloat(0),
            reader.readFloat(0),
            reader.readFloat(0)
        );
      } else  if (size == 1) {
        // Gray
        return new GrayColor(
            reader.readFloat(0)
        );
      }
    } else if (reader.isMap()) {
      if (reader.has("red")) {
        return new RGBColor(
            reader.readFloat("red", 0),
            reader.readFloat("green", 0),
            reader.readFloat("blue", 0),
            reader.readFloat("alpha", 1)
        );
      } else if (reader.has("cyan")) {
        return new CMYKColor(
            reader.readFloat("cyan", 0),
            reader.readFloat("magenta", 0),
            reader.readFloat("yellow", 0),
            reader.readFloat("black", 0),
            reader.readFloat("alpha", 1)
        );
      } else if (reader.has("gray")) {
        return new GrayColor(
            reader.readFloat("gray", 0),
            reader.readFloat("alpha", 1)
        );
      }
    }
    return null;
  }
}
TOP

Related Classes of com.scriptographer.script.ColorConverter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.