You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.7 KiB
85 lines
2.7 KiB
package com.fr.design.mainframe.theme; |
|
|
|
import com.fr.base.chart.chartdata.CallbackEvent; |
|
import com.fr.base.theme.TemplateTheme; |
|
import com.fr.base.theme.settings.ThemeThumbnail; |
|
import com.fr.design.mainframe.theme.preview.ThemePreviewed; |
|
import com.fr.log.FineLoggerFactory; |
|
|
|
import javax.swing.JPanel; |
|
import java.awt.Color; |
|
import java.awt.Graphics; |
|
import java.awt.Graphics2D; |
|
import java.awt.Image; |
|
import java.awt.RenderingHints; |
|
import java.awt.Transparency; |
|
import java.awt.image.BufferedImage; |
|
|
|
/** |
|
* @author Starryi |
|
* @version 1.0 |
|
* Created by Starryi on 2021/8/13 |
|
*/ |
|
public abstract class TemplateThemePreviewPane<T extends TemplateTheme> extends JPanel implements CallbackEvent, ThemePreviewed<T> { |
|
private JPanel parent; |
|
public static final int PREVIEW_WIDTH = 627; |
|
public static final int PREVIEW_HEIGHT = 532; |
|
|
|
public void setParent(JPanel parent) { |
|
this.parent = parent; |
|
} |
|
|
|
@Override |
|
public void callback() { |
|
if (parent != null) { |
|
parent.repaint(); |
|
} else { |
|
this.repaint(); |
|
} |
|
} |
|
|
|
protected Image createThumbnailImage() { |
|
BufferedImage image = null; |
|
|
|
int thumbnailWidth = ThemeThumbnail.WIDTH; |
|
int thumbnailHeight = ThemeThumbnail.HEIGHT; |
|
|
|
int width = getWidth(); |
|
int height = getHeight(); |
|
|
|
try { |
|
image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); |
|
Graphics2D g2d = image.createGraphics(); |
|
// 创建一个支持透明背景的buffer image |
|
image = g2d.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT); |
|
g2d.dispose(); |
|
g2d = image.createGraphics(); |
|
|
|
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON); |
|
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); |
|
g2d.clipRect(0, 0, width, height); |
|
|
|
paint(g2d); |
|
|
|
} catch (Exception e) { |
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
|
} |
|
|
|
if (image != null) { |
|
return image.getScaledInstance(thumbnailWidth, thumbnailHeight, BufferedImage.SCALE_SMOOTH); |
|
} |
|
|
|
return null; |
|
} |
|
|
|
@Override |
|
public void paintComponent(Graphics g) { |
|
g.clearRect(0, 0, PREVIEW_WIDTH, PREVIEW_HEIGHT); |
|
// 添加个默认白色,否则因为上面的clearRect导致无背景时会出现黑色 |
|
g.setColor(Color.WHITE); |
|
g.fillRect(0, 0, PREVIEW_WIDTH, PREVIEW_HEIGHT); |
|
paintBackground((Graphics2D) g); |
|
} |
|
|
|
protected abstract void paintBackground(Graphics2D g); |
|
} |