Skip to content

Commit f4fdd2b

Browse files
hansonrhansonr
authored andcommitted
press-and-hold for JSlider/JScrollBar/AWT Scrollbar
1 parent 6d62778 commit f4fdd2b

File tree

4 files changed

+91
-48
lines changed

4 files changed

+91
-48
lines changed

sources/net.sf.j2s.java.core/src/swingjs/jquery/JQueryUI.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
*/
1414
public class JQueryUI {
1515
public JQueryUI() {
16+
int j = 1;
1617
}
1718
static {
1819

19-
int i = 2;
2020
/**
2121
*
2222
*

sources/net.sf.j2s.java.core/src/swingjs/jquery/jquery-ui-j2sslider.js

Lines changed: 59 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* Includes: jquery.ui.slider.js
44
* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
55

6+
// BH 3/23/2019 adds timer for mouse down for track and end
67
// BH 2/10/2019 fix for AWT scrollbar differences from Swing
78
// BH 7/21/2018 fix for ScrollPane scroll bars not clicking on tracks
89
// note -- still no support for unit (deprecated anyway) or block increments
@@ -24,9 +25,41 @@
2425
// (how many times can you page 3/down to go through the whole range)
2526
var numPages = 5;
2627

27-
var closestHandle, index, allowed, offset;
28+
var closestHandle, index, allowed, offset, dir;
2829

29-
var clearEnds = function(e) {
30+
var actionTimer, actionTimer2;
31+
var actionDelay = 60, actionDelay0 = 200;
32+
var startAction = function(me, dir) {
33+
if (actionTimer)
34+
return;
35+
me.jslider.ui.scrollByUnit$I(dir)
36+
actionTimer = setTimeout(function(){
37+
actionTimer = setInterval(function() {
38+
me.jslider.ui.scrollByUnit$I(dir)
39+
}, actionDelay);
40+
}, actionDelay0);
41+
}
42+
43+
var startAction2 = function(me, dir, val) {
44+
me.jslider.ui.scrollDueToClickInTrack$I$I(dir, val);
45+
if (!me.isScrollBar)
46+
return;
47+
actionTimer2 =
48+
setTimeout(function(){
49+
actionTimer2 = setInterval(function() {
50+
me.jslider.ui.scrollDueToClickInTrack$I$I(dir);
51+
}, actionDelay);
52+
}, actionDelay0);
53+
}
54+
55+
var clearEnds = function(me) {
56+
var e = me.element;
57+
if (actionTimer)
58+
clearInterval(actionTimer);
59+
if (actionTimer2)
60+
clearInterval(actionTimer2);
61+
actionTimer = 0;
62+
actionTimer2 = 0;
3063
e.removeClass("ui-j2sslider-at-top");
3164
e.removeClass("ui-j2sslider-at-bottom");
3265
e.removeClass("ui-j2sslider-at-left");
@@ -38,7 +71,7 @@
3871
var OBJ_HANDLE = 2;
3972

4073
var doMouseCapture = function(me, event, obj, isEndCheck) {
41-
74+
4275
var that = me, o = me.options;
4376

4477
if (o.disabled || event.type == "mousemove" && event.buttons == 0) {
@@ -68,14 +101,13 @@
68101
if (allowed === false) {
69102
return false;
70103
}
104+
71105
me._mouseSliding = true;
72106

73107
me._handleIndex = index;
74108

75109
if (obj == OBJ_HANDLE)
76-
closestHandle.addClass("ui-state-active")
77-
.focus();
78-
110+
closestHandle.addClass("ui-state-active").focus();
79111

80112
offset = closestHandle.offset();
81113
var mouseOverHandle = (obj == OBJ_HANDLE) && $(event.target).parents()
@@ -105,23 +137,22 @@
105137
var pixmouse = getPixelMouse(me, position, false);
106138

107139
var isAtEnd = !mouseOverHandle && (!me.isScrollBar ? 0 :
108-
pixmouse < 5 ? -1 : pixmouse > getPixelTotal(me) - 5 ? 1 : 0);
140+
pixmouse < 5 ? -1 : pixmouse > length(me) + 5 ? 1 : 0);
141+
var dir = Math.signum(!isAtEnd ? val - me.jslider.getValue$() : isAtEnd);
109142
if (isAtEnd) {
110143
me.element.addClass(me.orientation === "horizontal" ?
111144
(isAtEnd == 1 ? "ui-j2sslider-at-right" : "ui-j2sslider-at-left")
112145
: (isAtEnd == 1 ? "ui-j2sslider-at-bottom" : "ui-j2sslider-at-top"));
146+
startAction(me, dir);
113147
} else {
114-
clearEnds(me.element);
115-
}
116-
if (isEndCheck) {
117-
return;
118-
}
119-
var dir = Math.signum(!isAtEnd ? val - me.jslider.getValue$() : isAtEnd);
120-
if (!me.handles.hasClass("ui-state-hover")) {
121-
if (isAtEnd) {
122-
me.jslider.ui.scrollByUnit$I(dir);
123-
} else if (obj != OBJ_HANDLE) {
124-
me.jslider.ui.scrollDueToClickInTrack$I$I(dir, val);
148+
clearEnds(me);
149+
if (isEndCheck) {
150+
return;
151+
}
152+
// if (!me.handles.hasClass("ui-state-hover")) {
153+
if (obj != OBJ_HANDLE) {
154+
startAction2(me, dir, val);
155+
// }
125156
}
126157
}
127158
me._animateOff = true;
@@ -161,8 +192,12 @@
161192
return p - (offsetHandle ? me.handleSize / 2 : 0);
162193
}
163194

195+
var length = function(me) {
196+
return (me.orientation == "horizontal" ? width(me) : height(me))
197+
}
198+
164199
var getPixelTotal = function(me) {
165-
return (me.orientation == "horizontal" ? width(me) : height(me)) - me.visibleAdjust || 100;
200+
return length(me) - me.visibleAdjust || 100;
166201
}
167202

168203
var postMouseEvent = function(me, xye, id) {
@@ -182,7 +217,8 @@
182217
}
183218

184219
var width = function(me) {
185-
return Math.max(0, me.element.width() || me.element.parent().width() - me.marginX || 0);
220+
var w = Math.max(0, me.element.width() || me.element.parent().width() - me.marginX || 0);
221+
return w;
186222
}
187223

188224
var height = function(me) {
@@ -293,6 +329,7 @@
293329
var fUpTrack = function(event, id) {
294330
//me._stop(event, me._handleIndex);
295331
me._change(event, me._handleIndex);
332+
clearEnds(me);
296333
};
297334

298335
var fDownWrap = function(event, id) {
@@ -325,7 +362,7 @@
325362
};
326363

327364
var fOutTrack = function(event, id) {
328-
clearEnds(me.element);
365+
clearEnds(me);
329366
};
330367

331368
var fMoveTrack = function(event, id) {
@@ -609,7 +646,7 @@
609646
if (f < 0.1)
610647
f = 0.1;
611648
this.handleFraction = f;
612-
var hw = (this.orientation === "horizontal" ? width(this) : height(this));
649+
var hw = length(this);
613650
if (this.orientation === "horizontal")
614651
$(this.handles[0]).width(this.handleSize = f * hw);
615652
else

sources/net.sf.j2s.java.core/src/swingjs/plaf/JSScrollBarUI.java

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import javax.swing.JScrollBar;
99
import javax.swing.event.ChangeEvent;
1010

11-
import swingjs.JSToolkit;
1211
import swingjs.api.js.DOMNode;
1312

1413
/**
@@ -46,26 +45,26 @@ public DOMNode updateDOMNode() {
4645
if (isAWT && !jc.isBackgroundSet()) {
4746
jc.setBackground(Color.LIGHT_GRAY);
4847
}
49-
return domNode;
50-
}
48+
// String bgcolor = null;
49+
// //if (myScrollPaneUI == null) {
50+
// bgcolor = toCSSString(getBackground());
51+
////
52+
//// } else {
53+
////
54+
//// }
55+
// DOMNode.setStyles(sliderTrack, "background", bgcolor);
56+
return domNode;
57+
}
5158

5259
@Override
5360
public void propertyChange(PropertyChangeEvent e) {
5461
super.propertyChange(e);
55-
if (debugging)
56-
System.out.println(id + " propertyChange " + dumpEvent(e));
5762
}
5863

5964
@Override
6065
public void stateChanged(ChangeEvent e) {
61-
// if (!isAdjusting) {
62-
// isAdjusting = true;
6366
super.stateChanged(e);
6467
setScrollBarExtentAndCSS();
65-
// isAdjusting = false;
66-
if (debugging)
67-
System.out.println(id + " stateChange " + dumpEvent(e));
68-
// }
6968
}
7069

7170
@Override
@@ -92,7 +91,7 @@ protected void setValueIsAdjusting(boolean b) {
9291
@Override
9392
public Dimension getPreferredSize(JComponent jc) {
9493
// thin because we are implementing jquery slider here
95-
int wh = (myScrollPaneUI == null ? 15 : myScrollPaneUI.scrollBarUIDisabled ? 0 : 15);
94+
int wh = (myScrollPaneUI == null ? 15 : myScrollPaneUI.scrollBarUIDisabled ? 0 : 13);
9695
// just used for width or height, but not both. I think....
9796
return new Dimension(wh, wh);
9897
}
@@ -117,11 +116,6 @@ void setScrollBarExtentAndCSS() {
117116
String left, top, thickness, transform, leftt;
118117
JScrollBar sb = (JScrollBar) jc;
119118
int extent = sb.getVisibleAmount();
120-
// int max = sb.getMaximum();
121-
// int min = sb.getMinimum();
122-
//
123-
// float f = (extent > 0 && min + extent <= max
124-
// ? extent * 1f / (max - min) : 0.1f);
125119
setSliderAttr("visibleAmount", extent);
126120
boolean isVertical = (orientation == "vertical");
127121
if (myScrollPaneUI == null) {
@@ -134,17 +128,19 @@ void setScrollBarExtentAndCSS() {
134128
transform = "translate(" + (isVertical ? "X":"Y") + ")";
135129
} else {
136130
left = "0px";
137-
leftt = "0px";
131+
// 2 here and 2 for top is to allow for scrollpane to have a
132+
// 1-pixel border. Better would be to reduce the viewport
133+
leftt = "0px";
138134
top = (isAWT ? "4px" : "0px");
139135
thickness = "12px";
140136
transform = null;
141137
}
142138
if (isVertical) {
143-
DOMNode.setStyles(sliderTrack, "transform", transform, "left", left, "width", thickness);//, "background", toCSSString(getBackground()));
144-
DOMNode.setStyles(sliderHandle, "box-sizing", "border-box", "left", leftt, "margin-bottom", "0px");
139+
DOMNode.setStyles(sliderTrack, "transform", transform, "left", left, "width", thickness);
140+
DOMNode.setStyles(sliderHandle, "border", "none", "left", leftt, "margin-bottom", "0px","width", thickness);
145141
} else {
146-
DOMNode.setStyles(sliderTrack, "top", top, "height", thickness);//, "background", toCSSString(getBackground()));
147-
DOMNode.setStyles(sliderHandle, "box-sizing", "border-box", "top", leftt, "margin-left", "0px");
142+
DOMNode.setStyles(sliderTrack, "top", top, "height", thickness);
143+
DOMNode.setStyles(sliderHandle, "border", "none", "top", leftt, "margin-left", "0px","height", thickness);
148144
}
149145
}
150146

sources/net.sf.j2s.java.core/src/swingjs/plaf/JSSliderUI.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,14 +125,22 @@ public DOMNode updateDOMNode() {
125125

126126
@Override
127127
public void setBackground(Color background) {
128-
if (awtPeerBG != null && !jc.isDisplayable() && !awtPeerBG.equals(background))
128+
if (awtPeerBG != null
129+
// not for scrollbar && !jc.isDisplayable()
130+
&& !awtPeerBG.equals(background))
129131
awtPeerBG = null;
130-
if (isScrollBar ? background != null : jc.isOpaque())
131-
DOMNode.setStyles(myScrollPaneUI == null && !paintTicks ? jqSlider : sliderTrack, "background-color", JSToolkit.getCSSColor(background));
132+
if (isScrollBar ? background != null : jc.isOpaque()) {
133+
DOMNode node = (myScrollPaneUI == null && !paintTicks ? jqSlider : sliderTrack);
134+
DOMNode.setStyles(node, "background-color", JSToolkit.getCSSColor(background));
135+
if (isScrollBar && Color.WHITE.equals(background))
136+
DOMNode.setStyles(sliderHandle, "background", "#ccc");
137+
138+
}
132139
if (paintTicks)
133140
DOMNode.setStyles(jqSlider, "background-color", "black");
134141
}
135142

143+
@Override
136144
protected void setBackgroundFor(DOMNode node, Color color) {
137145
setBackground(color);
138146
}
@@ -281,6 +289,8 @@ protected void setSliderAttr(String key, float val) {
281289

282290
public void setSlider() {
283291
setSliderAttr("min", min);
292+
// hack is for list to not show bottom line
293+
int max = this.max;//(myScrollPaneUI == null ? this.max : this.max - 1);
284294
setSliderAttr("max", max);
285295
setSliderAttr("value", val);
286296

0 commit comments

Comments
 (0)