X-Git-Url: http://git.onelab.eu/?p=www-register-wizard.git;a=blobdiff_plain;f=rounded.js;h=91ba02cee8563d37b5675c3223f9afb41af8406d;hp=546502af6be017928df9cdb8864028f9aec33264;hb=4afb2fe256f094a1caf6bff14f51c6a88938cc9f;hpb=6907967d36358724c676a7998f55fc34e40c3b21 diff --git a/rounded.js b/rounded.js index 546502a..91ba02c 100644 --- a/rounded.js +++ b/rounded.js @@ -1,187 +1,187 @@ -// Contributors -// Ilkka Huotari at http://www.editsite.net -// Mathieu 'p01' HENRI at http://www.p01.org/ -// http://seky.nahory.net/2005/04/rounded-corners/ -// Steven Wittens at http://www.acko.net/anti-aliased-nifty-corners -// Original Nifty Corners by Alessandro Fulciniti at http://pro.html.it/esempio/nifty/ -function NiftyCheck() { - if(!document.getElementById || !document.createElement) { - return false; - } - var b = navigator.userAgent.toLowerCase(); - if (b.indexOf("msie 5") > 0 && b.indexOf("opera") == -1) { - return false; - } - return true; -} - -function Rounded(className, sizex, sizey, sizex_b, sizey_b) { - var bk; - if (!NiftyCheck()) return; - if (typeof(sizex_b) == 'undefined') - sizex_b = sizex; - if (typeof(sizey_b) == 'undefined') - sizey_b = sizey; - var v = getElements(className); - var l = v.length; - for (var i = 0; i < l; i++) { - color = get_current_style(v[i],"background-color","transparent"); - bk = get_current_style(v[i].parentNode,"background-color","transparent"); - AddRounded(v[i], bk, color, sizex, sizey, true); - AddRounded(v[i], bk, color, sizex_b, sizey_b, false); - } -} - -Math.sqr = function (x) { - return x*x; -}; - -function Blend(a, b, alpha) { - - var ca = Array( - parseInt('0x' + a.substring(1, 3)), - parseInt('0x' + a.substring(3, 5)), - parseInt('0x' + a.substring(5, 7)) - ); - var cb = Array( - parseInt('0x' + b.substring(1, 3)), - parseInt('0x' + b.substring(3, 5)), - parseInt('0x' + b.substring(5, 7)) - ); - return '#' + ('0'+Math.round(ca[0] + (cb[0] - ca[0])*alpha).toString(16)).slice(-2).toString(16) - + ('0'+Math.round(ca[1] + (cb[1] - ca[1])*alpha).toString(16)).slice(-2).toString(16) - + ('0'+Math.round(ca[2] + (cb[2] - ca[2])*alpha).toString(16)).slice(-2).toString(16); - - return '#' + ('0'+Math.round(ca[0] + (cb[0] - ca[0])*alpha).toString(16)).slice(-2).toString(16) - + ('0'+Math.round(ca[1] + (cb[1] - ca[1])*alpha).toString(16)).slice(-2).toString(16) - + ('0'+Math.round(ca[2] + (cb[2] - ca[2])*alpha).toString(16)).slice(-2).toString(16); -} - -function AddRounded(el, bk, color, sizex, sizey, top) { - if (!sizex && !sizey) - return; - var i, j; - var d = document.createElement("div"); - d.style.backgroundColor = bk; - var lastarc = 0; - for (i = 1; i <= sizey; i++) { - var coverage, arc2, arc3; - // Find intersection of arc with bottom of pixel row - arc = Math.sqrt(1.0 - Math.sqr(1.0 - i / sizey)) * sizex; - // Calculate how many pixels are bg, fg and blended. - var n_bg = sizex - Math.ceil(arc); - var n_fg = Math.floor(lastarc); - var n_aa = sizex - n_bg - n_fg; - // Create pixel row wrapper - var x = document.createElement("div"); - var y = d; - x.style.margin = "0px " + n_bg + "px"; - x.style.height='1px'; - x.style.overflow='hidden'; - // Make a wrapper per anti-aliased pixel (at least one) - for (j = 1; j <= n_aa; j++) { - // Calculate coverage per pixel - // (approximates circle by a line within the pixel) - if (j == 1) { - if (j == n_aa) { - // Single pixel - coverage = ((arc + lastarc) * .5) - n_fg; - } - else { - // First in a run - arc2 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j + 1) / sizex)) * sizey; - coverage = (arc2 - (sizey - i)) * (arc - n_fg - n_aa + 1) * .5; - // Coverage is incorrect. Why? - coverage = 0; - } - } - else if (j == n_aa) { - // Last in a run - arc2 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j + 1) / sizex)) * sizey; - coverage = 1.0 - (1.0 - (arc2 - (sizey - i))) * (1.0 - (lastarc - n_fg)) * .5; - } - else { - // Middle of a run - arc3 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j) / sizex)) * sizey; - arc2 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j + 1) / sizex)) * sizey; - coverage = ((arc2 + arc3) * .5) - (sizey - i); - } - - x.style.backgroundColor = Blend(bk, color, coverage); - if (top) - y.appendChild(x); - else - y.insertBefore(x, y.firstChild); - y = x; - var x = document.createElement("div"); - x.style.height='1px'; - x.style.overflow='hidden'; - x.style.margin = "0px 1px"; - } - x.style.backgroundColor = color; - if (top) - y.appendChild(x); - else - y.insertBefore(x, y.firstChild); - lastarc = arc; - } - if (top) - el.insertBefore(d, el.firstChild); - else - el.appendChild(d); -} - -function getElements(className) { - var elements = []; - var el = document.getElementsByTagName('DIV'); - var regexp=new RegExp("\\b"+className+"\\b"); - for (var i = 0; i < el.length; i++) - { - if (regexp.test(el[i].className)) - elements.push(el[i]); - } - return elements; -} - -function get_current_style(element,property,not_accepted) -{ - var ee,i,val,apr; - try - { - var cs=document.defaultView.getComputedStyle(element,''); - val=cs.getPropertyValue(property); - } - catch(ee) - { - if(element.currentStyle) - { - apr=property.split("-"); - for(i=1;i -1 || val==not_accepted) && element.parentNode) - { - if(element.parentNode != document) - val=get_current_style(element.parentNode,property,not_accepted); - else - val = '#FFFFFF'; - } - if (val.indexOf("rgb") > -1 && val.indexOf("rgba") == -1) - val = rgb2hex(val); - if (val.length == 4) - val = '#'+val.substring(1,1)+val.substring(1,1)+val.substring(2,1)+val.substring(2,1)+val.substring(3,1)+val.substring(3,1); - return val; -} - -function rgb2hex(value) -{ - var x = 255; - var hex = ''; - var i; - var regexp=/([0-9]+)[, ]+([0-9]+)[, ]+([0-9]+)/; - var array=regexp.exec(value); - for(i=1;i<4;i++) hex += ('0'+parseInt(array[i]).toString(16)).slice(-2); - return '#'+hex; -} +// Contributors +// Ilkka Huotari at http://www.editsite.net +// Mathieu 'p01' HENRI at http://www.p01.org/ +// http://seky.nahory.net/2005/04/rounded-corners/ +// Steven Wittens at http://www.acko.net/anti-aliased-nifty-corners +// Original Nifty Corners by Alessandro Fulciniti at http://pro.html.it/esempio/nifty/ +function NiftyCheck() { + if(!document.getElementById || !document.createElement) { + return false; + } + var b = navigator.userAgent.toLowerCase(); + if (b.indexOf("msie 5") > 0 && b.indexOf("opera") == -1) { + return false; + } + return true; +} + +function Rounded(className, sizex, sizey, sizex_b, sizey_b) { + var bk; + if (!NiftyCheck()) return; + if (typeof(sizex_b) == 'undefined') + sizex_b = sizex; + if (typeof(sizey_b) == 'undefined') + sizey_b = sizey; + var v = getElements(className); + var l = v.length; + for (var i = 0; i < l; i++) { + color = get_current_style(v[i],"background-color","transparent"); + bk = get_current_style(v[i].parentNode,"background-color","transparent"); + AddRounded(v[i], bk, color, sizex, sizey, true); + AddRounded(v[i], bk, color, sizex_b, sizey_b, false); + } +} + +Math.sqr = function (x) { + return x*x; +}; + +function Blend(a, b, alpha) { + + var ca = Array( + parseInt('0x' + a.substring(1, 3)), + parseInt('0x' + a.substring(3, 5)), + parseInt('0x' + a.substring(5, 7)) + ); + var cb = Array( + parseInt('0x' + b.substring(1, 3)), + parseInt('0x' + b.substring(3, 5)), + parseInt('0x' + b.substring(5, 7)) + ); + return '#' + ('0'+Math.round(ca[0] + (cb[0] - ca[0])*alpha).toString(16)).slice(-2).toString(16) + + ('0'+Math.round(ca[1] + (cb[1] - ca[1])*alpha).toString(16)).slice(-2).toString(16) + + ('0'+Math.round(ca[2] + (cb[2] - ca[2])*alpha).toString(16)).slice(-2).toString(16); + + return '#' + ('0'+Math.round(ca[0] + (cb[0] - ca[0])*alpha).toString(16)).slice(-2).toString(16) + + ('0'+Math.round(ca[1] + (cb[1] - ca[1])*alpha).toString(16)).slice(-2).toString(16) + + ('0'+Math.round(ca[2] + (cb[2] - ca[2])*alpha).toString(16)).slice(-2).toString(16); +} + +function AddRounded(el, bk, color, sizex, sizey, top) { + if (!sizex && !sizey) + return; + var i, j; + var d = document.createElement("div"); + d.style.backgroundColor = bk; + var lastarc = 0; + for (i = 1; i <= sizey; i++) { + var coverage, arc2, arc3; + // Find intersection of arc with bottom of pixel row + arc = Math.sqrt(1.0 - Math.sqr(1.0 - i / sizey)) * sizex; + // Calculate how many pixels are bg, fg and blended. + var n_bg = sizex - Math.ceil(arc); + var n_fg = Math.floor(lastarc); + var n_aa = sizex - n_bg - n_fg; + // Create pixel row wrapper + var x = document.createElement("div"); + var y = d; + x.style.margin = "0px " + n_bg + "px"; + x.style.height='1px'; + x.style.overflow='hidden'; + // Make a wrapper per anti-aliased pixel (at least one) + for (j = 1; j <= n_aa; j++) { + // Calculate coverage per pixel + // (approximates circle by a line within the pixel) + if (j == 1) { + if (j == n_aa) { + // Single pixel + coverage = ((arc + lastarc) * .5) - n_fg; + } + else { + // First in a run + arc2 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j + 1) / sizex)) * sizey; + coverage = (arc2 - (sizey - i)) * (arc - n_fg - n_aa + 1) * .5; + // Coverage is incorrect. Why? + coverage = 0; + } + } + else if (j == n_aa) { + // Last in a run + arc2 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j + 1) / sizex)) * sizey; + coverage = 1.0 - (1.0 - (arc2 - (sizey - i))) * (1.0 - (lastarc - n_fg)) * .5; + } + else { + // Middle of a run + arc3 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j) / sizex)) * sizey; + arc2 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j + 1) / sizex)) * sizey; + coverage = ((arc2 + arc3) * .5) - (sizey - i); + } + + x.style.backgroundColor = Blend(bk, color, coverage); + if (top) + y.appendChild(x); + else + y.insertBefore(x, y.firstChild); + y = x; + var x = document.createElement("div"); + x.style.height='1px'; + x.style.overflow='hidden'; + x.style.margin = "0px 1px"; + } + x.style.backgroundColor = color; + if (top) + y.appendChild(x); + else + y.insertBefore(x, y.firstChild); + lastarc = arc; + } + if (top) + el.insertBefore(d, el.firstChild); + else + el.appendChild(d); +} + +function getElements(className) { + var elements = []; + var el = document.getElementsByTagName('DIV'); + var regexp=new RegExp("\\b"+className+"\\b"); + for (var i = 0; i < el.length; i++) + { + if (regexp.test(el[i].className)) + elements.push(el[i]); + } + return elements; +} + +function get_current_style(element,property,not_accepted) +{ + var ee,i,val,apr; + try + { + var cs=document.defaultView.getComputedStyle(element,''); + val=cs.getPropertyValue(property); + } + catch(ee) + { + if(element.currentStyle) + { + apr=property.split("-"); + for(i=1;i -1 || val==not_accepted) && element.parentNode) + { + if(element.parentNode != document) + val=get_current_style(element.parentNode,property,not_accepted); + else + val = '#FFFFFF'; + } + if (val.indexOf("rgb") > -1 && val.indexOf("rgba") == -1) + val = rgb2hex(val); + if (val.length == 4) + val = '#'+val.substring(1,1)+val.substring(1,1)+val.substring(2,1)+val.substring(2,1)+val.substring(3,1)+val.substring(3,1); + return val; +} + +function rgb2hex(value) +{ + var x = 255; + var hex = ''; + var i; + var regexp=/([0-9]+)[, ]+([0-9]+)[, ]+([0-9]+)/; + var array=regexp.exec(value); + for(i=1;i<4;i++) hex += ('0'+parseInt(array[i]).toString(16)).slice(-2); + return '#'+hex; +}