on master help sign in
Fix behavior of customButton to avoid flicker.
commit545be516788ded1fe325ef3b7c300739af0d7c02 authorevancz <info@elm-lang.org> dateSun 24 Mar 2013, 22:23 (14 years ago) parent24c90b3
2 files changed+20−8
libraries/Native/Graphics/Input.js+19−7 runtime/Render/Element.js+1−1
libraries/Native/Graphics/Input.js+19−7
@@ -58,15 +58,27 @@ Elm.Native.Graphics.Input = function(elm) {
5858 btn.elmHover = Render.render(model.hover);
5959 btn.elmDown = Render.render(model.down);
6060
61− function replace(node) { return function() {
61+ function replace(node) {
6262 if (node !== btn.firstChild) btn.replaceChild(node, btn.firstChild);
63− };
6463 }
65− var hover = replace(btn.elmHover);
66− function up() { hover(); elm.notify(events.id, btn.elmEvent); }
67− btn.addEventListener('mouseover', hover);
68− btn.addEventListener('mouseout' , replace(btn.elmUp));
69− btn.addEventListener('mousedown', replace(btn.elmDown));
64+ var overCount = 0;
65+ function over(e) {
66+ if (overCount++ > 0) return;
67+ replace(btn.elmHover);
68+ }
69+ function out(e) {
70+ if (btn.contains(e.toElement || e.relatedTarget)) return;
71+ overCount = 0;
72+ replace(btn.elmUp);
73+ }
74+ function up() {
75+ replace(btn.elmHover);
76+ elm.notify(events.id, btn.elmEvent);
77+ }
78+ function down() { replace(btn.elmDown); }
79+ btn.addEventListener('mouseover', over);
80+ btn.addEventListener('mouseout' , out);
81+ btn.addEventListener('mousedown', down);
7082 btn.addEventListener('mouseup' , up);
7183
7284 btn.appendChild(btn.elmUp);
runtime/Render/Element.js+1−1
@@ -5,7 +5,7 @@ ElmRuntime.Render.Element = function() {
55var Utils = ElmRuntime.use(ElmRuntime.Render.Utils);
66var newElement = Utils.newElement, addTo = Utils.addTo, extract = Utils.extract,
77 addTransform = Utils.addTransform, removeTransform = Utils.removeTransform,
8− fromList = Utils.fromList;
8+ fromList = Utils.fromList, eq = Utils.eq;
99
1010function setProps(props, e) {
1111 e.style.width = (props.width |0) + 'px';