package org.broad.igv.feature.dsi; import htsjdk.tribble.Feature; import org.broad.igv.feature.IGVFeature; import org.broad.igv.renderer.Renderer; import org.broad.igv.track.RenderContext; import org.broad.igv.track.Track; import org.broad.igv.ui.FontManager; import org.broad.igv.ui.IGV; import java.awt.*; import java.util.List; /** * Created by jrobinson on 7/19/16. */ public class DSIRenderer implements Renderer<Feature> { static final Color uColor = new Color(26, 204, 255); static final Color mColor = new Color(153, 253, 153); static final Color pColor = new Color(50, 200, 50); static final Color fColor = new Color(253, 102, 8); static final Color naColor = Color.lightGray; double max = 20.0; @Override public void render(List<Feature> featureList, RenderContext context, Rectangle trackRectangle, Track track) { double origin = context.getOrigin(); double locScale = context.getScale(); if (featureList != null && featureList.size() > 0) { for (Feature f : featureList) { if (!(f instanceof DSIFeature)) continue; // Don't know how to draw anything else DSIFeature feature = (DSIFeature) f; // Note -- don't cast these to an int until the range is checked. // could get an overflow. double pixelStart = ((feature.getStart() - origin) / locScale); double pixelEnd = ((feature.getEnd() - origin) / locScale); // If the any part of the feature fits in the // Track rectangle draw it if (pixelEnd >= trackRectangle.getX() && pixelStart <= trackRectangle.getMaxX()) { int w = (int) (pixelEnd - pixelStart); if (w < 1) { w = 1; } else if(w > 5) { w -= 2; pixelStart += 1; } int totalHeight = trackRectangle.height; //((feature.total / max) * trackRectangle.getHeight()); int bottom = trackRectangle.y + trackRectangle.height; int top = trackRectangle.y; int x = (int) pixelStart; Color color = naColor; Graphics2D g2D = context.getGraphic2DForColor(color); g2D.fillRect(x, top, w, totalHeight); if (feature.u != Integer.MIN_VALUE) { double total = feature.total; g2D = context.getGraphic2DForColor(uColor); int uHeight = (int) Math.round((feature.u / total) * totalHeight); g2D.fillRect(x, top, w, uHeight); top += uHeight; g2D = context.getGraphic2DForColor(mColor); int mHeight = (int) Math.round((feature.m / total) * totalHeight); g2D.fillRect(x, top, w, mHeight); top += mHeight; g2D = context.getGraphic2DForColor(pColor); int pHeight = (int) Math.round((feature.p / total) * totalHeight); g2D.fillRect(x, top, w, pHeight); top += pHeight; g2D = context.getGraphic2DForColor(fColor); int fHeight = totalHeight - top; g2D.fillRect(x, top, w, fHeight); } } } } } }