mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-12 16:06:15 +00:00
Fixed bug with dragging and volume slider pausing video as well
This commit is contained in:
parent
5238233779
commit
094906ef09
@ -107,7 +107,7 @@
|
|||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
<AuxValues>
|
<AuxValues>
|
||||||
<AuxValue name="JavaCodeGenerator_InitCodePost" type="java.lang.String" value="progressSlider.setUI(new CircularJSliderUI(progressSlider, new CircularJSliderConfiguration(new Dimension(18,18))));"/>
|
<AuxValue name="JavaCodeGenerator_InitCodePost" type="java.lang.String" value="progressSlider.setUI(new CircularJSliderUI(progressSlider, new Dimension(18,18)));"/>
|
||||||
</AuxValues>
|
</AuxValues>
|
||||||
</Component>
|
</Component>
|
||||||
<Component class="javax.swing.JLabel" name="progressLabel">
|
<Component class="javax.swing.JLabel" name="progressLabel">
|
||||||
@ -227,7 +227,7 @@
|
|||||||
<Property name="requestFocusEnabled" type="boolean" value="false"/>
|
<Property name="requestFocusEnabled" type="boolean" value="false"/>
|
||||||
</Properties>
|
</Properties>
|
||||||
<AuxValues>
|
<AuxValues>
|
||||||
<AuxValue name="JavaCodeGenerator_InitCodePost" type="java.lang.String" value="audioSlider.setUI(new CircularJSliderUI(audioSlider, new CircularJSliderConfiguration(new Dimension(15,15))));"/>
|
<AuxValue name="JavaCodeGenerator_InitCodePost" type="java.lang.String" value="audioSlider.setUI(new CircularJSliderUI(audioSlider, new Dimension(15,15)));"/>
|
||||||
</AuxValues>
|
</AuxValues>
|
||||||
<Constraints>
|
<Constraints>
|
||||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||||
|
@ -29,6 +29,7 @@ import java.awt.RenderingHints;
|
|||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.awt.event.MouseListener;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@ -260,6 +261,36 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
//Manage the video while the user is performing actions on the track.
|
||||||
|
progressSlider.addMouseListener(new MouseListener() {
|
||||||
|
private State previousState = State.NULL;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mousePressed(MouseEvent e) {
|
||||||
|
previousState = gstPlayBin.getState();
|
||||||
|
gstPlayBin.pause();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseReleased(MouseEvent e) {
|
||||||
|
if(previousState.equals(State.PLAYING)) {
|
||||||
|
gstPlayBin.play();
|
||||||
|
}
|
||||||
|
previousState = State.NULL;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void mouseClicked(MouseEvent e) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseEntered(MouseEvent e) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseExited(MouseEvent e) {
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
//Manage the audio level when the user is adjusting the volumn slider
|
//Manage the audio level when the user is adjusting the volumn slider
|
||||||
audioSlider.addChangeListener((ChangeEvent event) -> {
|
audioSlider.addChangeListener((ChangeEvent event) -> {
|
||||||
if (audioSlider.getValueIsAdjusting()) {
|
if (audioSlider.getValueIsAdjusting()) {
|
||||||
@ -589,63 +620,15 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents the default configuration for the circular JSliderUI.
|
|
||||||
*/
|
|
||||||
private class CircularJSliderConfiguration {
|
|
||||||
|
|
||||||
//Thumb configurations
|
|
||||||
private final Color thumbColor;
|
|
||||||
private final Dimension thumbDimension;
|
|
||||||
|
|
||||||
//Track configurations
|
|
||||||
//Progress bar can be bisected into a seen group
|
|
||||||
//and an unseen group.
|
|
||||||
private final Color unseen;
|
|
||||||
private final Color seen;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Default configuration
|
|
||||||
*
|
|
||||||
* JSlider is light blue RGB(0,130,255). Seen track is light blue
|
|
||||||
* RGB(0,130,255). Unseen track is light grey RGB(192, 192, 192).
|
|
||||||
*
|
|
||||||
* @param thumbDimension Size of the oval thumb.
|
|
||||||
*/
|
|
||||||
public CircularJSliderConfiguration(Dimension thumbDimension) {
|
|
||||||
Color lightBlue = new Color(0, 130, 255);
|
|
||||||
|
|
||||||
seen = lightBlue;
|
|
||||||
unseen = Color.LIGHT_GRAY;
|
|
||||||
|
|
||||||
thumbColor = lightBlue;
|
|
||||||
|
|
||||||
this.thumbDimension = new Dimension(thumbDimension);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Color getThumbColor() {
|
|
||||||
return thumbColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Color getUnseenTrackColor() {
|
|
||||||
return unseen;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Color getSeenTrackColor() {
|
|
||||||
return seen;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Dimension getThumbDimension() {
|
|
||||||
return new Dimension(thumbDimension);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Custom view for the JSlider.
|
* Custom view for the JSlider.
|
||||||
*/
|
*/
|
||||||
private class CircularJSliderUI extends BasicSliderUI {
|
private class CircularJSliderUI extends BasicSliderUI {
|
||||||
|
|
||||||
private final CircularJSliderConfiguration config;
|
private final Dimension thumbDimension;
|
||||||
|
private final Color thumbColor;
|
||||||
|
private final Color trackUnseen;
|
||||||
|
private final Color trackSeen;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a custom view for the JSlider. This view draws a blue oval
|
* Creates a custom view for the JSlider. This view draws a blue oval
|
||||||
@ -656,14 +639,20 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
* @param config Configuration object. Contains info about thumb
|
* @param config Configuration object. Contains info about thumb
|
||||||
* dimensions and colors.
|
* dimensions and colors.
|
||||||
*/
|
*/
|
||||||
public CircularJSliderUI(JSlider slider, CircularJSliderConfiguration config) {
|
public CircularJSliderUI(JSlider slider, Dimension thumbDimension) {
|
||||||
super(slider);
|
super(slider);
|
||||||
this.config = config;
|
this.thumbDimension = thumbDimension;
|
||||||
|
|
||||||
|
//Configure track and thumb colors.
|
||||||
|
Color lightBlue = new Color(0, 130, 255);
|
||||||
|
thumbColor = lightBlue;
|
||||||
|
trackSeen = lightBlue;
|
||||||
|
trackUnseen = Color.LIGHT_GRAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Dimension getThumbSize() {
|
protected Dimension getThumbSize() {
|
||||||
return config.getThumbDimension();
|
return new Dimension(thumbDimension);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -677,8 +666,7 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
|
|
||||||
//Change the thumb view from the rectangle
|
//Change the thumb view from the rectangle
|
||||||
//controller to an oval.
|
//controller to an oval.
|
||||||
graphic.setColor(config.getThumbColor());
|
graphic.setColor(thumbColor);
|
||||||
Dimension thumbDimension = config.getThumbDimension();
|
|
||||||
graphic.fillOval(thumb.x, thumb.y, thumbDimension.width, thumbDimension.height);
|
graphic.fillOval(thumb.x, thumb.y, thumbDimension.width, thumbDimension.height);
|
||||||
|
|
||||||
//Preserve the graphics original color
|
//Preserve the graphics original color
|
||||||
@ -701,12 +689,12 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
Color original = graphic.getColor();
|
Color original = graphic.getColor();
|
||||||
|
|
||||||
//Paint the seen side
|
//Paint the seen side
|
||||||
graphic.setColor(config.getSeenTrackColor());
|
graphic.setColor(trackSeen);
|
||||||
graphic.drawLine(track.x, track.y + track.height / 2,
|
graphic.drawLine(track.x, track.y + track.height / 2,
|
||||||
thumbX, thumbY + track.height / 2);
|
thumbX, thumbY + track.height / 2);
|
||||||
|
|
||||||
//Paint the unseen side
|
//Paint the unseen side
|
||||||
graphic.setColor(config.getUnseenTrackColor());
|
graphic.setColor(trackUnseen);
|
||||||
graphic.drawLine(thumbX, thumbY + track.height / 2,
|
graphic.drawLine(thumbX, thumbY + track.height / 2,
|
||||||
track.x + track.width, track.y + track.height / 2);
|
track.x + track.width, track.y + track.height / 2);
|
||||||
|
|
||||||
@ -716,7 +704,26 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected TrackListener createTrackListener(JSlider slider) {
|
protected TrackListener createTrackListener(JSlider slider) {
|
||||||
return new CustomTrackListener();
|
/**
|
||||||
|
* This track listener will force the thumb to be snapped to the mouse
|
||||||
|
* location. This makes grabbing and dragging the JSlider much easier.
|
||||||
|
* Using the default track listener, the user would have to click
|
||||||
|
* exactly on the slider thumb to drag it. Now the thumb positions
|
||||||
|
* itself under the mouse so that it can always be dragged.
|
||||||
|
*/
|
||||||
|
return new TrackListener() {
|
||||||
|
@Override
|
||||||
|
public void mousePressed(MouseEvent e) {
|
||||||
|
if (!slider.isEnabled() || !SwingUtilities.isLeftMouseButton(e)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//Snap the thumb to position of the mouse
|
||||||
|
scrollDueToClickInTrack(0);
|
||||||
|
|
||||||
|
//Handle the event as normal.
|
||||||
|
super.mousePressed(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -753,43 +760,6 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
|
|
||||||
super.update(graphic, component);
|
super.update(graphic, component);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* This track listener will force the thumb to be snapped to the mouse
|
|
||||||
* location. This makes grabbing and dragging the JSlider much easier.
|
|
||||||
* Using the default track listener, the user would have to click
|
|
||||||
* exactly on the slider thumb to drag it. Now the thumb positions
|
|
||||||
* itself under the mouse so that it can always be dragged.
|
|
||||||
*/
|
|
||||||
private class CustomTrackListener extends CircularJSliderUI.TrackListener {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mousePressed(MouseEvent e) {
|
|
||||||
if (!slider.isEnabled() || !SwingUtilities.isLeftMouseButton(e)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
//Snap the thumb to position of the mouse
|
|
||||||
scrollDueToClickInTrack(0);
|
|
||||||
|
|
||||||
//Pause the video for convenience
|
|
||||||
gstPlayBin.pause();
|
|
||||||
|
|
||||||
//Handle the event as normal.
|
|
||||||
super.mousePressed(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseReleased(MouseEvent e) {
|
|
||||||
if (!slider.isEnabled() || !SwingUtilities.isLeftMouseButton(e)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
super.mouseReleased(e);
|
|
||||||
|
|
||||||
//Unpause once the mouse has been released.
|
|
||||||
gstPlayBin.play();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -833,7 +803,7 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
progressSlider.setDoubleBuffered(true);
|
progressSlider.setDoubleBuffered(true);
|
||||||
progressSlider.setMinimumSize(new java.awt.Dimension(36, 21));
|
progressSlider.setMinimumSize(new java.awt.Dimension(36, 21));
|
||||||
progressSlider.setPreferredSize(new java.awt.Dimension(200, 21));
|
progressSlider.setPreferredSize(new java.awt.Dimension(200, 21));
|
||||||
progressSlider.setUI(new CircularJSliderUI(progressSlider, new CircularJSliderConfiguration(new Dimension(18,18))));
|
progressSlider.setUI(new CircularJSliderUI(progressSlider, new Dimension(18,18)));
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(progressLabel, org.openide.util.NbBundle.getMessage(MediaPlayerPanel.class, "MediaPlayerPanel.progressLabel.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(progressLabel, org.openide.util.NbBundle.getMessage(MediaPlayerPanel.class, "MediaPlayerPanel.progressLabel.text")); // NOI18N
|
||||||
|
|
||||||
@ -908,7 +878,7 @@ public class MediaPlayerPanel extends JPanel implements MediaFileViewer.MediaVie
|
|||||||
audioSlider.setMinimumSize(new java.awt.Dimension(200, 19));
|
audioSlider.setMinimumSize(new java.awt.Dimension(200, 19));
|
||||||
audioSlider.setPreferredSize(new java.awt.Dimension(200, 30));
|
audioSlider.setPreferredSize(new java.awt.Dimension(200, 30));
|
||||||
audioSlider.setRequestFocusEnabled(false);
|
audioSlider.setRequestFocusEnabled(false);
|
||||||
audioSlider.setUI(new CircularJSliderUI(audioSlider, new CircularJSliderConfiguration(new Dimension(15,15))));
|
audioSlider.setUI(new CircularJSliderUI(audioSlider, new Dimension(15,15)));
|
||||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||||
gridBagConstraints.gridx = 4;
|
gridBagConstraints.gridx = 4;
|
||||||
gridBagConstraints.gridy = 0;
|
gridBagConstraints.gridy = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user