X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fschemes%2FGraduatedColor.java;h=665a78b77ab5227843ff1d87239c3ba7b2b650a7;hb=b2f9a8d7bce642ff4011bc6d49e02bb0569fbb11;hp=25681c4e83fefddbe619c3a570433b0b9851a8f1;hpb=51f87c0026052e327ab4eaf24f8e4dadca96a615;p=jalview.git diff --git a/src/jalview/schemes/GraduatedColor.java b/src/jalview/schemes/GraduatedColor.java index 25681c4..665a78b 100644 --- a/src/jalview/schemes/GraduatedColor.java +++ b/src/jalview/schemes/GraduatedColor.java @@ -1,5 +1,20 @@ -/** +/* + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.1) + * Copyright (C) 2014 The Jalview Authors + * + * 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 . + * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.schemes; @@ -8,49 +23,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 +99,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 +113,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; + } + } }