Package com.mystictri.neotextureedit

Source Code of com.mystictri.neotextureedit.GradientEditorPanel$ColorMarker

/**
    Copyright (C) 2010  Holger Dammertz

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    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 for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

package com.mystictri.neotextureedit;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;

import engine.base.FMath;
import engine.base.Logger;
import engine.base.Utils;
import engine.base.Vector4;
import engine.parameters.ColorGradient;
import engine.parameters.ColorGradientParam;

public class GradientEditorPanel extends JPanel implements MouseMotionListener, MouseListener, ActionListener {
  private static final long serialVersionUID = 5037538191801103584L;
  ColorGradient m_ActiveGradient;

  public static ColorChooserDialog colorChooser;

  BufferedImage gradientImage;
 
  static final ColorGradient ms_CopiedColorGradient = new ColorGradient();

  int dragDX = 0;
  int dragDY = 0;
  Point mousePosition;
  ColorMarker dragMarker = null;
  boolean alphaDrag = false;
  boolean allDrag = false;
  boolean actuallyDragged = false; // used to avoid notifying the channel of
  // changes when non happened
  float alphaDragStartValue = 0.0f;
  int dragStopUpX = -1;
  int dragStopDownX = -1;

  JPopupMenu m_PopUp;

  static final int gradientImagePosX = 16;
  static final int gradientImagePosY = 32;

  ColorGradientParam m_ColorGradientParam;

  static class GradientPreset {
    ColorGradient gradient;
    BufferedImage img;
    ImageIcon preview;
    int previewX = 128;
    int previewY = 16;

    public GradientPreset(ColorGradient g) {
      gradient = g;
      img = createGradientImage(previewX, previewY, g, null);
      preview = new ImageIcon(img);
    }

    public void updateGradient(ColorGradient g) {
      gradient.setFrom(g);
      preview.setImage(createGradientImage(previewX, previewY, gradient, img));
    }
  }

  static Vector<GradientPreset> ms_Presets = new Vector<GradientPreset>();

  static BufferedImage createGradientImage(int xres, int yres, ColorGradient grad, BufferedImage img) {
    if (img == null)
      img = new BufferedImage(xres, yres, BufferedImage.TYPE_INT_RGB);
    for (int y = 0; y < img.getHeight(); y++) {
      for (int x = 0; x < img.getWidth(); x++) {
        float pos = (float) x / (float) img.getWidth();
        Vector4 col = grad.getColor(pos);
        float bg = ((((x + y) / 8) % 2) != 0) ? 1.0f : 0.75f;
        col.x = col.x * col.w + bg * (1.0f - col.w);
        col.y = col.y * col.w + bg * (1.0f - col.w);
        col.z = col.z * col.w + bg * (1.0f - col.w);
        img.setRGB(x, y, Utils.floatRGBToINTColor(col.x, col.y, col.z));
      }
    }
    return img;
  }

  static {
    Logger.log(null, "Creating Gradient Presets");
    // the first entry gets overwritten with the old gradient in case
    // someone wants to use it;
    ms_Presets.add(new GradientPreset(new ColorGradient().addEntryRGB(0f, 0f, 0f, 0f).addEntryRGB(0f, 0f, 0f, 0f)));
    //ms_Presets.add(new GradientPreset(new ColorGradient().addEntryRGB(0f, 0f, 0f, 0f).addEntryRGB(1f, 1f, 1f, 1f)));
    //ms_Presets.add(new GradientPreset(new ColorGradient().addEntryRGB(1f, 0f, 0f, 0f).addEntryRGB(0f, 1f, 1f, 1f)));
   
    ms_Presets.add(new GradientPreset(new ColorGradient().addEntryRGB(0f, 0f, 0f, 0f).addEntryRGB(1f, 1f, 1f, 1f)));
    // loosely based on the GIMP Presets
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.215635f,0.407414f,0.984953f,1.000000f),0.000000f) .addEntry(new Vector4(0.040368f,0.833333f,0.619375f,1.000000f),0.572621f) .addEntry(new Vector4(0.680490f,0.355264f,0.977430f,1.000000f),0.716194f) .addEntry(new Vector4(0.553909f,0.351853f,0.977430f,1.000000f),0.749583f) .addEntry(new Vector4(1.000000f,0.000000f,1.000000f,1.000000f),0.824708f) .addEntry(new Vector4(1.000000f,1.000000f,0.000000f,1.000000f),0.876461f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.922731f,0.452483f,0.984953f,1.000000f),0.000000f) .addEntry(new Vector4(0.122236f,0.319840f,0.583333f,1.000000f),0.570952f) .addEntry(new Vector4(0.059646f,1.000000f,0.558369f,1.000000f),0.664441f) .addEntry(new Vector4(0.969697f,0.948568f,0.533333f,1.000000f),0.756260f) .addEntry(new Vector4(1.000000f,0.490000f,1.000000f,1.000000f),0.843072f) .addEntry(new Vector4(0.238108f,0.191841f,1.000000f,1.000000f),0.949917f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(1.000000f,0.725647f,0.428066f,1.000000f),0.000000f) .addEntry(new Vector4(0.115248f,0.249315f,0.651515f,1.000000f),0.435726f) .addEntry(new Vector4(0.552948f,0.624658f,0.550758f,1.000000f),0.590985f) .addEntry(new Vector4(0.990647f,1.000000f,0.450000f,1.000000f),0.799666f) .addEntry(new Vector4(0.317635f,0.843781f,1.000000f,1.000000f),0.943239f) .addEntry(new Vector4(0.000000f,1.000000f,0.000000f,1.000000f),0.979967f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.202999f,0.003788f,0.265152f,1.000000f),0.000000f) .addEntry(new Vector4(0.300711f,0.001894f,0.393939f,1.000000f),0.235803f) .addEntry(new Vector4(0.388992f,0.000947f,0.206459f,1.000000f),0.377501f) .addEntry(new Vector4(0.689394f,0.000000f,0.027414f,1.000000f),0.437396f) .addEntry(new Vector4(0.388992f,0.000947f,0.206459f,1.000000f),0.474124f) .addEntry(new Vector4(0.300711f,0.001894f,0.393939f,1.000000f),0.534224f) .addEntry(new Vector4(0.202999f,0.003788f,0.265152f,1.000000f),0.609349f) .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,0.000000f),0.770562f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.500000f,0.500000f,0.500000f,1.000000f),0.000000f) .addEntry(new Vector4(1.000000f,1.000000f,1.000000f,1.000000f),0.166667f) .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,1.000000f),0.250000f) .addEntry(new Vector4(0.500000f,0.500000f,0.500000f,1.000000f),0.346689f) .addEntry(new Vector4(1.000000f,1.000000f,1.000000f,1.000000f),0.425710f) .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,1.000000f),0.583333f) .addEntry(new Vector4(0.416667f,0.416667f,0.416667f,1.000000f),0.671119f) .addEntry(new Vector4(0.833333f,0.833333f,0.833333f,1.000000f),0.835003f) .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,1.000000f),0.916667f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.283820f,0.887055f,1.000000f,1.000000f),0.000000f) .addEntry(new Vector4(0.000000f,1.000000f,0.631509f,1.000000f),0.565943f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(1.000000f,1.000000f,1.000000f,1.000000f),0.000000f) .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,1.000000f),0.502504f) .addEntry(new Vector4(0.890000f,0.329199f,0.177758f,1.000000f),0.637730f) .addEntry(new Vector4(1.000000f,1.000000f,0.000000f,1.000000f),0.744574f) .addEntry(new Vector4(0.910000f,0.574437f,0.000000f,1.000000f),0.786311f) .addEntry(new Vector4(0.727273f,0.127938f,0.148370f,1.000000f),0.891486f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,0.000000f),0.000000f) .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,1.000000f),0.502504f) .addEntry(new Vector4(0.890000f,0.329199f,0.177758f,1.000000f),0.637730f) .addEntry(new Vector4(1.000000f,1.000000f,0.000000f,1.000000f),0.744574f) .addEntry(new Vector4(0.910000f,0.574437f,0.000000f,1.000000f),0.786311f) .addEntry(new Vector4(0.727273f,0.127938f,0.148370f,0.000000f),0.891486f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.879999f,0.880000f,0.880000f,1.000000f),0.000000f) .addEntry(new Vector4(0.999999f,1.000000f,1.000000f,1.000000f),0.046745f) .addEntry(new Vector4(0.909999f,0.910000f,0.910000f,1.000000f),0.126878f) .addEntry(new Vector4(0.819999f,0.820000f,0.820000f,1.000000f),0.353923f) .addEntry(new Vector4(0.903167f,1.000000f,0.000000f,1.000000f),0.472454f) .addEntry(new Vector4(0.000000f,0.877893f,1.000000f,1.000000f),0.562604f) .addEntry(new Vector4(0.384390f,1.000000f,0.900682f,1.000000f),0.621035f) .addEntry(new Vector4(0.819999f,0.820000f,0.820000f,1.000000f),0.681135f) .addEntry(new Vector4(0.879999f,0.880000f,0.880000f,1.000000f),0.747913f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.200000f,0.833333f,0.726927f,1.000000f),0.000000f) .addEntry(new Vector4(1.000000f,0.988352f,0.860000f,1.000000f),0.567613f) .addEntry(new Vector4(0.000000f,0.431818f,0.000000f,1.000000f),0.681135f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.047059f,0.023529f,0.137255f,1.000000f),0.000000f) .addEntry(new Vector4(0.364706f,0.733333f,0.756863f,1.000000f),0.647746f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(1.000000f,1.000000f,1.000000f,1.000000f),0.000000f) .addEntry(new Vector4(0.088684f,0.075143f,0.174242f,1.000000f),0.101836f) .addEntry(new Vector4(0.047059f,0.023529f,0.137255f,1.000000f),0.901503f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.840000f,0.840000f,0.840000f,1.000000f),0.000000f) .addEntry(new Vector4(0.333333f,0.333333f,0.333333f,1.000000f),0.238453f) .addEntry(new Vector4(0.900000f,0.900000f,0.900000f,1.000000f),0.288815f) .addEntry(new Vector4(0.333333f,0.333333f,0.333333f,1.000000f),0.388982f) .addEntry(new Vector4(1.000000f,1.000000f,1.000000f,1.000000f),0.713411f) .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,1.000000f),0.878408f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,1.000000f),0.000000f) .addEntry(new Vector4(0.636364f,0.280000f,0.280000f,1.000000f),0.560935f) .addEntry(new Vector4(1.000000f,0.895652f,0.840000f,1.000000f),0.774624f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.179032f,0.390004f,0.621212f,1.000000f),0.000000f) .addEntry(new Vector4(0.000000f,0.969697f,0.969697f,1.000000f),0.764608f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.000000f,0.000000f,1.000000f,1.000000f),0.000000f) .addEntry(new Vector4(1.000000f,1.000000f,1.000000f,1.000000f),0.333333f) .addEntry(new Vector4(1.000000f,0.000000f,0.000000f,1.000000f),0.666667f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(1.000000f,1.000000f,1.000000f,1.000000f),0.000000f) .addEntry(new Vector4(1.000000f,0.000000f,0.000000f,1.000000f),0.500000f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,1.000000f),0.000000f) .addEntry(new Vector4(1.000000f,0.000000f,0.000000f,1.000000f),0.333333f) .addEntry(new Vector4(1.000000f,1.000000f,0.000000f,1.000000f),0.666667f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(1.000000f,0.000000f,0.000000f,1.000000f),0.000000f) .addEntry(new Vector4(1.000000f,1.000000f,0.000000f,1.000000f),0.500000f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.198883f,0.300000f,0.135000f,1.000000f),0.000000f) .addEntry(new Vector4(0.406805f,0.613636f,0.276136f,1.000000f),0.086811f) .addEntry(new Vector4(0.324169f,0.454545f,0.114714f,1.000000f),0.250000f) .addEntry(new Vector4(0.098346f,0.136364f,0.085909f,1.000000f),0.375000f) .addEntry(new Vector4(0.196692f,0.272727f,0.171818f,1.000000f),0.500835f) .addEntry(new Vector4(0.272727f,0.214990f,0.203431f,1.000000f),0.577629f) .addEntry(new Vector4(0.430776f,0.666667f,0.326636f,1.000000f),0.657763f) .addEntry(new Vector4(0.369390f,0.420000f,0.344400f,1.000000f),0.757930f) .addEntry(new Vector4(0.091517f,0.260000f,0.000000f,1.000000f),0.839733f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(1.000000f,0.984314f,0.984314f,1.000000f),0.000000f) .addEntry(new Vector4(0.258824f,0.121569f,0.035294f,1.000000f),0.532554f) .addEntry(new Vector4(1.000000f,0.811765f,0.549020f,1.000000f),0.555927f) .addEntry(new Vector4(0.349020f,0.160784f,0.058824f,1.000000f),0.612688f) .addEntry(new Vector4(1.000000f,0.556863f,0.219608f,1.000000f),0.948247f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.370303f,0.628966f,0.787879f,1.000000f),0.000000f) .addEntry(new Vector4(1.000000f,0.984314f,0.984314f,1.000000f),0.348915f) .addEntry(new Vector4(0.039048f,0.132980f,0.265152f,1.000000f),0.532554f) .addEntry(new Vector4(0.522500f,0.823569f,0.950000f,1.000000f),0.555927f) .addEntry(new Vector4(0.087500f,0.131053f,0.250000f,1.000000f),0.612688f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.729412f,0.000000f,0.000000f,1.000000f),0.000000f) .addEntry(new Vector4(1.000000f,0.545098f,0.196078f,1.000000f),0.594324f) .addEntry(new Vector4(0.972549f,0.937255f,0.074510f,1.000000f),0.809683f) .addEntry(new Vector4(0.976471f,0.968627f,0.831373f,1.000000f),0.899833f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(1.000000f,0.984314f,0.984314f,1.000000f),0.000000f) .addEntry(new Vector4(0.258824f,0.121569f,0.035294f,1.000000f),0.532554f) .addEntry(new Vector4(0.378491f,0.689394f,0.398544f,1.000000f),0.555927f) .addEntry(new Vector4(0.058824f,0.349020f,0.114977f,1.000000f),0.612688f) .addEntry(new Vector4(0.111468f,0.507576f,0.162566f,1.000000f),0.948247f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.560606f,0.560606f,0.560606f,1.000000f),0.000000f) .addEntry(new Vector4(0.083243f,0.462121f,0.112054f,1.000000f),0.166945f) .addEntry(new Vector4(1.000000f,0.988739f,0.298904f,1.000000f),0.265442f) .addEntry(new Vector4(0.529502f,0.586235f,1.000000f,1.000000f),0.390651f) .addEntry(new Vector4(0.019021f,0.108157f,0.590909f,1.000000f),0.459098f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.142500f,0.168750f,0.195000f,1.000000f),0.000000f) .addEntry(new Vector4(0.317326f,0.344269f,0.371212f,1.000000f),0.096828f) .addEntry(new Vector4(0.425000f,0.357284f,0.327250f,1.000000f),0.220367f) .addEntry(new Vector4(0.271322f,0.389264f,0.500000f,1.000000f),0.333890f) .addEntry(new Vector4(0.592000f,0.632258f,0.800000f,1.000000f),0.423205f) .addEntry(new Vector4(0.931818f,0.906382f,0.782727f,1.000000f),0.574290f) .addEntry(new Vector4(0.841294f,0.844890f,0.848485f,1.000000f),0.742905f) .addEntry(new Vector4(0.581685f,0.611610f,0.674242f,1.000000f),0.859766f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.000000f,1.000000f,0.000000f,1.000000f),0.000000f) .addEntry(new Vector4(1.000000f,1.000000f,1.000000f,1.000000f),0.333333f) .addEntry(new Vector4(1.000000f,0.000000f,0.000000f,1.000000f),0.666667f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(1.000000f,1.000000f,1.000000f,1.000000f),0.000000f) .addEntry(new Vector4(1.000000f,0.000000f,0.000000f,1.000000f),0.500000f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.000000f,1.000000f,0.933333f,0.901961f),0.000000f) .addEntry(new Vector4(0.827451f,1.000000f,0.988235f,1.000000f),0.699499f) .addEntry(new Vector4(0.000000f,1.000000f,0.913725f,0.901961f),0.774624f) .addEntry(new Vector4(0.000000f,1.000000f,0.933333f,0.000000f),0.849750f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.129412f,1.000000f,0.000000f,0.901961f),0.000000f) .addEntry(new Vector4(0.823529f,1.000000f,0.807843f,1.000000f),0.699499f) .addEntry(new Vector4(0.196078f,1.000000f,0.000000f,0.901961f),0.774624f) .addEntry(new Vector4(0.031373f,1.000000f,0.000000f,0.000000f),0.849750f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(1.000000f,0.933333f,0.000000f,0.901961f),0.000000f) .addEntry(new Vector4(0.996078f,1.000000f,0.819608f,1.000000f),0.699499f) .addEntry(new Vector4(1.000000f,0.949020f,0.000000f,0.901961f),0.774624f) .addEntry(new Vector4(1.000000f,0.949020f,0.000000f,0.000000f),0.849750f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.514411f,0.279242f,0.734848f,1.000000f),0.000000f) .addEntry(new Vector4(0.604602f,0.331500f,0.650000f,1.000000f),0.098497f) .addEntry(new Vector4(0.200503f,0.169888f,0.393939f,1.000000f),0.228715f) .addEntry(new Vector4(0.500537f,0.323300f,0.530000f,1.000000f),0.404006f) .addEntry(new Vector4(0.600648f,0.445741f,0.681667f,1.000000f),0.544241f) .addEntry(new Vector4(0.700758f,0.568182f,0.833333f,1.000000f),0.713283f) .addEntry(new Vector4(0.184745f,0.149793f,0.219697f,1.000000f),0.819699f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,1.000000f),0.000000f) .addEntry(new Vector4(0.000000f,0.015686f,0.376471f,1.000000f),0.198664f) .addEntry(new Vector4(1.000000f,1.000000f,1.000000f,1.000000f),0.492487f) .addEntry(new Vector4(1.000000f,0.619608f,0.619608f,1.000000f),0.787980f) .addEntry(new Vector4(1.000000f,0.619608f,0.619608f,0.000000f),0.996661f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,1.000000f),0.000000f) .addEntry(new Vector4(0.298039f,0.227451f,0.000000f,1.000000f),0.198664f) .addEntry(new Vector4(1.000000f,1.000000f,1.000000f,1.000000f),0.492487f) .addEntry(new Vector4(1.000000f,0.619608f,0.619608f,1.000000f),0.787980f) .addEntry(new Vector4(1.000000f,0.619608f,0.619608f,0.000000f),0.996661f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,1.000000f),0.000000f) .addEntry(new Vector4(0.000000f,0.356863f,0.094118f,1.000000f),0.198664f) .addEntry(new Vector4(1.000000f,1.000000f,1.000000f,1.000000f),0.492487f) .addEntry(new Vector4(1.000000f,0.619608f,0.619608f,1.000000f),0.787980f) .addEntry(new Vector4(1.000000f,0.619608f,0.619608f,0.000000f),0.996661f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(1.000000f,0.737255f,0.737255f,0.306122f),0.000000f) .addEntry(new Vector4(1.000000f,0.636060f,0.636060f,0.306122f),0.350584f) .addEntry(new Vector4(1.000000f,0.517647f,0.517647f,0.605442f),0.400668f) .addEntry(new Vector4(0.988235f,0.501961f,0.501961f,0.306122f),0.421223f) .addEntry(new Vector4(1.000000f,0.000000f,0.000000f,0.000000f),0.440735f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(1.000000f,0.113725f,0.000000f,1.000000f),0.000000f) .addEntry(new Vector4(1.000000f,0.000000f,0.047059f,1.000000f),0.699499f) .addEntry(new Vector4(1.000000f,0.431373f,0.000000f,0.000000f),0.849750f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.000000f,0.000000f,1.000000f,1.000000f),0.000000f) .addEntry(new Vector4(1.000000f,1.000000f,0.000000f,1.000000f),0.333333f) .addEntry(new Vector4(1.000000f,0.000000f,0.000000f,1.000000f),0.666667f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(1.000000f,1.000000f,0.000000f,1.000000f),0.000000f) .addEntry(new Vector4(1.000000f,0.000000f,0.000000f,1.000000f),0.500000f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(1.000000f,1.000000f,1.000000f,1.000000f),0.000000f) .addEntry(new Vector4(0.833333f,0.833333f,0.833333f,1.000000f),0.440678f) .addEntry(new Vector4(0.666667f,0.666667f,0.666667f,1.000000f),0.533898f) .addEntry(new Vector4(0.500000f,0.500000f,0.500000f,1.000000f),0.627119f) .addEntry(new Vector4(0.333333f,0.333333f,0.333333f,1.000000f),0.720339f) .addEntry(new Vector4(0.166667f,0.166667f,0.166667f,1.000000f),0.813559f) .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,1.000000f),0.906780f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.643939f,0.311237f,0.107323f,1.000000f),0.000000f) .addEntry(new Vector4(0.871212f,0.820000f,0.820000f,1.000000f),0.346912f) .addEntry(new Vector4(0.340000f,0.128091f,0.107291f,1.000000f),0.538564f) .addEntry(new Vector4(1.000000f,0.521990f,0.220000f,1.000000f),0.652755f) .addEntry(new Vector4(0.204545f,0.121376f,0.046011f,1.000000f),0.777963f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.940000f,0.865112f,0.817800f,1.000000f),0.000000f) .addEntry(new Vector4(0.380000f,0.328734f,0.231331f,1.000000f),0.126878f) .addEntry(new Vector4(0.553030f,0.482304f,0.336911f,1.000000f),0.499165f) .addEntry(new Vector4(0.007576f,0.007576f,0.007576f,1.000000f),0.739566f) .addEntry(new Vector4(0.659091f,0.659091f,0.659091f,1.000000f),0.854758f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.492424f,0.303700f,0.136994f,1.000000f),0.000000f) .addEntry(new Vector4(0.880909f,0.584348f,0.509475f,1.000000f),0.297162f) .addEntry(new Vector4(0.969697f,0.673909f,0.000000f,1.000000f),0.365609f) .addEntry(new Vector4(0.857935f,0.931818f,0.026245f,1.000000f),0.549040f) .addEntry(new Vector4(0.590000f,0.660000f,0.020000f,1.000000f),0.611540f) .addEntry(new Vector4(0.030000f,0.050000f,0.220000f,1.000000f),0.699499f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.109804f,0.066667f,0.568627f,1.000000f),0.000000f) .addEntry(new Vector4(0.917647f,0.043137f,0.043137f,1.000000f),0.365609f) .addEntry(new Vector4(1.000000f,0.533333f,0.000000f,1.000000f),0.749583f) .addEntry(new Vector4(0.937255f,0.925490f,0.215686f,1.000000f),0.864775f) .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,1.000000f),0.934891f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.227451f,0.207843f,0.486275f,1.000000f),0.000000f) .addEntry(new Vector4(0.709804f,0.098039f,0.098039f,1.000000f),0.365609f) .addEntry(new Vector4(0.819608f,0.505882f,0.270588f,1.000000f),0.749583f) .addEntry(new Vector4(0.800000f,0.784314f,0.564706f,1.000000f),0.864775f) .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,1.000000f),0.934891f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.348485f,0.187023f,0.027070f,0.000000f),0.000000f) .addEntry(new Vector4(0.598485f,0.321191f,0.046490f,1.000000f),0.797162f) .addEntry(new Vector4(0.757576f,0.430331f,0.081217f,1.000000f),0.830551f) .addEntry(new Vector4(1.000000f,0.681967f,0.420000f,1.000000f),0.929883f) .addEntry(new Vector4(0.757576f,0.424126f,0.068392f,1.000000f),0.949647f) .addEntry(new Vector4(0.481061f,0.266950f,0.042141f,1.000000f),0.976169f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.948165f,0.969697f,0.812122f,1.000000f),0.000000f) .addEntry(new Vector4(1.000000f,0.552632f,0.270000f,1.000000f),0.203595f) .addEntry(new Vector4(0.581721f,0.096155f,0.170043f,1.000000f),0.487479f) .addEntry(new Vector4(0.287879f,0.155229f,0.049835f,1.000000f),0.529137f) .addEntry(new Vector4(0.336000f,0.425966f,0.800000f,1.000000f),0.562604f) .addEntry(new Vector4(0.852165f,0.985930f,1.000000f,1.000000f),0.697830f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(1.000000f,1.000000f,1.000000f,1.000000f),0.000000f) .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,1.000000f),0.166667f) .addEntry(new Vector4(1.000000f,1.000000f,1.000000f,1.000000f),0.333333f) .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,1.000000f),0.500000f) .addEntry(new Vector4(0.833333f,0.833333f,0.833333f,1.000000f),0.666667f) .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,1.000000f),0.833333f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.007899f,0.310606f,0.000000f,1.000000f),0.000000f) .addEntry(new Vector4(0.195893f,0.575758f,0.085655f,1.000000f),0.085142f) .addEntry(new Vector4(0.924242f,0.750598f,0.192395f,1.000000f),0.193656f) .addEntry(new Vector4(0.954545f,0.239854f,0.132221f,1.000000f),0.276572f) .addEntry(new Vector4(0.530303f,0.319349f,0.236012f,1.000000f),0.387683f) .addEntry(new Vector4(0.472649f,0.295792f,1.000000f,1.000000f),0.555556f) .addEntry(new Vector4(0.644153f,1.000000f,0.957743f,1.000000f),0.666667f) .addEntry(new Vector4(0.408723f,0.870000f,0.278400f,1.000000f),0.826377f) .addEntry(new Vector4(0.363558f,0.500000f,0.000000f,1.000000f),0.884808f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,0.000000f),0.000000f) .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,1.000000f),0.378965f) .addEntry(new Vector4(0.204545f,0.047339f,0.018466f,1.000000f),0.721202f) .addEntry(new Vector4(0.757576f,0.175329f,0.068392f,1.000000f),0.776294f) .addEntry(new Vector4(1.000000f,0.501132f,0.420000f,1.000000f),0.859766f) .addEntry(new Vector4(0.757576f,0.175329f,0.068392f,1.000000f),0.893155f) .addEntry(new Vector4(0.757576f,0.175329f,0.068392f,0.000000f),0.928214f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.920000f,0.579600f,0.239200f,1.000000f),0.000000f) .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,1.000000f),0.555927f) .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,0.000000f),0.981636f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.944844f,0.616991f,0.289137f,1.000000f),0.000000f) .addEntry(new Vector4(0.928860f,0.592934f,0.257008f,1.000000f),0.138982f) .addEntry(new Vector4(0.922120f,0.582791f,0.243462f,1.000000f),0.277963f) .addEntry(new Vector4(0.920000f,0.579600f,0.239200f,1.000000f),0.416945f) .addEntry(new Vector4(0.903086f,0.568944f,0.234802f,1.000000f),0.555927f) .addEntry(new Vector4(0.850329f,0.535708f,0.221086f,1.000000f),0.662354f) .addEntry(new Vector4(0.708598f,0.446417f,0.184235f,1.000000f),0.768781f) .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,1.000000f),0.875209f) .addEntry(new Vector4(0.000000f,0.000000f,0.000000f,0.000000f),0.981636f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(0.969697f,0.639354f,0.000000f,1.000000f),0.000000f) .addEntry(new Vector4(1.000000f,0.988712f,0.000000f,1.000000f),0.161937f) .addEntry(new Vector4(0.166667f,0.157690f,0.000000f,1.000000f),0.247078f) .addEntry(new Vector4(0.007576f,0.007576f,0.007576f,1.000000f),0.287145f) .addEntry(new Vector4(1.000000f,1.000000f,1.000000f,1.000000f),0.363940f) .addEntry(new Vector4(0.857143f,0.843870f,0.030851f,1.000000f),0.592654f) .addEntry(new Vector4(0.333333f,0.194690f,0.180622f,1.000000f),0.803005f) .renormalize()));
    ms_Presets.add(new GradientPreset(new ColorGradient() .addEntry(new Vector4(1.000000f,0.534703f,0.000000f,1.000000f),0.000000f) .addEntry(new Vector4(0.901515f,0.428701f,0.114311f,1.000000f),0.565943f) .renormalize()));

}

  static class ColorMarker {
    public Color color;
    public float pos;
    int x, y, width2, height2;
    int index;

    float alpha;

    public ColorMarker(Color c, float p, int x, int y, int width2, int height2, int gradIndex, float alpha) {
      pos = p;
      color = c;
      this.x = x;
      this.y = y;
      this.width2 = width2;
      this.height2 = height2;
      index = gradIndex;
      this.alpha = alpha;
    }

    public boolean inside(int px, int py) {
      // System.out.println(px + " " + py);
      return ((px >= (x - width2)) && (px <= (x + width2)) && (py >= (y - height2)) && (py <= (y + height2)));
    }

  }

  Vector<ColorMarker> markers = new Vector<ColorMarker>();

  public GradientEditorPanel(String name) {
    setPreferredSize(new Dimension(256-16, 64+16));
    setSize(getPreferredSize());
    setLayout(null);
    setBorder(BorderFactory.createTitledBorder(name));
    addMouseListener(this);
    addMouseMotionListener(this);

    gradientImage = new BufferedImage(256 - 16 - 32, 24, BufferedImage.TYPE_INT_RGB);

    createPopup();
  }

  public void createPopup() {
    m_PopUp = new JPopupMenu();

    createPopupMenuItem("Copy").setEnabled(true);
    createPopupMenuItem("Paste").setEnabled(true);
   
    // Adding the presets popup menus
    for (int k = 0; k < ms_Presets.size()/16; k++) {
      JMenu presets = new JMenu("Presets "+k);
      for (int i = k*16; i < Math.min(ms_Presets.size(), (k+1)*16); i++) {
        JMenuItem itm = new JMenuItem(ms_Presets.get(i).preview);
        itm.addActionListener(this);
        presets.add(itm);
        itm.setActionCommand("Preset "+i);
        if (i == 0) presets.addSeparator();
      }
      m_PopUp.add(presets);
    }   

    createPopupMenuItem("Add to Presets").setEnabled(false);
    createPopupMenuItem("Reverse");
    createPopupMenuItem("Darken All");
    createPopupMenuItem("Brighten All");
    createPopupMenuItem("Random");
  }
 
  JMenuItem createPopupMenuItem(String name) {
    JMenuItem item = new JMenuItem(name);
    item.addActionListener(this);
    m_PopUp.add(item);
    return item;
  }
 
 

  public GradientEditorPanel(ColorGradientParam param) {
    this(param.getName());
    m_ColorGradientParam = param;
    if (m_ColorGradientParam != null)
      setColorGradient(m_ColorGradientParam.get());
  }

  public void refreshGradientImage() {
    for (int y = 0; y < gradientImage.getHeight(); y++) {
      for (int x = 0; x < gradientImage.getWidth(); x++) {
        float pos = (float) x / (float) gradientImage.getWidth();

        Vector4 col = m_ActiveGradient.getColor(pos);

        if (y < 8) { // convert to grayscale preview
          float c = (col.x + col.y + col.z) * (1.0f / 3.0f);
          col.x = col.y = col.z = c;
        } else { // if (y < 16) { // color with alpha preview
          float bg = ((((x + y) / 8) % 2) != 0) ? 1.0f : 0.75f;
          col.x = col.x * col.w + bg * (1.0f - col.w);
          col.y = col.y * col.w + bg * (1.0f - col.w);
          col.z = col.z * col.w + bg * (1.0f - col.w);
        }

        gradientImage.setRGB(x, y, Utils.floatRGBToINTColor(col.x, col.y, col.z));
      }
    }
  }

  private final Color vec4toColor(Vector4 vec) {
    return new Color(vec.x, vec.y, vec.z);
  }

  public void paint(Graphics g) {
    super.paint(g);

    g.drawImage(gradientImage, gradientImagePosX, gradientImagePosY, this);

    for (int i = 0; i < markers.size(); i++) {
      ColorMarker m = markers.get(i);
      g.setColor(m.color);
      g.fillRect(m.x - m.width2, m.y - m.height2, m.width2 * 2, m.height2 * 2);
    }
    if (dragMarker != null) {
      if (alphaDrag) {
        g.setColor(Color.white);
        g.drawString("" + dragMarker.alpha, dragMarker.x - 8, dragMarker.y - 8);
        g.setColor(Color.black);
        g.drawString("" + dragMarker.alpha, dragMarker.x - 9, dragMarker.y - 9);
      }
    }
  }

  private void addMarker(float pos, Color c, int idx, float alpha) {
    ColorMarker m = new ColorMarker(c, pos, gradientImagePosX + (int) (pos * (gradientImage.getWidth() - 1)), gradientImagePosY
        + gradientImage.getHeight() + 4, 4, 8, idx, alpha);
    markers.add(m);
    /*
     * JLabel mark = new JLabel(); mark.setBackground(c); mark.setBounds(x,
     * y, 8, 8); add(mark);
     */
  }

  public void setColorGradient(ColorGradient g) {
    m_ActiveGradient = g;
    markers.clear();
    for (int i = 0; i < g.getNumEntries(); i++) {
      addMarker(g.getEntryPosition(i), vec4toColor(g.getEntryColor(i)), i, g.getEntryColor(i).w);
    }
    refreshGradientImage();
    repaint();
  }

  float getGradPosFromDrawingPosX(int x) {
    return (float) (x - gradientImagePosX) / (float) (gradientImage.getWidth() - 1);
  }

  public void mouseDragged(MouseEvent e) {
    if (dragMarker != null) {
      actuallyDragged = true;
      if (alphaDrag) {
        float valChange = -(dragMarker.x - (e.getX() + dragDX)) / 128.0f;
        // float valChange = (dragMarker.y - (e.getY() +
        // dragDY))/128.0f;
        dragMarker.alpha = alphaDragStartValue + valChange;
        if (dragMarker.alpha > 1.0f)
          dragMarker.alpha = 1.0f;
        if (dragMarker.alpha < 0.0f)
          dragMarker.alpha = 0.0f;
        m_ActiveGradient.updateAlpha(dragMarker.index, dragMarker.alpha);
        refreshGradientImage();
      } else if (allDrag) {
        float dx = -(dragMarker.x - (e.getX() + dragDX)) / (float)(2*(gradientImage.getWidth() - 1));
        //System.out.println(dx);
        for (int i = 0; i < m_ActiveGradient.getNumEntries(); i++) {
          float pos = m_ActiveGradient.getEntryPosition(i);
          if (pos > 0 && pos < 1) {
            pos = pos + dx;
            if (pos < 0) pos = 0.0f;
            if (pos > 1) pos = 1.0f;
            markers.get(i).x = (int)(gradientImagePosX + pos * (gradientImage.getWidth() - 1));
            m_ActiveGradient.updatePosition(i, pos);
          }
        }
        refreshGradientImage();
      } else {
        dragMarker.x = e.getX() + dragDX;
        if (dragMarker.x < dragStopUpX)
          dragMarker.x = dragStopUpX;
        if (dragMarker.x > dragStopDownX)
          dragMarker.x = dragStopDownX;

        float pos = getGradPosFromDrawingPosX(dragMarker.x);
        m_ActiveGradient.updatePosition(dragMarker.index, pos);
        refreshGradientImage();
      }
    }
    repaint();
  }

  public void mouseMoved(MouseEvent e) {
  }

  public void mouseClicked(MouseEvent arg0) {
  }

  public void mouseEntered(MouseEvent arg0) {
  }

  public void mouseExited(MouseEvent arg0) {
  }

  public void mousePressed(MouseEvent e) {
    mousePosition = e.getPoint();

    for (int i = markers.size()-1; i >= 0; i--) {
      ColorMarker m = markers.get(i);
      if (m.inside(mousePosition.x, mousePosition.y)) {
        if (e.getButton() == 3) { // right click => delete marker
          if (m_ActiveGradient.getNumEntries() > 2) {
            m_ActiveGradient.deleteEntry(m.index);
            markers.remove(m);
            setColorGradient(m_ActiveGradient);
            m_ColorGradientParam.notifyParamChangeListener();
            return;
          }
        } else if (e.getClickCount() == 2) { // double click is color
          // chooser:
          Color c = colorChooser.getColorSelection(m.color);
          m_ActiveGradient.updateColorRGB(m.index, c.getRed() / 255.0f, c.getGreen() / 255.0f, c.getBlue() / 255.0f);
          if ((c.getRed() != m.color.getRed()) || (c.getGreen() != m.color.getGreen()) || (c.getBlue() != m.color.getBlue()))
            m_ColorGradientParam.notifyParamChangeListener();
          m.color = c;
          refreshGradientImage();
          repaint();
          return;
        } else {
          dragMarker = m;
          dragDX = m.x - mousePosition.x;
          dragDY = m.y - mousePosition.y;

          // set the bounds for dragging// assumes that there are
          // always >= 2 entries in the gradient
          if (m.index == 0) {
            dragStopUpX = gradientImagePosX;
            dragStopDownX = (gradientImagePosX + (int) (m_ActiveGradient.getEntryPosition(m.index + 1) * (gradientImage
                .getWidth() - 1))) - 1;
          } else if (m.index == m_ActiveGradient.getNumEntries() - 1) {
            dragStopUpX = (gradientImagePosX + (int) (m_ActiveGradient.getEntryPosition(m.index - 1) * (gradientImage.getWidth() - 1))) + 1;
            dragStopDownX = (gradientImagePosX + gradientImage.getWidth()) - 1;
          } else {
            dragStopUpX = (gradientImagePosX + (int) (m_ActiveGradient.getEntryPosition(m.index - 1) * (gradientImage.getWidth() - 1))) + 1;
            dragStopDownX = (gradientImagePosX + (int) (m_ActiveGradient.getEntryPosition(m.index + 1) * (gradientImage
                .getWidth() - 1))) - 1;
          }

          if (e.isShiftDown()) {
            alphaDrag = true;
            alphaDragStartValue = m.alpha;
          } else if (e.isControlDown()){
            allDrag = true;
          }
          repaint();
          return;
        }
      }
    }
    // no marker clicked:

    if (e.getButton() == 3) { // right click
      // if (e.isPopupTrigger()) {
      m_PopUp.show(e.getComponent(), e.getX(), e.getY());
      // }
    } else if (e.getClickCount() == 2) { // double click => insert
      if ((e.getX() >= gradientImagePosX) && (e.getX() < (gradientImagePosX + gradientImage.getWidth()))) { // inside the gradient image
        // (y-wise)
        float pos = getGradPosFromDrawingPosX(e.getX());
        m_ActiveGradient.addEntry(m_ActiveGradient.getColor(pos), pos);
        setColorGradient(m_ActiveGradient);
        return;
      }
    }
  }

  public void mouseReleased(MouseEvent e) {
    if (actuallyDragged) {
      m_ColorGradientParam.notifyParamChangeListener();
    }
    dragMarker = null;
    alphaDrag = false;
    allDrag = false;
    actuallyDragged = false;
    repaint();
  }

  public void actionPerformed(ActionEvent e) {
    String command = e.getActionCommand();
   
    if (m_ActiveGradient == null) {
      Logger.logWarning(this, "Popup Action without an active gradient.");
      return;
    }
   
    if (command.equals("Reverse")) {
      ColorGradient temp = new ColorGradient();
      int num = m_ActiveGradient.getNumEntries();
      for (int i = 0; i < num; i++)
        temp.addEntry(m_ActiveGradient.getEntryColor(i), 1.0f - m_ActiveGradient.getEntryPosition(i));
      m_ActiveGradient.setFrom(temp);
      setColorGradient(m_ActiveGradient);
    } else if (command.equals("Random")) {
      ms_Presets.get(0).updateGradient(m_ActiveGradient); // remember the old one at the first position
      m_ActiveGradient.clear();
      int num = 4;
      for (int i = 0; i < num; i++) {
        m_ActiveGradient.addEntry(new Vector4(FMath.random(), FMath.random(), FMath.random(), 1.0f), i/(float)(num-1));
      }
      setColorGradient(m_ActiveGradient);
    } else if (command.equals("Darken All")) {
      for (int i = 0; i < m_ActiveGradient.getNumEntries(); i++) {
        m_ActiveGradient.getEntryColor(i).multComp_ip(0.8f,0.8f,0.8f,1.0f);
        m_ActiveGradient.getEntryColor(i).clamp(0.0f, 1.0f);
      }
    } else if (command.equals("Brighten All")) {
      for (int i = 0; i < m_ActiveGradient.getNumEntries(); i++) {
        m_ActiveGradient.getEntryColor(i).multComp_ip(1.25f,1.25f,1.25f,1.0f);
        m_ActiveGradient.getEntryColor(i).clamp(0.0f, 1.0f);
      }
    } else if (command.startsWith("Preset ")) {
      int presetIndex = Integer.parseInt(command.substring(7));
      if (presetIndex >= 0) {
        if (presetIndex > 0) ms_Presets.get(0).updateGradient(m_ActiveGradient); // remember the old one at the first position
        m_ActiveGradient.setFrom(ms_Presets.get(presetIndex).gradient);
        setColorGradient(m_ActiveGradient);
      }
    } else if (command.equals("Copy")) {
      ms_CopiedColorGradient.setFrom(m_ActiveGradient);
      return; // no notify needed
    } else if (command.equals("Paste")) {
      m_ActiveGradient.setFrom(ms_CopiedColorGradient);
      setColorGradient(m_ActiveGradient);
    } else {
      Logger.logWarning(this, "got Unknown Action: " + command);
      return;
    }

    m_ColorGradientParam.notifyParamChangeListener();
  }

}
TOP

Related Classes of com.mystictri.neotextureedit.GradientEditorPanel$ColorMarker

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.