| Index: ui/keyboard/resources/main.js
|
| diff --git a/ui/keyboard/resources/main.js b/ui/keyboard/resources/main.js
|
| index 0b07c90615d9877361fb54a0e6865cbce15f819a..b1891d12963ab595c3dac684160a9df043fba698 100644
|
| --- a/ui/keyboard/resources/main.js
|
| +++ b/ui/keyboard/resources/main.js
|
| @@ -308,7 +308,7 @@
|
| weight += allKeys[i].weight;
|
| }
|
| var availableWidth = width - (allKeys.length - 1) * pitch;
|
| - var pixelsPerWeight = width / weight;
|
| + var pixelsPerWeight = availableWidth / weight;
|
| for (var i = 0; i < allKeys.length; i++) {
|
| var keyWidth = Math.floor(allKeys[i].weight * pixelsPerWeight);
|
| if (i == allKeys.length -1) {
|
| @@ -415,49 +415,55 @@
|
| */
|
| function realignRow(row, params, heightOffset) {
|
| var all = row.children;
|
| - var stretch = [];
|
| + var nStretch = 0;
|
| var stretchWeightSum = 0;
|
| var allSum = 0;
|
| -
|
| + // Keeps track of where to distribute pixels caused by round off errors.
|
| + var deltaWidth = [];
|
| for (var i = 0; i < all.length; i++) {
|
| + deltaWidth.push(0)
|
| var key = all[i];
|
| if (key.weight == DEFAULT_KEY_WEIGHT_X){
|
| allSum += params.keyWidth;
|
| continue;
|
| }
|
| - stretch.push(key)
|
| + nStretch++;
|
| var width =
|
| Math.floor((params.keyWidth/DEFAULT_KEY_WEIGHT_X) * key.weight);
|
| allSum += width;
|
| stretchWeightSum += key.weight;
|
| }
|
| - var nStretch = stretch.length;
|
| var nRegular = all.length - nStretch;
|
| // Extra space.
|
| var extra = params.availableWidth -
|
| allSum -
|
| (params.pitchX * (all.length -1));
|
| var xOffset = params.offsetLeft;
|
| +
|
| var alignment = row.align;
|
| switch (alignment) {
|
| case RowAlignment.STRETCH:
|
| var extraPerWeight = extra/stretchWeightSum;
|
| - for (var i = 0; i < stretch.length; i++) {
|
| - var bonus = Math.floor(stretch[i].weight * extraPerWeight);
|
| - extra -= bonus;
|
| + for (var i = 0; i < all.length; i++) {
|
| + if (all[i].weight == DEFAULT_KEY_WEIGHT_X)
|
| + continue;
|
| + var delta = Math.floor(all[i].weight * extraPerWeight);
|
| + extra -= delta;
|
| + deltaWidth[i] = delta;
|
| // All left-over pixels assigned to right most key.
|
| - if (i == (stretch.length - 1))
|
| - stretch[i].setAttribute('bonus', bonus + extra);
|
| - else
|
| - stretch[i].setAttribute('bonus', bonus);
|
| + nStretch--;
|
| + if (nStretch == 0)
|
| + deltaWidth[i] += extra;
|
| }
|
| break;
|
| case RowAlignment.CENTER:
|
| xOffset += Math.floor(extra/2)
|
| break;
|
| - case RowAlignment.JUSTIFY:
|
| + case RowAlignment.RIGHT:
|
| xOffset += extra;
|
| break;
|
| + case RowAlignment.STRETCHRIGHT:
|
| + deltaWidth[all.length - 1] = extra;
|
| default:
|
| break;
|
| };
|
| @@ -467,12 +473,9 @@
|
| for (var i = 0; i < all.length; i++) {
|
| var key = all[i];
|
| var width = params.keyWidth;
|
| - if (key.weight != DEFAULT_KEY_WEIGHT_X) {
|
| + if (key.weight != DEFAULT_KEY_WEIGHT_X)
|
| width = Math.floor((params.keyWidth/DEFAULT_KEY_WEIGHT_X) * key.weight)
|
| - var bonus = key.getAttribute('bonus')
|
| - if (bonus)
|
| - width += parseInt(bonus)
|
| - }
|
| + width += deltaWidth[i];
|
| updateKey(key, width, params.keyHeight, left, yOffset)
|
| left += (width + params.pitchX);
|
| }
|
| @@ -525,6 +528,11 @@
|
| */
|
| function realignKeyset(keyset, params) {
|
| var rows = keyset.querySelectorAll('kb-row').array();
|
| + var maxSize = getKeyboardBounds();
|
| + var height = (maxSize.width > ASPECT_RATIO * maxSize.height) ?
|
| + maxSize.height : Math.floor(maxSize.width / ASPECT_RATIO);
|
| + keyset.style.fontSize = (height / FONT_SIZE_RATIO / rows.length) + 'px';
|
| +
|
| var heightOffset = 0;
|
| for (var i = 0; i < rows.length; i++) {
|
| var row = rows[i];
|
|
|