Search in sources :

Example 51 with GradientPaint

use of java.awt.GradientPaint in project vcell by virtualcell.

the class ReactionToolShapeIcon method paintIcon.

@Override
public void paintIcon(Component comp, Graphics g, int x, int y) {
    if (comp == null) {
        return;
    }
    if (!(comp instanceof JToolBarToggleButton)) {
        return;
    }
    JToolBarToggleButton button = (JToolBarToggleButton) comp;
    Graphics2D g2 = (Graphics2D) g;
    Color colorOld = g2.getColor();
    Paint paintOld = g2.getPaint();
    Stroke strokeOld = g2.getStroke();
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    g2.setStroke(new BasicStroke(2f));
    Color c1, c2, c3, c4;
    // for the arrowhead
    float x1, x2, y1, y2;
    int xx = x - 16;
    int yy = y - 15;
    // we'll paint a small arc from the upper left part of a very large circle
    int w = diameter * 8;
    int h = diameter * 8;
    // the start and end coordinates of the membrane (for the flux button)
    float m1 = 9f;
    float m2 = 14f;
    if (state == State.normal) {
        // paint yellow arc
        c1 = Color.yellow.darker();
        c2 = Color.yellow;
        c3 = Color.black;
        c4 = Color.yellow.darker();
        x1 = 0;
        x2 = 0;
        y1 = 0;
        y2 = 0;
    } else {
        c1 = Color.yellow.darker();
        c2 = Color.yellow.brighter();
        c3 = Color.black;
        c4 = Color.yellow.darker().darker();
        xx += 1;
        yy += 1;
        x1 = 1;
        x2 = 1;
        y1 = 1;
        y2 = 1;
        m1 += 1.0f;
        m2 += 1.0f;
    }
    Arc2D arc;
    if (mode == Mode.catalyst) {
        arc = new Arc2D.Double(xx, yy, w, h, 125, 18, Arc2D.OPEN);
    } else {
        arc = new Arc2D.Double(xx, yy, w, h, // starting angle
        126, // angular extent
        18, Arc2D.OPEN);
    }
    int a = 0;
    int b = -10;
    int c = 12;
    // the wide yellow halo
    g2.setStroke(new BasicStroke(4.0f));
    GradientPaint gp = new GradientPaint(a, b, c1, a + c, b - c, c2, true);
    g2.setPaint(gp);
    g2.draw(arc);
    if (mode == Mode.flux) {
        // the "membrane" line, only for flux reactions
        g2.setStroke(new BasicStroke(5.0f));
        g2.setPaint(Color.orange.darker());
        Line2D line = new Line2D.Float(m1, m1, m2, m2);
        g2.draw(line);
    }
    if (mode == Mode.catalyst) {
        // dashed black line for catalyst
        float[] dash = { 6.2f, 3.6f };
        Stroke dashed = new BasicStroke(1.6f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, dash, 0);
        g2.setStroke(dashed);
        g2.setPaint(Color.black);
        // gp = new GradientPaint(a, b, c3, a+c, b-c, c4, true);
        // g2.setPaint(gp);
        g2.draw(arc);
    } else {
        // the continuous black line for plain and flux reactions
        g2.setStroke(new BasicStroke(2f));
        gp = new GradientPaint(a, b, c3, a + c, b - c, c4, true);
        g2.setPaint(gp);
        g2.draw(arc);
    }
    // TODO: draw arrow (maybe)
    // g2.setStroke(new BasicStroke(1.4f,				// Line width
    // BasicStroke.CAP_ROUND,					// End-cap style
    // BasicStroke.JOIN_ROUND));				// Vertex join style
    // Line2D l1 = new Line2D.Float(x1, y1, x2, y2);
    // Line2D l2 = new Line2D.Float(x1, y1, x2, y2);
    // g2.draw(l1);
    // g2.draw(l2);
    g2.setStroke(strokeOld);
    g2.setColor(colorOld);
    g2.setPaint(paintOld);
}
Also used : BasicStroke(java.awt.BasicStroke) Stroke(java.awt.Stroke) BasicStroke(java.awt.BasicStroke) Color(java.awt.Color) GradientPaint(java.awt.GradientPaint) Paint(java.awt.Paint) GradientPaint(java.awt.GradientPaint) Arc2D(java.awt.geom.Arc2D) Line2D(java.awt.geom.Line2D) JToolBarToggleButton(org.vcell.util.gui.JToolBarToggleButton) Paint(java.awt.Paint) GradientPaint(java.awt.GradientPaint) Graphics2D(java.awt.Graphics2D)

Example 52 with GradientPaint

use of java.awt.GradientPaint in project vcell by virtualcell.

the class MolecularTypeLargeShape method paintSpecies.

// --------------------------------------------------------------------------------------
private void paintSpecies(Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
    Font fontOld = g2.getFont();
    Color colorOld = g2.getColor();
    Stroke strokeOld = g2.getStroke();
    Color primaryColor = null;
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    if (mt == null && mtp == null) {
        // plain species context
        Color exterior;
        if (owner == null) {
            // for plain species, we just draw a circle based on height!!! we ignore width!!!
            // error
            exterior = Color.red.darker();
        } else {
            if (!shapePanel.isShowMoleculeColor()) {
                exterior = Color.GRAY;
            } else {
                // plain species
                exterior = Color.green.darker().darker();
            }
        }
        Point2D center = new Point2D.Float(xPos + baseHeight / 3, yPos + baseHeight / 3);
        float radius = baseHeight * 0.5f;
        Point2D focus = new Point2D.Float(xPos + baseHeight / 3 - 1, yPos + baseHeight / 3 - 1);
        float[] dist = { 0.1f, 1.0f };
        Color[] colors = { Color.white, exterior };
        RadialGradientPaint p = new RadialGradientPaint(center, radius, focus, dist, colors, CycleMethod.NO_CYCLE);
        g2.setPaint(p);
        Ellipse2D circle = new Ellipse2D.Double(xPos, yPos, baseHeight, baseHeight);
        g2.fill(circle);
        Ellipse2D circle2 = new Ellipse2D.Double(xPos - 1, yPos - 1, baseHeight + 0.7, baseHeight + 0.7);
        g2.setPaint(getDefaultColor(Color.DARK_GRAY));
        int z = shapePanel.getZoomFactor();
        g2.setStroke(new BasicStroke(2.0f + 0.14f * z));
        g2.draw(circle2);
        if (owner == null) {
            Font font = fontOld.deriveFont(Font.BOLD);
            g.setFont(font);
            g.setColor(Color.red.darker().darker());
            g2.drawString("Error parsing generated species!", xPos + baseHeight + 10, yPos + baseHeight - 9);
        }
        g2.setFont(fontOld);
        g2.setColor(colorOld);
        g2.setStroke(strokeOld);
        return;
    } else {
        // molecular type, species pattern, observable
        if (mt == null || mt.getModel() == null) {
            primaryColor = Color.blue.darker().darker();
        } else {
            if (shapePanel.getDisplayMode() == DisplayMode.participantSignatures) {
                if (!shapePanel.isShowMoleculeColor()) {
                    primaryColor = AbstractComponentShape.componentVeryLightGray;
                } else {
                    RbmModelContainer rbmmc = mt.getModel().getRbmModelContainer();
                    List<MolecularType> mtList = rbmmc.getMolecularTypeList();
                    int index = mtList.indexOf(mt);
                    index = index % 7;
                    primaryColor = colorTable[index].darker().darker();
                }
                if (shapePanel.isShowDifferencesOnly()) {
                    ReactionRule reactionRule = (ReactionRule) owner;
                    switch(shapePanel.hasNoMatch(reactionRule.getName(), mtp)) {
                        case CHANGED:
                            primaryColor = AbstractComponentShape.deepOrange;
                            break;
                        case // keep whatever color we set above
                        UNCHANGED:
                            break;
                        case ANALYSISFAILED:
                            ArrayList<Issue> issueList = new ArrayList<Issue>();
                            reactionRule.gatherIssues(new IssueContext(), issueList);
                            boolean bRuleHasErrorIssues = false;
                            for (Issue issue : issueList) {
                                if (issue.getSeverity() == Severity.ERROR) {
                                    bRuleHasErrorIssues = true;
                                    break;
                                }
                            }
                            if (bRuleHasErrorIssues) {
                                primaryColor = AbstractComponentShape.componentHidden;
                            } else {
                                System.err.println("ReactionRule Analysis failed, but there are not Error Issues with ReactionRule " + reactionRule.getName());
                                primaryColor = Color.red.darker();
                            }
                            break;
                        default:
                            break;
                    }
                }
            } else if (shapePanel.getDisplayMode() == DisplayMode.rules) {
                if (!shapePanel.isShowMoleculeColor()) {
                    primaryColor = AbstractComponentShape.componentVeryLightGray;
                } else {
                    RbmModelContainer rbmmc = mt.getModel().getRbmModelContainer();
                    List<MolecularType> mtList = rbmmc.getMolecularTypeList();
                    int index = mtList.indexOf(mt);
                    index = index % 7;
                    primaryColor = colorTable[index].darker().darker();
                }
                // if we show difference, we apply that now and override the color
                if (shapePanel.isShowDifferencesOnly()) {
                    ReactionRule reactionRule = (ReactionRule) owner;
                    switch(shapePanel.hasNoMatch(mtp)) {
                        case CHANGED:
                            primaryColor = AbstractComponentShape.deepOrange;
                            break;
                        case // keep whatever color we set above
                        UNCHANGED:
                            break;
                        case ANALYSISFAILED:
                            ArrayList<Issue> issueList = new ArrayList<Issue>();
                            reactionRule.gatherIssues(new IssueContext(), issueList);
                            boolean bRuleHasErrorIssues = false;
                            for (Issue issue : issueList) {
                                if (issue.getSeverity() == Severity.ERROR) {
                                    bRuleHasErrorIssues = true;
                                    break;
                                }
                            }
                            if (bRuleHasErrorIssues) {
                                primaryColor = AbstractComponentShape.componentHidden;
                            } else {
                                System.err.println("ReactionRule Analysis failed, but there are not Error Issues with ReactionRule " + reactionRule.getName());
                                primaryColor = Color.red.darker();
                            }
                            break;
                        default:
                            break;
                    }
                }
            } else {
                // TODO: do we ever get here legitimately? if not throw an exception!
                RbmModelContainer rbmmc = mt.getModel().getRbmModelContainer();
                List<MolecularType> mtList = rbmmc.getMolecularTypeList();
                int index = mtList.indexOf(mt);
                index = index % 7;
                if (!shapePanel.isShowMoleculeColor()) {
                    primaryColor = AbstractComponentShape.componentVeryLightGray;
                } else {
                    primaryColor = isHighlighted() == true ? Color.white : colorTable[index].darker().darker();
                }
                if (hasErrorIssues(owner, mt)) {
                    primaryColor = isHighlighted() ? Color.white : Color.red;
                }
            }
        }
    }
    // paint the structure contour if applicable (only for anchored molecules!)
    if (structure != null && mt != null && !mt.isAnchorAll() && mt.getAnchors().size() > 0) {
        paintNarrowCompartmentRight(g);
    } else if (owner instanceof MolecularType && !mt.isAnchorAll()) {
        paintNarrowCompartmentRight(g);
    }
    // paint the shape of the molecule and fill it with color
    GradientPaint p = new GradientPaint(xPos, yPos, primaryColor, xPos, yPos + baseHeight / 2, Color.WHITE, true);
    g2.setPaint(p);
    RoundRectangle2D rect = new RoundRectangle2D.Float(xPos, yPos, width, baseHeight, cornerArc, cornerArc);
    g2.fill(rect);
    RoundRectangle2D inner = new RoundRectangle2D.Float(xPos + 1, yPos + 1, width - 2, baseHeight - 2, cornerArc - 3, cornerArc - 3);
    if (isHighlighted()) {
        if (hasErrorIssues(owner, mt)) {
            g2.setPaint(Color.red);
        } else {
            g2.setPaint(getDefaultColor(Color.BLACK));
        }
        g2.draw(inner);
        if (hasErrorIssues(owner, mt)) {
            g2.setPaint(Color.red);
        } else {
            g2.setPaint(getDefaultColor(Color.BLACK));
        }
        g2.draw(rect);
    } else {
        if (hasErrorIssues(owner, mt)) {
            g2.setPaint(Color.red.darker());
        } else {
            g2.setPaint(getDefaultColor(Color.GRAY));
        }
        g2.draw(inner);
        if (hasErrorIssues(owner, mt)) {
            g2.setPaint(Color.red.darker());
        } else {
            g2.setPaint(getDefaultColor(Color.DARK_GRAY));
        }
        g2.draw(rect);
    }
    // paint the anchor glyph
    Rectangle r = getAnchorHotspot();
    if (r != null) {
        // g2.drawRect(r.x, r.y, r.width, r.height);	// anchor tooltip hotspot area
        int z = shapePanel.getZoomFactor();
        int w = r.width;
        int x = r.x + w / 2;
        int y = r.y;
        int h = 12 + z / 2;
        h = z < -2 ? h - 1 : h;
        h = z < -4 ? h - 1 : h;
        Line2D line = new Line2D.Float(x, y, x, y + h);
        g2.setPaint(getDefaultColor(Color.RED.darker().darker()));
        g2.setStroke(new BasicStroke(2.6f + 0.13f * z));
        g2.draw(line);
        // TODO: adjust the arc at deep zoom!
        double a1 = z < -3 ? 245 : 240;
        // 60
        double a2 = z < -3 ? 52 : 59;
        Arc2D arc = new Arc2D.Double(x - h, y - h, 2 * h, 2 * h, a1, a2, Arc2D.OPEN);
        g2.setStroke(new BasicStroke(2.6f + 0.20f * z));
        g2.draw(arc);
        g2.setPaint(colorOld);
        g2.setStroke(strokeOld);
    }
    // the text inside the molecule shape
    if (mt == null && mtp == null) {
    // plain species context
    // don't write any text inside
    } else {
        // molecular type, species pattern
        Graphics gc = shapePanel.getGraphics();
        Font font = deriveMoleculeFontBold(g, shapePanel);
        g.setFont(font);
        // font color
        g.setColor(getDefaultColor(Color.BLACK));
        int fontSize = font.getSize();
        int textX = xPos + 11;
        int textY = yPos + baseHeight - (baseHeight - fontSize) / 2;
        g2.drawString(name, textX, textY);
        if (owner instanceof ReactionRule && mtp != null && mtp.hasExplicitParticipantMatch()) {
            int z = shapePanel.getZoomFactor();
            if (z >= LargeShapeCanvas.SmallestZoomFactorWithText) {
                // hide the matching too when we don't display the name
                FontMetrics fm = gc.getFontMetrics(font);
                int stringWidth = fm.stringWidth(name);
                Font smallerFont = font.deriveFont(font.getSize() * 0.8F);
                g.setFont(smallerFont);
                g2.drawString(mtp.getParticipantMatchLabel(), textX + stringWidth + 2, textY + 2);
            }
        }
    }
    g.setFont(fontOld);
    g.setColor(colorOld);
    g2.setStroke(strokeOld);
    for (MolecularComponentLargeShape mcls : componentShapes) {
        // paint the components
        mcls.paintSelf(g);
    }
    g2.setFont(fontOld);
    g2.setColor(colorOld);
    g2.setStroke(strokeOld);
}
Also used : BasicStroke(java.awt.BasicStroke) Issue(org.vcell.util.Issue) RoundRectangle2D(java.awt.geom.RoundRectangle2D) ArrayList(java.util.ArrayList) Rectangle(java.awt.Rectangle) RadialGradientPaint(java.awt.RadialGradientPaint) GradientPaint(java.awt.GradientPaint) Line2D(java.awt.geom.Line2D) Arc2D(java.awt.geom.Arc2D) Font(java.awt.Font) Ellipse2D(java.awt.geom.Ellipse2D) Point2D(java.awt.geom.Point2D) RbmModelContainer(cbit.vcell.model.Model.RbmModelContainer) FontMetrics(java.awt.FontMetrics) IssueContext(org.vcell.util.IssueContext) ArrayList(java.util.ArrayList) List(java.util.List) Stroke(java.awt.Stroke) BasicStroke(java.awt.BasicStroke) ReactionRule(cbit.vcell.model.ReactionRule) Color(java.awt.Color) RadialGradientPaint(java.awt.RadialGradientPaint) RadialGradientPaint(java.awt.RadialGradientPaint) Paint(java.awt.Paint) GradientPaint(java.awt.GradientPaint) Graphics2D(java.awt.Graphics2D) MolecularType(org.vcell.model.rbm.MolecularType) Graphics(java.awt.Graphics)

Example 53 with GradientPaint

use of java.awt.GradientPaint in project Lucee by lucee.

the class MirrorFilter method filter.

@Override
public BufferedImage filter(BufferedImage src, BufferedImage dst) {
    if (dst == null)
        dst = createCompatibleDestImage(src, null);
    // BufferedImage tsrc = src;
    Shape clip;
    int width = src.getWidth();
    int height = src.getHeight();
    int h = (int) (centreY * height);
    int d = (int) (gap * height);
    Graphics2D g = dst.createGraphics();
    clip = g.getClip();
    g.clipRect(0, 0, width, h);
    g.drawRenderedImage(src, null);
    g.setClip(clip);
    g.clipRect(0, h + d, width, height - h - d);
    g.translate(0, 2 * h + d);
    g.scale(1, -1);
    g.drawRenderedImage(src, null);
    g.setPaint(new GradientPaint(0, 0, new Color(1.0f, 0.0f, 0.0f, 0.0f), 0, h, new Color(0.0f, 1.0f, 0.0f, opacity)));
    g.setComposite(AlphaComposite.getInstance(AlphaComposite.DST_IN));
    g.fillRect(0, 0, width, h);
    g.setClip(clip);
    g.dispose();
    return dst;
}
Also used : Shape(java.awt.Shape) Color(java.awt.Color) GradientPaint(java.awt.GradientPaint) GradientPaint(java.awt.GradientPaint) Graphics2D(java.awt.Graphics2D)

Example 54 with GradientPaint

use of java.awt.GradientPaint in project n2a by frothga.

the class GradientPanel method paintComponent.

// /////////
// PAINT //
// /////////
@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    if (gradientDisabled) {
        return;
    }
    Graphics2D g2 = (Graphics2D) g;
    g2.setPaint(new GradientPaint(initEdgeX, initEdgeY, color1, insideX, insideY, color2));
    g2.fillRect(0, 0, getWidth(), getHeight());
}
Also used : GradientPaint(java.awt.GradientPaint) Graphics2D(java.awt.Graphics2D)

Example 55 with GradientPaint

use of java.awt.GradientPaint in project yamcs-studio by yamcs.

the class IndexBox method paintComponent.

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D) g;
    g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
    int panelWidth = getWidth();
    int panelHeight = getHeight();
    g2d.setPaint(new GradientPaint(0, topPanel.getHeight(), new Color(251, 251, 251), 0, panelHeight, Color.WHITE));
    g2d.fillRect(0, topPanel.getHeight(), panelWidth, panelHeight - topPanel.getHeight());
}
Also used : Color(java.awt.Color) GradientPaint(java.awt.GradientPaint) GradientPaint(java.awt.GradientPaint) Graphics2D(java.awt.Graphics2D)

Aggregations

GradientPaint (java.awt.GradientPaint)55 Graphics2D (java.awt.Graphics2D)37 Color (java.awt.Color)33 BasicStroke (java.awt.BasicStroke)14 Font (java.awt.Font)13 Paint (java.awt.Paint)12 Rectangle2D (java.awt.geom.Rectangle2D)11 FontMetrics (java.awt.FontMetrics)9 BufferedImage (java.awt.image.BufferedImage)9 Rectangle (java.awt.Rectangle)8 RadialGradientPaint (java.awt.RadialGradientPaint)6 Stroke (java.awt.Stroke)6 RoundRectangle2D (java.awt.geom.RoundRectangle2D)6 Point2D (java.awt.geom.Point2D)5 LinearGradientPaint (java.awt.LinearGradientPaint)4 Shape (java.awt.Shape)4 Ellipse2D (java.awt.geom.Ellipse2D)4 RectangularShape (java.awt.geom.RectangularShape)4 Graphics (java.awt.Graphics)3 MultipleGradientPaint (java.awt.MultipleGradientPaint)3