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);
}
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);
}
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;
}
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());
}
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());
}
Aggregations