Показать сообщение отдельно
  #9 (permalink)  
Старый 25.10.2018, 23:03
Аватар для Paguo-86PK
Профессор
Отправить личное сообщение для Paguo-86PK Посмотреть профиль Найти все сообщения от Paguo-86PK
 
Регистрация: 16.09.2009
Сообщений: 253

Проектирую клавиатуру…
Сообщение от j0hnik Посмотреть сообщение
уверен что можно оптимизировать.
Нe получится: Файл большой и бинарный…

Вот, кстати, что я делаю…
<html>
<head>
<meta http-equiv=refresh content='3000' />
<script>
CanvasRenderingContext2D.prototype.roundRect = function(x, y, width, height, radius, fill, stroke) {
	if(typeof stroke == "undefined")
		stroke = true;
	if(typeof radius === "undefined")
		radius = 5;
	if(typeof radius === "number")
		radius = {tl: radius, tr: radius, br: radius, bl: radius};
	else {
		var defaultRadius = {tl: 0, tr: 0, br: 0, bl: 0};
		for(var side in defaultRadius) {
			radius[side] = radius[side] || defaultRadius[side];
		}
	}
	this.beginPath();
	this.moveTo(x + radius.tl, y);
	this.lineTo(x + width - radius.tr, y);
	this.quadraticCurveTo(x + width, y, x + width, y + radius.tr);
	this.lineTo(x + width, y + height - radius.br);
	this.quadraticCurveTo(x + width, y + height, x + width - radius.br, y + height);
	this.lineTo(x + radius.bl, y + height);
	this.quadraticCurveTo(x, y + height, x, y + height - radius.bl);
	this.lineTo(x, y + radius.tl);
	this.quadraticCurveTo(x, y, x + radius.tl, y);
	this.closePath();
	if(fill)
		this.fill();
	if(stroke)
		this.stroke();
}
//////////////////////////////////////////////////////////////////////////////
var	aButtons= [
		"~  `Ё 	! 11 ¡	@\" 2 2	#№ 3 3	$;£4 ¤	%  5 €	^ :6 ¼	&? 7 ½	*  8₽¾	(  9 ‘	)  0 ’	_ …- ¥	+ ÷= ×	|\\¦\\/¬",
		"Q   Й 	W   Ц 	E   У 	R   К®	Tѐ  Е 	Y   Н 	U   Г 	I   Ш 	O   Щ 	P   З 	{  [Х«	}  ]Ъ»",
		"A   Ф 	S   Ы 	D   В 	F   А 	G   П 	H   Р 	J   О 	K   Л 	L   Д 	: °;Ж¶	\" ¨'Э´",
		"Z   Я 	X   Ч 	C   С©	V   М 	Bѝ  И 	N   Т 	M   Ь 	<  ,Б 	>  .Ю 	?. /,¿"
	];
//////////////////////////////////////////////////////////////////////////////
var	hButton	= null;
var	hCanvas	= null;
var	hCtx	= null;

function DrawButton(mark, x, y) {
	var	size	= 124.7;
	var	thick	= 12.5;
	var	border	= 3.5;
	var	radius	= 3.05;
	var	back	= 1.75;
	var	h, l, m, r, v, w;
	hCtx.fillStyle = "rgb(90, 90, 90)";
	hCtx.beginPath();
	hCtx.moveTo(x + size - back, y + back);
	hCtx.lineTo(x + back, y + back);
	hCtx.lineTo(x + back, y + size - back);
	hCtx.closePath();
	hCtx.fill();
	hCtx.fillStyle = "rgb(31, 31, 31)";
	hCtx.beginPath();
	hCtx.moveTo(x + size - back, y + back);
	hCtx.lineTo(x + size - back, y + size - back);
	hCtx.lineTo(x + back, y + size - back);
	hCtx.closePath();
	hCtx.fill();
	hCtx.fillStyle = "rgb(68, 68, 68)";
	hCtx.strokeStyle = "rgb(7, 7, 7)";
	hCtx.lineWidth = border;
	hCtx.roundRect(x, y, size, size, radius * radius, false, true);
	hCtx.roundRect(x + thick, y + thick, size - 2 * thick, size - 2 * thick, radius, true, false);
	if(typeof mark == "string") {
		hCtx.font = "46px helvetica";
		h = parseInt(hCtx.font, 10);
		hCtx.fillStyle = "white";
		hCtx.fillText(mark, x + (size - hCtx.measureText(mark).width) / 2, y + (size / 2 + h / 2));
	} else {
		v = border + thick;
		w = (size - border - thick);
		m = x + size / 2;
		l = m - w / 3.69;
		r = m + w / 2.9;
		hCtx.fillStyle = "white";
		hCtx.font = "46px helvetica";
		h = parseInt(hCtx.font, 10);
		s = mark[3]; hCtx.fillText(s, l - hCtx.measureText(s).width / 2, y + size / 2 + h / 1.125);
		hCtx.font = "40px helvetica";
		h = parseInt(hCtx.font, 10);
		s = mark[0]; hCtx.fillText(s, l - hCtx.measureText(s).width / 2, y + size / 2 - h / 4);
		hCtx.fillStyle = "red";
		s = mark[1]; hCtx.fillText(s, m - hCtx.measureText(s).width / 2, y + size / 2 - h / 4);
		s = mark[4]; hCtx.fillText(s, m - hCtx.measureText(s).width / 2, y + size / 2 + h / 1);
		hCtx.font = "24px helvetica";
		hCtx.fillStyle = "dodgerblue";
		s = mark[5]; hCtx.fillText(s, r - hCtx.measureText(s).width / 2, y + size / 2 + h / 1);
		h = parseInt(hCtx.font, 10);
		s = mark[2]; hCtx.fillText(s, r - hCtx.measureText(s).width / 2, y + v + h - h / 4);
	}
}

function main() {
	hCanvas = document.getElementById("Draft");
	hCtx = hCanvas.getContext("2d");
	DrawButton("Esc", 56.5, 119);
	DrawButton("F1", 340, 118);
	var	x = 56.5, y = 310.5;
	aButtons[0].split(/\t/)
	.forEach(function(c) {
		DrawButton(c.split(""), x, y);
		x += 133.35;
	});
	x = 252, y = 444;
	aButtons[1].split(/\t/)
	.forEach(function(c) {
		DrawButton(c.split(""), x, y);
		x += 133.35;
	});
	x = 315, y = 577.5;
	aButtons[2].split(/\t/)
	.forEach(function(c) {
		DrawButton(c.split(""), x, y);
		x += 133.35;
	});
	x = 386, y = 711;
	aButtons[3].split(/\t/)
	.forEach(function(c) {
		DrawButton(c.split(""), x, y);
		x += 133.35;
	});
}
</script>
<olink rel="stylesheet" href="body.css">
<style>
body
{
	background-image:url('http://pluspng.com/img-png/keypad-png-hd-file-bijoy-keyboard-png-3171.png');/*('keyboard-0.png');/*('keyboard_my.svg');*/
	background-repeat:no-repeat;
	background-position-left:99px;
	background-color	:black;
	padding		:0px 0px 0px 0px;
}
</style>
</head>
<body onload='setTimeout(main, 5000)'>
<canvas id=Draft width=2048 height=960></canvas>
</body>

Чтобы руками в графическом редакторе не перемаркировывать, написал скрипт…
Тем более, что в исходном изображении заметны свои косяки местами.
Сейчас проблема в отрисовке клавиши «Enter» сто́ит. Она и нарисована как-то криво…

P.S.: Вообще-то, хочу разработать собственную раскладку…
А чтобы Keyboard Layout Creator вслепую не маяться, хочу визуальную интерактивную модель построить алгоритмом, чтобы эстетически оценить её…

Последний раз редактировалось Paguo-86PK, 25.10.2018 в 23:14.
Ответить с цитированием