X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fschemes%2FGraduatedColor.java;h=68b0c1a36bbaed04715a704cd362df98e15cc959;hb=06931e7445db77675739e0f206d7b5fafc3f9c05;hp=25681c4e83fefddbe619c3a570433b0b9851a8f1;hpb=51f87c0026052e327ab4eaf24f8e4dadca96a615;p=jalview.git
diff --git a/src/jalview/schemes/GraduatedColor.java b/src/jalview/schemes/GraduatedColor.java
index 25681c4..68b0c1a 100644
--- a/src/jalview/schemes/GraduatedColor.java
+++ b/src/jalview/schemes/GraduatedColor.java
@@ -1,5 +1,19 @@
-/**
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)
+ * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview 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.
*
+ * Jalview 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 Jalview. If not, see .
*/
package jalview.schemes;
@@ -8,49 +22,69 @@ import jalview.datamodel.SequenceFeature;
import java.awt.Color;
/**
- * Value and/or thresholded colour scale used for colouring by annotation and feature score
+ * Value and/or thresholded colour scale used for colouring by annotation and
+ * feature score
+ *
* @author JimP
- *
+ *
*/
public class GraduatedColor
{
- int thresholdState = AnnotationColourGradient.NO_THRESHOLD; // or ABOVE_THRESHOLD or BELOW_THRESHOLD
- float lr,lg,lb,dr,dg,db;
+ int thresholdState = AnnotationColourGradient.NO_THRESHOLD; // or
+ // ABOVE_THRESHOLD
+ // or
+ // BELOW_THRESHOLD
+
+ float lr, lg, lb, dr, dg, db;
+
/**
- * linear scaling parameters, base, minimum colour threshold, range of linear scale from lower to upper
+ * linear scaling parameters, base, minimum colour threshold, range of linear
+ * scale from lower to upper
*/
- float base,range,thrsh;
+ float base, range, thrsh;
+
/**
* when true, colour from u to u-d rather than u to u+d
*/
- boolean tolow=false;
+ boolean tolow = false;
+
+ /**
+ * when false, min/max range has been manually set so should not be
+ * dynamically adjusted.
+ */
+ boolean autoScale = true;
+
/**
* construct a graduatedColor object from simple parameters
+ *
* @param low
* @param high
* @param min
* @param max
- * color low->high from min->max
+ * color low->high from min->max
*/
- public GraduatedColor(Color low,Color high, float min,float max)
+ public GraduatedColor(Color low, Color high, float min, float max)
{
thrsh = Float.NaN;
- tolow = min>=max;
- lr = low.getRed()/255f;
- lg = low.getGreen()/255f;
- lb = low.getBlue()/255f;
- dr = (high.getRed()/255f)-lr;
- dg = (high.getGreen()/255f)-lg;
- db = (high.getBlue()/255f)-lb;
+ tolow = min >= max;
+ lr = low.getRed() / 255f;
+ lg = low.getGreen() / 255f;
+ lb = low.getBlue() / 255f;
+ dr = (high.getRed() / 255f) - lr;
+ dg = (high.getGreen() / 255f) - lg;
+ db = (high.getBlue() / 255f) - lb;
if (tolow)
{
base = max;
- range = min-max;
- } else {
+ range = min - max;
+ }
+ else
+ {
base = min;
- range = max-min;
+ range = max - min;
}
}
+
public GraduatedColor(GraduatedColor oldcs)
{
lr = oldcs.lr;
@@ -64,9 +98,13 @@ public class GraduatedColor
tolow = oldcs.tolow;
thresholdState = oldcs.thresholdState;
thrsh = oldcs.thrsh;
+ autoScale = oldcs.autoScale;
+ colourByLabel = oldcs.colourByLabel;
}
+
/**
* make a new gradient from an old one with a different scale range
+ *
* @param oldcs
* @param min
* @param max
@@ -74,83 +112,184 @@ public class GraduatedColor
public GraduatedColor(GraduatedColor oldcs, float min, float max)
{
this(oldcs);
- if (max1f) { scl = 1f; }
- return new Color(lr+scl*dr,lg+scl*dg,lb+scl*db);
+ float scl = (scr - base) / range;
+ if (tolow)
+ {
+ scl = -scl;
+ }
+ if (scl < 0f)
+ {
+ scl = 0f;
+ }
+ if (scl > 1f)
+ {
+ scl = 1f;
+ }
+ return new Color(lr + scl * dr, lg + scl * dg, lb + scl * db);
}
+
public void setThresh(float value)
{
thrsh = value;
}
+
+ public float getThresh()
+ {
+ return thrsh;
+ }
+
public void setThreshType(int aboveThreshold)
{
thresholdState = aboveThreshold;
}
+
public int getThreshType()
{
return thresholdState;
}
+
+ public float getMax()
+ {
+ // regenerate the original values passed in to the constructor
+ return (tolow) ? base : (base + range);
+ }
+
+ public float getMin()
+ {
+ // regenerate the original value passed in to the constructor
+ return (tolow) ? (base + range) : base;
+ }
+
+ public boolean isAutoScale()
+ {
+ return autoScale;
+ }
+
+ public void setAutoScaled(boolean autoscale)
+ {
+ autoScale = autoscale;
+ }
+
+ /**
+ * update the base and range appropriatly for the given minmax range
+ *
+ * @param a
+ * float[] {min,max} array containing minmax range for the associated
+ * score values
+ */
+ public void updateBounds(float min, float max)
+ {
+ if (max < min)
+ {
+ base = max;
+ range = min - max;
+ tolow = true;
+ }
+ else
+ {
+ base = min;
+ range = max - min;
+ tolow = false;
+ }
+ }
}