Skip to content

Commit

Permalink
Added opacity change slider. Fixed issue with capture-rect window being
Browse files Browse the repository at this point in the history
visible on screenshots on OS X.
  • Loading branch information
mvmn committed Sep 17, 2013
1 parent 4bfc79b commit 82a6ca3
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 11 deletions.
23 changes: 16 additions & 7 deletions src/x/mvmn/jscrcap/gui/swing/CaptureRectFrame.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,12 @@ public class CaptureRectFrame extends JFrame {
private JPanel moveMePanel = new JPanel();
private JPanel resizeMePanel = new JPanel();
private JLabel inspectorLabel = new JLabel();
private volatile Boolean opacityIsSupported = null;

public CaptureRectFrame() {
super("Capturing rectangle");
this.setUndecorated(true);
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd = ge.getDefaultScreenDevice();
this.getContentPane().setLayout(new BorderLayout());
moveMePanel.add(new JLabel("Drag here to move"));
this.getContentPane().add(moveMePanel, BorderLayout.CENTER);
Expand Down Expand Up @@ -111,12 +110,22 @@ public void mouseDragged(MouseEvent e) {

this.setSize(400, 300);
SwingHelper.moveToScreenCenter(this);
try {
if (gd.isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.TRANSLUCENT)) {
this.setOpacity(0.55f);
setOpacity(0.55f);
}

public void setOpacity(float value) {
if (!(opacityIsSupported != null && !opacityIsSupported.booleanValue())) {
opacityIsSupported = false;
try {
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd = ge.getDefaultScreenDevice();
if (gd.isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.TRANSLUCENT)) {
super.setOpacity(value);
opacityIsSupported = true;
}
} catch (Throwable e) {
e.printStackTrace();
}
} catch (Throwable e) {
e.printStackTrace();
}
}

Expand Down
23 changes: 19 additions & 4 deletions src/x/mvmn/jscrcap/gui/swing/ControlWindow.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,11 @@
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSlider;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import x.mvmn.jscrcap.model.CapturedImage;
import x.mvmn.jscrcap.model.CapturesTableModel;
Expand All @@ -40,6 +43,7 @@ public class ControlWindow extends JFrame implements WindowListener {
private final JLabel preview = new JLabel();
private final JButton btnCaptureOne = new JButton("Capture image");
private final JButton btnSaveOne = new JButton("Save image");
private final JSlider sliderOpacity = new JSlider(JSlider.HORIZONTAL, 0, 100, 55);

private volatile CapturedImage currentlyPreviewed = null;

Expand Down Expand Up @@ -92,6 +96,7 @@ public void actionPerformed(ActionEvent e) {
}
}
Rectangle captureRect = SwingHelper.getComponentRect(captureRectFrame);
captureRectFrame.setSize(0, 0);
captureRectFrame.setVisible(false);
{
// Same workaround again.
Expand All @@ -108,21 +113,31 @@ public void actionPerformed(ActionEvent e) {
}
BufferedImage screenshot = SwingHelper.getRobot().createScreenCapture(captureRect);
capturesTableModel.addImage(new CapturedImage(screenshot));
captureRectFrame.setSize(captureRect.width, captureRect.height);
captureRectFrame.setVisible(captureRectVisible);
}
});

sliderOpacity.addChangeListener(new ChangeListener() {

@Override
public void stateChanged(ChangeEvent e) {
ControlWindow.this.captureRectFrame.setOpacity(((float) ControlWindow.this.sliderOpacity.getValue()) / 100);
}
});

JPanel buttonsForCapturingPanel = new JPanel(new BorderLayout());
buttonsForCapturingPanel.add(btnCaptureOne, BorderLayout.EAST);

JPanel buttonsForCaptureRectControlPanel = new JPanel(new BorderLayout());
buttonsForCaptureRectControlPanel.add(btnToggleViewCaptureRect, BorderLayout.CENTER);
buttonsForCaptureRectControlPanel.add(btnResetCaptureRect, BorderLayout.EAST);
JPanel controlsForCaptureRectControlPanel = new JPanel(new BorderLayout());
controlsForCaptureRectControlPanel.add(btnToggleViewCaptureRect, BorderLayout.WEST);
controlsForCaptureRectControlPanel.add(sliderOpacity, BorderLayout.CENTER);
controlsForCaptureRectControlPanel.add(btnResetCaptureRect, BorderLayout.EAST);

Container contentPane = this.getContentPane();
contentPane.setLayout(new BorderLayout());
contentPane.add(buttonsForCapturingPanel, BorderLayout.NORTH);
contentPane.add(buttonsForCaptureRectControlPanel, BorderLayout.SOUTH);
contentPane.add(controlsForCaptureRectControlPanel, BorderLayout.SOUTH);

JPanel previewPanel = new JPanel(new BorderLayout());
previewPanel.add(btnSaveOne, BorderLayout.NORTH);
Expand Down

0 comments on commit 82a6ca3

Please sign in to comment.