@@ -106,52 +106,63 @@ Elm.Native.Graphics.Input.make = function(elm) {
106106 btn.elm_hover = Render.render(model.hover);
107107 btn.elm_down = Render.render(model.down);
108108
109− function replace(node) {
110− if (node !== btn.firstChild) {
111− btn.replaceChild(node, btn.firstChild);
112− }
109+ btn.elm_up.style.display = 'block';
110+ btn.elm_hover.style.display = 'none';
111+ btn.elm_down.style.display = 'none';
112+
113+ btn.appendChild(btn.elm_up);
114+ btn.appendChild(btn.elm_hover);
115+ btn.appendChild(btn.elm_down);
116+
117+ function swap(visibleNode, hiddenNode1, hiddenNode2) {
118+ visibleNode.style.display = 'block';
119+ hiddenNode1.style.display = 'none';
120+ hiddenNode2.style.display = 'none';
113121 }
122+
114123 var overCount = 0;
115124 function over(e) {
116125 if (overCount++ > 0) return;
117− replace(btn.elm_hover);
126+ swap(btn.elm_hover, btn.elm_down, btn.elm_up);
118127 }
119128 function out(e) {
120129 if (btn.contains(e.toElement || e.relatedTarget)) return;
121130 overCount = 0;
122− replace(btn.elm_up);
131+ swap(btn.elm_up, btn.elm_down, btn.elm_hover);
123132 }
124133 function up() {
125− replace(btn.elm_hover);
134+ swap(btn.elm_hover, btn.elm_down, btn.elm_up);
126135 elm.notify(btn.elm_signal.id, btn.elm_value);
127136 }
128137 function down() {
129− replace(btn.elm_down);
138+ swap(btn.elm_down, btn.elm_hover, btn.elm_up);
130139 }
140+
131141 btn.addEventListener('mouseover', over);
132142 btn.addEventListener('mouseout' , out);
133143 btn.addEventListener('mousedown', down);
134144 btn.addEventListener('mouseup' , up);
135145
136− btn.appendChild(btn.elm_up);
137−
138146 return btn;
139147 }
140148
141149 function updateCustomButton(node, oldModel, newModel) {
142− var signal = newModel.signal;
143− node.elm_up.elm_signal = signal;
144− node.elm_hover.elm_signal = signal;
145− node.elm_down.elm_signal = signal;
146−
147− var value = newModel.value;
148− node.elm_up.elm_value = value;
149− node.elm_hover.elm_value = value;
150− node.elm_down.elm_value = value;
151−
152− Render.update(node.elm_up, oldModel.up, newModel.up)
153− Render.update(node.elm_hover, oldModel.hover, newModel.hover)
154− Render.update(node.elm_down, oldModel.down, newModel.down)
150+ node.elm_signal = newModel.signal;
151+ node.elm_value = newModel.value;
152+
153+ var kids = node.childNodes;
154+ var styleUp = kids[0].style.display;
155+ var styleHover = kids[1].style.display;
156+ var styleDown = kids[2].style.display;
157+
158+ Render.update(kids[0], oldModel.up, newModel.up);
159+ Render.update(kids[1], oldModel.hover, newModel.hover);
160+ Render.update(kids[2], oldModel.down, newModel.down);
161+
162+ var kids = node.childNodes;
163+ kids[0].style.display = styleUp;
164+ kids[1].style.display = styleHover;
165+ kids[2].style.display = styleDown;
155166 }
156167
157168 function max3(a,b,c) {