diff --git a/launcher-fancy/src/main/java/com/skcraft/launcher/FancyBackgroundPanel.java b/launcher-fancy/src/main/java/com/skcraft/launcher/FancyBackgroundPanel.java new file mode 100644 index 0000000..19ee6fa --- /dev/null +++ b/launcher-fancy/src/main/java/com/skcraft/launcher/FancyBackgroundPanel.java @@ -0,0 +1,34 @@ +/* + * SKCraft Launcher + * Copyright (C) 2010-2014 Albert Pham and contributors + * Please see LICENSE.txt for license information. + */ + +package com.skcraft.launcher; + +import javax.imageio.ImageIO; +import javax.swing.*; +import java.awt.*; +import java.io.IOException; + +public class FancyBackgroundPanel extends JPanel { + + private Image background; + + public FancyBackgroundPanel() { + try { + background = ImageIO.read(FancyBackgroundPanel.class.getResourceAsStream("launcher_bg.jpg")); + } catch (IOException e) { + background = null; + } + } + + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + if (background != null) { + g.drawImage(background, 0, 0, null); + } + } + +} diff --git a/launcher-fancy/src/main/java/com/skcraft/launcher/FancyLauncherFrame.java b/launcher-fancy/src/main/java/com/skcraft/launcher/FancyLauncherFrame.java index 5706e3c..0d413dd 100644 --- a/launcher-fancy/src/main/java/com/skcraft/launcher/FancyLauncherFrame.java +++ b/launcher-fancy/src/main/java/com/skcraft/launcher/FancyLauncherFrame.java @@ -7,8 +7,12 @@ package com.skcraft.launcher; import com.skcraft.launcher.dialog.LauncherFrame; +import com.skcraft.launcher.swing.SwingHelper; +import com.skcraft.launcher.swing.WebpagePanel; import lombok.NonNull; +import javax.swing.*; + public class FancyLauncherFrame extends LauncherFrame { /** @@ -19,8 +23,24 @@ public class FancyLauncherFrame extends LauncherFrame { public FancyLauncherFrame(@NonNull Launcher launcher) { super(launcher); - setSize(900, 650); + setSize(800, 500); setLocationRelativeTo(null); + + SwingHelper.removeOpaqueness(getInstancesTable()); + SwingHelper.removeOpaqueness(getInstanceScroll()); + getInstanceScroll().setBorder(BorderFactory.createEmptyBorder()); + } + + @Override + protected JPanel createContainerPanel() { + return new FancyBackgroundPanel(); + } + + @Override + protected WebpagePanel createNewsPanel() { + WebpagePanel panel = super.createNewsPanel(); + panel.setBrowserBorder(BorderFactory.createEmptyBorder()); + return panel; } } diff --git a/launcher-fancy/src/main/resources/com/skcraft/launcher/launcher_bg.jpg b/launcher-fancy/src/main/resources/com/skcraft/launcher/launcher_bg.jpg new file mode 100644 index 0000000..25cf947 Binary files /dev/null and b/launcher-fancy/src/main/resources/com/skcraft/launcher/launcher_bg.jpg differ diff --git a/launcher/src/main/java/com/skcraft/launcher/dialog/LauncherFrame.java b/launcher/src/main/java/com/skcraft/launcher/dialog/LauncherFrame.java index 53c84c2..ea75b1c 100644 --- a/launcher/src/main/java/com/skcraft/launcher/dialog/LauncherFrame.java +++ b/launcher/src/main/java/com/skcraft/launcher/dialog/LauncherFrame.java @@ -14,6 +14,7 @@ import com.skcraft.launcher.launch.LaunchListener; import com.skcraft.launcher.swing.*; import com.skcraft.launcher.util.SharedLocale; import com.skcraft.launcher.util.SwingExecutor; +import lombok.Getter; import lombok.NonNull; import lombok.extern.java.Log; import net.miginfocom.swing.MigLayout; @@ -40,8 +41,10 @@ public class LauncherFrame extends JFrame { private final Launcher launcher; + @Getter private final InstanceTable instancesTable = new InstanceTable(); private final InstanceTableModel instancesModel; + @Getter private final JScrollPane instanceScroll = new JScrollPane(instancesTable); private WebpagePanel webView; private JSplitPane splitPane; @@ -79,9 +82,10 @@ public class LauncherFrame extends JFrame { } private void initComponents() { - setLayout(new MigLayout("fill, insets dialog", "[][]push[][]", "[grow][]")); + JPanel container = createContainerPanel(); + container.setLayout(new MigLayout("fill, insets dialog", "[][]push[][]", "[grow][]")); - webView = WebpagePanel.forURL(launcher.getNewsURL(), false); + webView = createNewsPanel(); splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, instanceScroll, webView); selfUpdateButton.setVisible(launcher.getUpdateManager().getPendingUpdate()); @@ -101,13 +105,15 @@ public class LauncherFrame extends JFrame { splitPane.setDividerLocation(200); splitPane.setDividerSize(4); splitPane.setOpaque(false); - add(splitPane, "grow, wrap, span 5, gapbottom unrel"); + container.add(splitPane, "grow, wrap, span 5, gapbottom unrel"); SwingHelper.flattenJSplitPane(splitPane); - add(refreshButton); - add(updateCheck); - add(selfUpdateButton); - add(optionsButton); - add(launchButton); + container.add(refreshButton); + container.add(updateCheck); + container.add(selfUpdateButton); + container.add(optionsButton); + container.add(launchButton); + + add(container, BorderLayout.CENTER); instancesModel.addTableModelListener(new TableModelListener() { @Override @@ -163,6 +169,19 @@ public class LauncherFrame extends JFrame { }); } + protected JPanel createContainerPanel() { + return new JPanel(); + } + + /** + * Return the news panel. + * + * @return the news panel + */ + protected WebpagePanel createNewsPanel() { + return WebpagePanel.forURL(launcher.getNewsURL(), false); + } + /** * Popup the menu for the instances. * diff --git a/launcher/src/main/java/com/skcraft/launcher/swing/WebpagePanel.java b/launcher/src/main/java/com/skcraft/launcher/swing/WebpagePanel.java index 25b5d2f..0ddfb51 100644 --- a/launcher/src/main/java/com/skcraft/launcher/swing/WebpagePanel.java +++ b/launcher/src/main/java/com/skcraft/launcher/swing/WebpagePanel.java @@ -10,6 +10,7 @@ import com.skcraft.launcher.LauncherUtils; import lombok.extern.java.Log; import javax.swing.*; +import javax.swing.border.Border; import javax.swing.border.CompoundBorder; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; @@ -35,8 +36,10 @@ public final class WebpagePanel extends JPanel { private URL url; private boolean activated; private JEditorPane documentView; + private JScrollPane documentScroll; private JProgressBar progressBar; private Thread thread; + private Border browserBorder; public static WebpagePanel forURL(URL url, boolean lazy) { return new WebpagePanel(url, lazy); @@ -80,6 +83,19 @@ public final class WebpagePanel extends JPanel { } } + public Border getBrowserBorder() { + return browserBorder; + } + + public void setBrowserBorder(Border browserBorder) { + synchronized (this) { + this.browserBorder = browserBorder; + if (documentScroll != null) { + documentScroll.setBorder(browserBorder); + } + } + } + private void setDocument() { activated = true; @@ -100,15 +116,24 @@ public final class WebpagePanel extends JPanel { } } }); - - JScrollPane scrollPane = new JScrollPane(documentView); - scrollPane.setOpaque(false); - panel.add(scrollPane, new Integer(1)); - scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); + + documentScroll = new JScrollPane(documentView); + documentScroll.setOpaque(false); + panel.add(documentScroll, new Integer(1)); + documentScroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); + synchronized (this) { + if (browserBorder != null) { + documentScroll.setBorder(browserBorder); + } + } progressBar = new JProgressBar(); progressBar.setIndeterminate(true); panel.add(progressBar, new Integer(2)); + + SwingHelper.removeOpaqueness(this); + SwingHelper.removeOpaqueness(documentView); + SwingHelper.removeOpaqueness(documentScroll); add(panel, BorderLayout.CENTER); } diff --git a/readme/launcher_skinned.png b/readme/launcher_skinned.png index c147b9a..df9128e 100644 Binary files a/readme/launcher_skinned.png and b/readme/launcher_skinned.png differ