Fixed rendering.
This commit is contained in:
parent
aaf319e9f4
commit
bbdb394cd2
|
@ -26,6 +26,7 @@ import java.awt.Image;
|
||||||
import java.awt.MouseInfo;
|
import java.awt.MouseInfo;
|
||||||
import java.awt.Point;
|
import java.awt.Point;
|
||||||
import java.awt.Rectangle;
|
import java.awt.Rectangle;
|
||||||
|
import java.awt.RenderingHints;
|
||||||
import java.awt.Stroke;
|
import java.awt.Stroke;
|
||||||
import java.awt.Toolkit;
|
import java.awt.Toolkit;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
|
@ -275,6 +276,79 @@ class NotifyPopup extends JFrame {
|
||||||
default:
|
default:
|
||||||
throw new RuntimeException("Unknown position. '" + position + "'");
|
throw new RuntimeException("Unknown position. '" + position + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// now we setup the rendering of the image
|
||||||
|
renderBackgroundInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
private
|
||||||
|
void renderBackgroundInfo() {
|
||||||
|
cachedImage = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB);
|
||||||
|
Graphics2D g2 = cachedImage.createGraphics();
|
||||||
|
g2.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING,
|
||||||
|
RenderingHints.VALUE_RENDER_QUALITY));
|
||||||
|
|
||||||
|
try {
|
||||||
|
g2.setColor(panel_BG);
|
||||||
|
g2.fillRect(0, 0, WIDTH, HEIGHT);
|
||||||
|
|
||||||
|
// Draw the title text
|
||||||
|
Font titleTextFont = SwingUtil.parseFont(TITLE_TEXT_FONT);
|
||||||
|
g2.setColor(titleText_FG);
|
||||||
|
g2.setFont(titleTextFont);
|
||||||
|
g2.drawString(notification.title, 5, 20);
|
||||||
|
|
||||||
|
|
||||||
|
int posX = 10;
|
||||||
|
int textLengthLimit = 108;
|
||||||
|
|
||||||
|
// ICON
|
||||||
|
if (imageIcon != null) {
|
||||||
|
textLengthLimit = 88;
|
||||||
|
posX = 60;
|
||||||
|
// Draw the image
|
||||||
|
imageIcon.paintIcon(this, g2, 5, 30);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw the main text
|
||||||
|
Font mainTextFont = SwingUtil.parseFont(MAIN_TEXT_FONT);
|
||||||
|
String notText = notification.text;
|
||||||
|
int length = notText.length();
|
||||||
|
StringBuilder text = new StringBuilder(length);
|
||||||
|
|
||||||
|
// are we "html" already? just check for the starting tag and strip off END html tag
|
||||||
|
if (length >= 13 && notText.regionMatches(true, length-7, "</html>", 0, 7)) {
|
||||||
|
text.append(notText);
|
||||||
|
text.delete(text.length() - 7, text.length());
|
||||||
|
|
||||||
|
length -= 7;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
text.append("<html>");
|
||||||
|
text.append(notText);
|
||||||
|
}
|
||||||
|
|
||||||
|
// make sure the text is the correct length
|
||||||
|
if (length > textLengthLimit) {
|
||||||
|
text.delete(6 + textLengthLimit, text.length());
|
||||||
|
text.append("...");
|
||||||
|
}
|
||||||
|
text.append("</html>");
|
||||||
|
|
||||||
|
JLabel mainTextLabel = new JLabel();
|
||||||
|
mainTextLabel.setForeground(mainText_FG);
|
||||||
|
mainTextLabel.setFont(mainTextFont);
|
||||||
|
mainTextLabel.setText(text.toString());
|
||||||
|
|
||||||
|
int posY = -8;
|
||||||
|
mainTextLabel.setBounds(0, 0, WIDTH - posX - 2, HEIGHT);
|
||||||
|
|
||||||
|
g2.translate(posX, posY);
|
||||||
|
mainTextLabel.paint(g2);
|
||||||
|
g2.translate(-posX, -posY);
|
||||||
|
} finally {
|
||||||
|
g2.dispose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -287,106 +361,36 @@ class NotifyPopup extends JFrame {
|
||||||
if (width <= 0 || height <= 0) {
|
if (width <= 0 || height <= 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (cachedImage == null) {
|
|
||||||
cachedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
|
|
||||||
|
|
||||||
Graphics g2 = cachedImage.createGraphics();
|
// use our cached image, so we don't have to re-render text/background/etc
|
||||||
try {
|
g.drawImage(cachedImage, 0, 0, null);
|
||||||
g2.setColor(panel_BG);
|
|
||||||
g2.fillRect(0, 0, WIDTH, HEIGHT);
|
|
||||||
|
|
||||||
// Draw the title text
|
// the progress bar and close button are the only things that can change, so we always draw them
|
||||||
Font titleTextFont = SwingUtil.parseFont(TITLE_TEXT_FONT);
|
Graphics2D g2 = (Graphics2D) g.create();
|
||||||
g2.setColor(titleText_FG);
|
try {
|
||||||
g2.setFont(titleTextFont);
|
if (showCloseButton) {
|
||||||
g2.drawString(notification.title, 5, 20);
|
Graphics2D g3 = (Graphics2D) g.create();
|
||||||
|
|
||||||
|
g3.setColor(panel_BG);
|
||||||
|
g3.setStroke(stroke);
|
||||||
|
|
||||||
|
final Point p = getMousePosition();
|
||||||
int posX = 10;
|
// reasonable position for detecting mouse over
|
||||||
int textLengthLimit = 108;
|
if (p != null && p.getX() >= 280 && p.getY() <= 20) {
|
||||||
|
g3.setColor(Color.RED);
|
||||||
// ICON
|
} else {
|
||||||
if (imageIcon != null) {
|
g3.setColor(closeX_FG);
|
||||||
textLengthLimit = 88;
|
|
||||||
posX = 60;
|
|
||||||
// Draw the image
|
|
||||||
imageIcon.paintIcon(this, g2, 5, 30);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw the main text
|
// draw the X
|
||||||
Font mainTextFont = SwingUtil.parseFont(MAIN_TEXT_FONT);
|
g3.drawLine(X_1, Y_1, X_2, Y_2);
|
||||||
String notText = notification.text;
|
g3.drawLine(X_2, Y_1, X_1, Y_2);
|
||||||
int length = notText.length();
|
|
||||||
StringBuilder text = new StringBuilder(length);
|
|
||||||
|
|
||||||
// are we "html" already? just check for the starting tag and strip off END html tag
|
|
||||||
if (length >= 13 && notText.regionMatches(true, length-7, "</html>", 0, 7)) {
|
|
||||||
text.append(notText);
|
|
||||||
text.delete(text.length() - 7, text.length());
|
|
||||||
|
|
||||||
length -= 7;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
text.append("<html>");
|
|
||||||
text.append(notText);
|
|
||||||
}
|
|
||||||
|
|
||||||
// make sure the text is the correct length
|
|
||||||
if (length > textLengthLimit) {
|
|
||||||
text.delete(6 + textLengthLimit, text.length());
|
|
||||||
text.append("...");
|
|
||||||
}
|
|
||||||
text.append("</html>");
|
|
||||||
|
|
||||||
JLabel mainTextLabel = new JLabel();
|
|
||||||
mainTextLabel.setForeground(mainText_FG);
|
|
||||||
mainTextLabel.setFont(mainTextFont);
|
|
||||||
mainTextLabel.setText(text.toString());
|
|
||||||
|
|
||||||
int posY = -8;
|
|
||||||
mainTextLabel.setBounds(0, 0, WIDTH - posX - 2, HEIGHT);
|
|
||||||
|
|
||||||
g2.translate(posX, posY);
|
|
||||||
mainTextLabel.paint(g2);
|
|
||||||
g2.translate(-posX, -posY);
|
|
||||||
} finally {
|
|
||||||
g2.dispose();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g.drawImage(cachedImage, 0, 0, null);
|
g2.setColor(progress_FG);
|
||||||
}
|
g2.fillRect(0, PROGRESS_HEIGHT, progress, 1);
|
||||||
else {
|
} finally {
|
||||||
// use our cached image, so we don't have to re-render text
|
g2.dispose();
|
||||||
g.drawImage(cachedImage, getX(), getY(), null);
|
|
||||||
|
|
||||||
// the progress bar and close button are the only things that can change, so we always draw them
|
|
||||||
Graphics2D g2 = (Graphics2D) g.create();
|
|
||||||
try {
|
|
||||||
if (showCloseButton) {
|
|
||||||
Graphics2D g3 = (Graphics2D) g.create();
|
|
||||||
|
|
||||||
g3.setColor(panel_BG);
|
|
||||||
g3.setStroke(stroke);
|
|
||||||
|
|
||||||
final Point p = getMousePosition();
|
|
||||||
// reasonable position for detecting mouse over
|
|
||||||
if (p != null && p.getX() >= 280 && p.getY() <= 20) {
|
|
||||||
g3.setColor(Color.RED);
|
|
||||||
} else {
|
|
||||||
g3.setColor(closeX_FG);
|
|
||||||
}
|
|
||||||
|
|
||||||
// draw the X
|
|
||||||
g3.drawLine(X_1, Y_1, X_2, Y_2);
|
|
||||||
g3.drawLine(X_2, Y_1, X_1, Y_2);
|
|
||||||
}
|
|
||||||
|
|
||||||
g2.setColor(progress_FG);
|
|
||||||
g2.fillRect(0, PROGRESS_HEIGHT, progress, 1);
|
|
||||||
} finally {
|
|
||||||
g2.dispose();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user