Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(104)

Side by Side Diff: ui/keyboard/resources/main.js

Issue 163473003: Fixes alignment of spacebar row. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/keyboard/resources/layouts/system-qwerty.html ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 (function(exports) { 4 (function(exports) {
5 /** 5 /**
6 * Alignment options for a keyset. 6 * Alignment options for a keyset.
7 * @param {Object=} opt_keyset The keyset to calculate the dimensions for. 7 * @param {Object=} opt_keyset The keyset to calculate the dimensions for.
8 * Defaults to the current active keyset. 8 * Defaults to the current active keyset.
9 */ 9 */
10 var AlignmentOptions = function(opt_keyset) { 10 var AlignmentOptions = function(opt_keyset) {
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 return 0; 287 return 0;
288 return x >= high? 1 : -1; 288 return x >= high? 1 : -1;
289 } 289 }
290 290
291 return binarySearch(0, allKeys.length -1, testFn); 291 return binarySearch(0, allKeys.length -1, testFn);
292 } 292 }
293 293
294 /** 294 /**
295 * Redistributes the total width amongst the keys in the range provided. 295 * Redistributes the total width amongst the keys in the range provided.
296 * @param {Array.<kb-key>} allKeys Ordered list of keys to stretch. 296 * @param {Array.<kb-key>} allKeys Ordered list of keys to stretch.
297 * @param {number} pitch The space between two keys. 297 * @param {AlignmentOptions} params Options for aligning the keyset.
298 * @param {number} xOffset The x-coordinate of the key who's index is start. 298 * @param {number} xOffset The x-coordinate of the key who's index is start.
299 * @param {number} width The total extraneous width to distribute. 299 * @param {number} width The total extraneous width to distribute.
300 * @param {number} keyHeight The height of each key. 300 * @param {number} keyHeight The height of each key.
301 * @param {number} yOffset The y-coordinate of the top edge of the row. 301 * @param {number} yOffset The y-coordinate of the top edge of the row.
302 */ 302 */
303 function redistribute(allKeys, pitch, xOffset, width, keyHeight, yOffset) { 303 function redistribute(allKeys, params, xOffset, width, keyHeight, yOffset) {
304 var weight = 0; 304 var availableWidth = width - (allKeys.length - 1) * params.pitchX;
305 var stretchWeight = 0;
306 var nStretch = 0;
305 for (var i = 0; i < allKeys.length; i++) { 307 for (var i = 0; i < allKeys.length; i++) {
306 var key = allKeys[i]; 308 var key = allKeys[i];
307 weight += key.weight; 309 if (key.stretch) {
310 stretchWeight += key.weight;
311 nStretch++;
312 } else if (key.weight == DEFAULT_KEY_WEIGHT_X) {
313 availableWidth -= params.keyWidth;
314 } else {
315 availableWidth -=
316 Math.floor(key.weight/DEFAULT_KEY_WEIGHT_X * params.keyWidth);
317 }
308 } 318 }
309 var availableWidth = width - (allKeys.length - 1) * pitch; 319 if (stretchWeight <= 0)
310 var pixelsPerWeight = width / weight; 320 console.error("Cannot stretch row without a stretchable key");
321 // Rounding error to distribute.
322 var pixelsPerWeight = availableWidth / stretchWeight;
311 for (var i = 0; i < allKeys.length; i++) { 323 for (var i = 0; i < allKeys.length; i++) {
312 var key = allKeys[i] 324 var key = allKeys[i];
313 var keyWidth = Math.floor(key.weight * pixelsPerWeight); 325 var keyWidth = params.keyWidth;
314 if (i == allKeys.length -1) { 326 if (key.weight != DEFAULT_KEY_WEIGHT_X) {
315 keyWidth = availableWidth; 327 keyWidth =
328 Math.floor(key.weight/DEFAULT_KEY_WEIGHT_X * params.keyWidth);
316 } 329 }
317 updateKey(allKeys[i], keyWidth, keyHeight, xOffset, yOffset) 330 if (key.stretch) {
318 availableWidth -= keyWidth; 331 nStretch--;
319 xOffset += keyWidth + pitch; 332 if (nStretch > 0) {
333 keyWidth = Math.floor(key.weight * pixelsPerWeight);
334 availableWidth -= keyWidth;
335 } else {
336 keyWidth = availableWidth;
337 }
338 }
339 updateKey(key, keyWidth, keyHeight, xOffset, yOffset)
340 xOffset += keyWidth + params.pitchX;
320 } 341 }
321 } 342 }
322 343
323 /** 344 /**
324 * Aligns a row such that the spacebar is perfectly aligned with the row above 345 * Aligns a row such that the spacebar is perfectly aligned with the row above
325 * it. A precondition is that all keys in this row can be stretched as needed. 346 * it. A precondition is that all keys in this row can be stretched as needed.
326 * @param {!kb-row} row The current row to be aligned. 347 * @param {!kb-row} row The current row to be aligned.
327 * @param {!kb-row} prevRow The row above the current row. 348 * @param {!kb-row} prevRow The row above the current row.
328 * @param {!AlignmentOptions} params The parameters used to align the keyset. 349 * @param {!AlignmentOptions} params Options for aligning the keyset.
329 * @param {number} keyHeight The height of the keys in this row. 350 * @param {number} keyHeight The height of the keys in this row.
330 * @param {number} heightOffset The height offset caused by the rows above. 351 * @param {number} heightOffset The height offset caused by the rows above.
331 */ 352 */
332 function realignSpacebarRow(row, prevRow, params, keyHeight, heightOffset) { 353 function realignSpacebarRow(row, prevRow, params, keyHeight, heightOffset) {
333 var allKeys = row.children; 354 var allKeys = row.children;
334 var stretchWeightBeforeSpace = 0; 355 var stretchWeightBeforeSpace = 0;
335 var stretchBefore = 0; 356 var stretchBefore = 0;
336 var stretchWeightAfterSpace = 0; 357 var stretchWeightAfterSpace = 0;
337 var stretchAfter = 0; 358 var stretchAfter = 0;
338 var spaceIndex = -1; 359 var spaceIndex = -1;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 397
377 var rightKey = 398 var rightKey =
378 findClosestKey(prevRowKeys, spacePredictedRight, params.pitchX, false); 399 findClosestKey(prevRowKeys, spacePredictedRight, params.pitchX, false);
379 400
380 var yOffset = params.offsetTop + heightOffset; 401 var yOffset = params.offsetTop + heightOffset;
381 // Fix left side. 402 // Fix left side.
382 var leftEdge = parseFloat(leftKey.style.left); 403 var leftEdge = parseFloat(leftKey.style.left);
383 var leftWidth = leftEdge - params.offsetLeft - params.pitchX; 404 var leftWidth = leftEdge - params.offsetLeft - params.pitchX;
384 var leftKeys = allKeys.array().slice(0, spaceIndex); 405 var leftKeys = allKeys.array().slice(0, spaceIndex);
385 redistribute(leftKeys, 406 redistribute(leftKeys,
386 params.pitchX, 407 params,
387 params.offsetLeft, 408 params.offsetLeft,
388 leftWidth, 409 leftWidth,
389 keyHeight, 410 keyHeight,
390 yOffset); 411 yOffset);
391 // Fix right side. 412 // Fix right side.
392 var rightEdge = parseFloat(rightKey.style.left) + 413 var rightEdge = parseFloat(rightKey.style.left) +
393 parseFloat(rightKey.style.width); 414 parseFloat(rightKey.style.width);
394 var spacebarWidth = rightEdge - leftEdge; 415 var spacebarWidth = rightEdge - leftEdge;
395 updateKey(allKeys[spaceIndex], 416 updateKey(allKeys[spaceIndex],
396 spacebarWidth, 417 spacebarWidth,
397 keyHeight, 418 keyHeight,
398 leftEdge, 419 leftEdge,
399 yOffset); 420 yOffset);
400 var rightWidth = 421 var rightWidth =
401 params.availableWidth - (rightEdge - params.offsetLeft + params.pitchX); 422 params.availableWidth - (rightEdge - params.offsetLeft + params.pitchX);
402 var rightKeys = allKeys.array().slice(spaceIndex + 1); 423 var rightKeys = allKeys.array().slice(spaceIndex + 1);
403 redistribute(rightKeys, 424 redistribute(rightKeys,
404 params.pitchX, 425 params,
405 rightEdge + params.pitchX,//xOffset. 426 rightEdge + params.pitchX,//xOffset.
406 rightWidth, 427 rightWidth,
407 keyHeight, 428 keyHeight,
408 yOffset); 429 yOffset);
409 } 430 }
410 431
411 /** 432 /**
412 * Realigns a given row based on the parameters provided. 433 * Realigns a given row based on the parameters provided.
413 * @param {!kb-row} row The row to realign. 434 * @param {!kb-row} row The row to realign.
414 * @param {!AlignmentOptions} params The parameters used to align the keyset. 435 * @param {!AlignmentOptions} params The parameters used to align the keyset.
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
597 var importedContent = importHTML(content); 618 var importedContent = importHTML(content);
598 expandHTML(importedContent); 619 expandHTML(importedContent);
599 return importedContent; 620 return importedContent;
600 } 621 }
601 622
602 // Prevents all default actions of touch. Keyboard should use its own gesture 623 // Prevents all default actions of touch. Keyboard should use its own gesture
603 // recognizer. 624 // recognizer.
604 addEventListener('touchstart', function(e) { e.preventDefault() }); 625 addEventListener('touchstart', function(e) { e.preventDefault() });
605 addEventListener('touchend', function(e) { e.preventDefault() }); 626 addEventListener('touchend', function(e) { e.preventDefault() });
606 addEventListener('touchmove', function(e) { e.preventDefault() }); 627 addEventListener('touchmove', function(e) { e.preventDefault() });
OLDNEW
« no previous file with comments | « ui/keyboard/resources/layouts/system-qwerty.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698