⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 colordecoder.java

📁 Novocode的 SWT 控件框架 丰富了MDI功能
💻 JAVA
字号:
/*******************************************************************************
 * Copyright (c) 2004 Stefan Zeiger and others.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.novocode.com/legal/epl-v10.html
 * 
 * Contributors:
 *     Stefan Zeiger (szeiger@novocode.com) - initial API and implementation
 *******************************************************************************/

package com.novocode.naf.color;

import java.util.*;

import org.eclipse.swt.SWT;
import org.w3c.dom.*;

import com.novocode.naf.app.NAFException;
import com.novocode.naf.data.DataDecoder;


/**
 * Contains utility methods to decode colors specifications
 * from Strings and DOM Nodes.
 * 
 * @author Stefan Zeiger (szeiger@novocode.com)
 * @since Apr 26, 2004
 */

public class ColorDecoder
{
  private static final Map<String, Integer> fwdSysColors = new HashMap<String, Integer>();
  private static final Map<Integer, String> revSysColors = new HashMap<Integer, String>();
  static
  {
    putSysColor("WHITE",                              SWT.COLOR_WHITE);
    putSysColor("BLACK",                              SWT.COLOR_BLACK);
    putSysColor("RED",                                SWT.COLOR_RED);
    putSysColor("DARK_RED",                           SWT.COLOR_DARK_RED);
    putSysColor("GREEN",                              SWT.COLOR_GREEN);
    putSysColor("DARK_GREEN",                         SWT.COLOR_DARK_GREEN);
    putSysColor("YELLOW",                             SWT.COLOR_YELLOW);
    putSysColor("DARK_YELLOW",                        SWT.COLOR_DARK_YELLOW);
    putSysColor("BLUE",                               SWT.COLOR_BLUE);
    putSysColor("DARK_BLUE",                          SWT.COLOR_DARK_BLUE);
    putSysColor("MAGENTA",                            SWT.COLOR_MAGENTA);
    putSysColor("DARK_MAGENTA",                       SWT.COLOR_DARK_MAGENTA);
    putSysColor("CYAN",                               SWT.COLOR_CYAN);
    putSysColor("DARK_CYAN",                          SWT.COLOR_DARK_CYAN);
    putSysColor("GRAY",                               SWT.COLOR_GRAY);
    putSysColor("DARK_GRAY",                          SWT.COLOR_DARK_GRAY);
    putSysColor("WIDGET_DARK_SHADOW",                 SWT.COLOR_WIDGET_DARK_SHADOW);
    putSysColor("WIDGET_NORMAL_SHADOW",               SWT.COLOR_WIDGET_NORMAL_SHADOW);
    putSysColor("WIDGET_LIGHT_SHADOW",                SWT.COLOR_WIDGET_LIGHT_SHADOW);
    putSysColor("WIDGET_HIGHLIGHT_SHADOW",            SWT.COLOR_WIDGET_HIGHLIGHT_SHADOW);
    putSysColor("WIDGET_BACKGROUND",                  SWT.COLOR_WIDGET_BACKGROUND);
    putSysColor("WIDGET_BORDER",                      SWT.COLOR_WIDGET_BORDER);
    putSysColor("WIDGET_FOREGROUND",                  SWT.COLOR_WIDGET_FOREGROUND);
    putSysColor("LIST_FOREGROUND",                    SWT.COLOR_LIST_FOREGROUND);
    putSysColor("LIST_BACKGROUND",                    SWT.COLOR_LIST_BACKGROUND);
    putSysColor("LIST_SELECTION",                     SWT.COLOR_LIST_SELECTION);
    putSysColor("LIST_SELECTION_TEXT",                SWT.COLOR_LIST_SELECTION_TEXT);
    putSysColor("INFO_FOREGROUND",                    SWT.COLOR_INFO_FOREGROUND);
    putSysColor("INFO_BACKGROUND",                    SWT.COLOR_INFO_BACKGROUND);
    putSysColor("TITLE_FOREGROUND",                   SWT.COLOR_TITLE_FOREGROUND);
    putSysColor("TITLE_BACKGROUND",                   SWT.COLOR_TITLE_BACKGROUND);
    putSysColor("TITLE_BACKGROUND_GRADIENT",          SWT.COLOR_TITLE_BACKGROUND_GRADIENT);
    putSysColor("TITLE_INACTIVE_FOREGROUND",          SWT.COLOR_TITLE_INACTIVE_FOREGROUND);
    putSysColor("TITLE_INACTIVE_BACKGROUND",          SWT.COLOR_TITLE_INACTIVE_BACKGROUND);
    putSysColor("TITLE_INACTIVE_BACKGROUND_GRADIENT", SWT.COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT);
  }


  private ColorDecoder() {}

  
  private static void putSysColor(String s, int i)
  {
    Integer ii = new Integer(i);
    s = s.toLowerCase().replace('_', '-');
    fwdSysColors.put(s, ii);
    revSysColors.put(ii, s);
  }
  
  
  public static Integer sysColorFor(String s)
  {
    return fwdSysColors.get(s.toLowerCase().replace(' ', '-').replace('_', '-'));
  }
  
  
  public static String sysColorStringFor(int i)
  {
    return revSysColors.get(new Integer(i));
  }
  
  
  public static ColorData[] decodeColorArray(Attr attr) throws NAFException
  {
    if(attr == null) return null;
    return decodeColorArray(attr.getValue());
  }


  public static ColorData[] decodeColorArray(String s) throws NAFException
  {
    String[] names = DataDecoder.decodeStringArray(s, ",", true, false);
    if(names.length == 1 && names[0].length() == 0) return null;
    ColorData[] cd = new ColorData[names.length];
    for(int i=0; i<names.length; i++) cd[i] = decodeColor(names[i]);
    return cd;
  }


  public static ColorData decodeColor(Node n) throws NAFException
  {
    if(n == null) return ColorData.INHERIT;
    String s = n.getNodeValue();
    return decodeColor(s);
  }


  public static ColorData decodeColor(String s) throws NAFException
  {
    if(s == null || s.length() == 0 || s.equals("default")) return ColorData.DEFAULT;
    s = s.trim();

    String[] values = DataDecoder.decodeStringArray(s, ":", true, true);
    s = values[0];
    ColorData cd;

    if(s.equals("inherit")) cd = ColorData.INHERIT;
    else if(s.startsWith("#"))
    {
      if(s.length() != 7) throw new NAFException("Illegal color code "+s+": '#' must be followed by 6 hex digits");
      String rs = s.substring(1,3);
      String gs = s.substring(3,5);
      String bs = s.substring(5);
      try
      {
        int ri = Integer.parseInt(rs, 16);
        int gi = Integer.parseInt(gs, 16);
        int bi = Integer.parseInt(bs, 16);
        cd = new ColorData(ri, gi, bi);
      }
      catch(NumberFormatException ex)
      {
        throw new NAFException("Illegal color code "+s+": '#' must be followed by 6 hex digits");
      }
    }
    else
    {
      Integer id = sysColorFor(s);
      if(id == null) throw new NAFException("Unknown system color name "+s);
      else cd = new ColorData(id.intValue());
    }

    if(values.length > 1)
    {
      IColorDecorator[] decorators = new IColorDecorator[values.length-1];
      for(int i=0; i<decorators.length; i++)
      {
        String dn = values[i+1];
        IColorDecorator deco;
        if(dn.equals("lighter")) deco = LightenColorDecorator.DECO_LIGHTEN_10_PERCENT;
        else if(dn.equals("darker")) deco = DarkenColorDecorator.DECO_DARKEN_10_PERCENT;
        else if(dn.equals("invert")) deco = InvertColorDecorator.DECO_INVERT;
        else if(dn.equals("warmer")) deco = RGBMatrixColorDecorator.DECO_WARMER;
        else if(dn.equals("cooler")) deco = RGBMatrixColorDecorator.DECO_COOLER;
        else throw new NAFException("Illegal color decorator \""+dn+"\"");
        decorators[i] = deco;
      }
      cd.setDecorators(decorators);
    }
    
    return cd;
  }
}

⌨️ 快捷键说明

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