Skip to content

Instantly share code, notes, and snippets.

@fuhrmanator
Last active April 8, 2024 22:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fuhrmanator/6758c9146e18bfb3bae66090f9ab80ec to your computer and use it in GitHub Desktop.
Save fuhrmanator/6758c9146e18bfb3bae66090f9ab80ec to your computer and use it in GitHub Desktop.
Horloge pour l'ÉTS style Railway Station Clock de Hilfiker en JavaScript
license: gpl-3.0
<html>
<head>
<script type="application/javascript">
// (c) 2017 Christopher Fuhrman - GPL 3.0
var intervalId;
var logo, scaledLogo;
var logoProp;
var logoScale;
var logoScaledHeight, logoScaledWidth;
var radiusTemp = 38,
minuteMarkWidth = 3,
hourMarkWidth = 8,
dialWidth = 15,
secondHandWidth = 3,
minuteHandWidth = hourMarkWidth + 2,
hourHandWidth = hourMarkWidth + 4,
backgroundColor = "#FFF";
var initializedImage = false;
this.init = function init() {
logo = new Image();
logo.onload = function() {
// context.drawImage(img, 0, 0);
logoProp = logo.height / logo.width;
logoScale = 1 / (2.5 * (1058 / 254)); // imprimante
scaledLogo = resize_canvas(this, 500, 0);
initializedImage = true;
}
logo.src = "data:image/png;base64,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";
if (initializedImage) clock(); // only run if the image has loaded.
intervalId = setInterval(clock, 50);
}
// add the following css to the canvas:
/*
canvas {
padding-left: 0;
padding-right: 0;
margin-left: auto;
margin-right: auto;
display: block;
width: 800px;
}
*/
function clock() {
// no notification when we get unloaded/replaced, so check here
var canv = document.getElementById('canvas');
// square canvas
var side = Math.min(window.innerHeight - 50, window.innerWidth - 50);
var proportion = 150 / side; // original code was written for canvas size of 150
if (!canv) {
clearInterval(intervalId);
return;
}
var now = new Date();
var ctx = canv.getContext('2d');
ctx.canvas.width = side;
ctx.canvas.height = side;
ctx.save();
ctx.clearRect(0, 0, side, side);
ctx.translate(side / 2, side / 2);
ctx.scale(0.4 / proportion, 0.4 / proportion);
// draw background
ctx.save();
// add linear gradient
// var grd = ctx.createLinearGradient(0, 0, 0, side * proportion);
// grd.addColorStop(0, '#00BFFF');
// grd.addColorStop(0.5, '#fff');
// grd.addColorStop(0.5, '#66cc00');
// grd.addColorStop(1, '#fff');
// ctx.beginPath();
// // ctx.fillStyle = grd;
// ctx.fillStyle = backgroundColor;
// ctx.arc(0, 0, 180, 0, Math.PI * 2, true);
// ctx.fill();
// draw outside
ctx.beginPath();
ctx.lineWidth = dialWidth;
ctx.arc(0, 0, 180, 0, Math.PI * 2, true);
ctx.stroke();
ctx.restore();
// logo ETS
ctx.save();
// ctx.fillStyle = "#DDD";
// ctx.fillRect(-(logo.width * logoScale) / 2, -(logo.height * 1.5) * logoScale, logo.width * logoScale, logo.height * logoScale);
// ctx.drawImage(logo, -(logo.width /2) * proportion * logoScale, -logo.height * proportion * logoScale, side * logoScale, side * logoScale * logoProp);
// ctx.drawImage(logo, -side * logoScale * proportion / 2, -logo.height * proportion / 2, side * logoScale * proportion, side * logoScale * logoProp * proportion);
//console.log(scaledLogo);
ctx.drawImage(scaledLogo, -scaledLogo.width / 4, -120 /* scaledLogo.height */ , scaledLogo.width / 2, scaledLogo.height / 2);
ctx.restore();
ctx.rotate(-Math.PI / 2);
ctx.strokeStyle = "black";
ctx.fillStyle = "white";
ctx.lineCap = "butt";
ctx.lineWidth = hourMarkWidth;
// Hour marks
ctx.save();
ctx.lineWidth = hourMarkWidth;
for (var i = 0; i < 12; i++) {
ctx.beginPath();
ctx.rotate(Math.PI / 6);
ctx.moveTo(90 + radiusTemp, 0);
ctx.lineTo(123 + radiusTemp, 0);
ctx.stroke();
}
ctx.restore();
// Minute marks
ctx.save();
ctx.lineWidth = minuteMarkWidth;
for (i = 0; i < 60; i++) {
if (i % 5 != 0) {
ctx.beginPath();
ctx.moveTo(110 + radiusTemp, 0);
ctx.lineTo(123 + radiusTemp, 0);
ctx.stroke();
}
ctx.rotate(Math.PI / 30);
}
ctx.restore();
var sec = now.getSeconds() + (now.getMilliseconds() / 1000); // smooth motion
var min = now.getMinutes();
var hr = now.getHours();
hr = hr >= 12 ? hr - 12 : hr;
ctx.fillStyle = "black";
// write Hour hand
ctx.save();
ctx.rotate(hr * (Math.PI / 6) + (Math.PI / 360) * min + (Math.PI / 21600) * sec)
ctx.lineWidth = hourHandWidth;
ctx.beginPath();
ctx.moveTo(-20, 0);
ctx.lineTo(80 + radiusTemp, 0);
ctx.stroke();
ctx.restore();
ctx.fillStyle = "#010101";
// write Minute hand
ctx.save();
ctx.rotate((Math.PI / 30) * min /* + (Math.PI/1800)*sec */ )
ctx.lineWidth = minuteHandWidth;
ctx.beginPath();
ctx.moveTo(-28, 0);
ctx.lineTo(108 + radiusTemp, 0);
ctx.stroke();
ctx.restore();
// Write second hand
ctx.save();
ctx.rotate(sec * Math.PI / 30);
ctx.strokeStyle = "red";
ctx.fillStyle = "red";
ctx.lineWidth = secondHandWidth;
ctx.beginPath();
ctx.moveTo(-33, 0);
ctx.lineTo(76 + radiusTemp, 0);
ctx.stroke();
// draw red circle at end
ctx.beginPath();
ctx.arc(115, 0, 12, 0, Math.PI * 2, true);
ctx.stroke();
ctx.fill();
ctx.restore();
// draw center dot
ctx.save();
ctx.strokeStyle = "#DDD";
ctx.fillStyle = "#DDD";
ctx.lineWidth = 2;
ctx.beginPath();
ctx.arc(0, 0, 2, 0, Math.PI * 2, true);
ctx.stroke();
//ctx.fill();
ctx.restore();
}
/**
* Hermite resize - fast image resize/resample using Hermite filter. 1 cpu version!
*
* @param {HtmlElement} canvas
* @param {int} width
* @param {int} height
* @param {boolean} resize_canvas if true, canvas will be resized. Optional.
*/
function resample_single(canvas, width, height, resize_canvas) {
var width_source = canvas.width;
var height_source = canvas.height;
width = Math.round(width);
height = Math.round(height);
var ratio_w = width_source / width;
var ratio_h = height_source / height;
var ratio_w_half = Math.ceil(ratio_w / 2);
var ratio_h_half = Math.ceil(ratio_h / 2);
var ctx = canvas.getContext("2d");
var img = ctx.getImageData(0, 0, width_source, height_source);
var img2 = ctx.createImageData(width, height);
var data = img.data;
var data2 = img2.data;
for (var j = 0; j < height; j++) {
for (var i = 0; i < width; i++) {
var x2 = (i + j * width) * 4;
var weight = 0;
var weights = 0;
var weights_alpha = 0;
var gx_r = 0;
var gx_g = 0;
var gx_b = 0;
var gx_a = 0;
var center_y = (j + 0.5) * ratio_h;
var yy_start = Math.floor(j * ratio_h);
var yy_stop = Math.ceil((j + 1) * ratio_h);
for (var yy = yy_start; yy < yy_stop; yy++) {
var dy = Math.abs(center_y - (yy + 0.5)) / ratio_h_half;
var center_x = (i + 0.5) * ratio_w;
var w0 = dy * dy; //pre-calc part of w
var xx_start = Math.floor(i * ratio_w);
var xx_stop = Math.ceil((i + 1) * ratio_w);
for (var xx = xx_start; xx < xx_stop; xx++) {
var dx = Math.abs(center_x - (xx + 0.5)) / ratio_w_half;
var w = Math.sqrt(w0 + dx * dx);
if (w >= 1) {
//pixel too far
continue;
}
//hermite filter
weight = 2 * w * w * w - 3 * w * w + 1;
var pos_x = 4 * (xx + yy * width_source);
//alpha
gx_a += weight * data[pos_x + 3];
weights_alpha += weight;
//colors
if (data[pos_x + 3] < 255)
weight = weight * data[pos_x + 3] / 250;
gx_r += weight * data[pos_x];
gx_g += weight * data[pos_x + 1];
gx_b += weight * data[pos_x + 2];
weights += weight;
}
}
data2[x2] = gx_r / weights;
data2[x2 + 1] = gx_g / weights;
data2[x2 + 2] = gx_b / weights;
data2[x2 + 3] = gx_a / weights_alpha;
}
}
//clear and resize canvas
if (resize_canvas === true) {
canvas.width = width;
canvas.height = height;
} else {
ctx.clearRect(0, 0, width_source, height_source);
}
//draw
ctx.putImageData(img2, 0, 0);
}
function resize_canvas(src, maxWidth, maxHeight) {
var canvas, context, cW, cH;
//console.log("resize_canvas", src, maxWidth, maxHeight);
canvas = document.createElement('canvas'); // forgotten instruction?
cW = src.width / 2;
cH = src.height / 2;
canvas.width = cW;
canvas.height = cH;
context = canvas.getContext('2d');
context.drawImage(src, 0, 0, cW, cH);
if (src.width < maxWidth || src.height < maxHeight) {
//console.log("resize_canvas return:", src);
return src;
}
return resize_canvas(canvas, maxWidth, maxHeight);
}
</script>
</head>
<body>
<canvas id="canvas" style="padding-left: 0;
padding-right: 0;
margin-left: auto;
margin-right: auto;
display: block;"></canvas>
<p>&copy;2014 <a href="mailto:christopher.fuhrman@gmail.com">christopher.fuhrman@gmail.com</a><br/>See <a href="http://caja.appspot.com/#examples/clock.html">http://caja.appspot.com/#examples/clock.html</a> for canvas use inside of Google's sandbox.</p>
</body>
<script>
this.init();
</script>
<style>
</style>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment