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

Side by Side Diff: chrome/browser/resources/options/chromeos/display_layout.js

Issue 2562783002: Fix collision calculation (Closed)
Patch Set: Created 4 years 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 | « no previous file | chrome/browser/resources/options/chromeos/display_layout_manager_multi.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 4
5 cr.exportPath('options'); 5 cr.exportPath('options');
6 6
7 /** 7 /**
8 * Enumeration of display layout. These values must match the C++ values in 8 * Enumeration of display layout. These values must match the C++ values in
9 * ash::DisplayController. 9 * ash::DisplayController.
10 * @enum {number} 10 * @enum {number}
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 * 0 means snap from any distance. 388 * 0 means snap from any distance.
389 * @return {number} 389 * @return {number}
390 */ 390 */
391 snapToY: function(y, parentDiv, opt_snapDistance) { 391 snapToY: function(y, parentDiv, opt_snapDistance) {
392 return snapToEdge_( 392 return snapToEdge_(
393 y, this.div.offsetHeight, parentDiv.offsetTop, parentDiv.offsetHeight, 393 y, this.div.offsetHeight, parentDiv.offsetTop, parentDiv.offsetHeight,
394 opt_snapDistance); 394 opt_snapDistance);
395 }, 395 },
396 396
397 /** 397 /**
398 * Intersects this.div with |otherDiv|. If there is a collision, modifies 398 * Intersects this.div at |pos| with |otherDiv|. If there is a collision,
399 * |deltaPos| to limit movement to a single axis and avoid the collision 399 * modifies |deltaPos| to limit movement to a single axis and avoid the
400 * and returns true. 400 * collision and returns true.
401 * @param {!options.DisplayPosition} pos
401 * @param {?HTMLElement} otherDiv 402 * @param {?HTMLElement} otherDiv
402 * @param {!options.DisplayPosition} deltaPos 403 * @param {!options.DisplayPosition} deltaPos
403 * @return {boolean} Whether there was a collision. 404 * @return {boolean} Whether there was a collision.
404 */ 405 */
405 collideWithDivAndModifyDelta: function(otherDiv, deltaPos) { 406 collideWithDivAndModifyDelta: function(pos, otherDiv, deltaPos) {
406 var div = this.div; 407 var div = this.div;
407 var newX = div.offsetLeft + deltaPos.x; 408 var newX = pos.x + deltaPos.x;
408 var newY = div.offsetTop + deltaPos.y; 409 var newY = pos.y + deltaPos.y;
409 410
410 if ((newX + div.offsetWidth <= otherDiv.offsetLeft) || 411 if ((newX + div.offsetWidth <= otherDiv.offsetLeft) ||
411 (newX >= otherDiv.offsetLeft + otherDiv.offsetWidth) || 412 (newX >= otherDiv.offsetLeft + otherDiv.offsetWidth) ||
412 (newY + div.offsetHeight <= otherDiv.offsetTop) || 413 (newY + div.offsetHeight <= otherDiv.offsetTop) ||
413 (newY >= otherDiv.offsetTop + otherDiv.offsetHeight)) { 414 (newY >= otherDiv.offsetTop + otherDiv.offsetHeight)) {
414 return false; 415 return false;
415 } 416 }
416 417
417 if (Math.abs(deltaPos.x) > Math.abs(deltaPos.y)) { 418 if (Math.abs(deltaPos.x) > Math.abs(deltaPos.y)) {
418 if (deltaPos.x > 0) { 419 if (deltaPos.x > 0) {
419 var x = otherDiv.offsetLeft - div.offsetWidth; 420 var x = otherDiv.offsetLeft - div.offsetWidth;
420 if (x > div.offsetLeft) 421 if (x > pos.x)
421 deltaPos.x = x - div.offsetLeft; 422 deltaPos.x = x - pos.x;
422 else 423 else
423 deltaPos.x = 0; 424 deltaPos.x = 0;
424 } else { 425 } else {
425 var x = otherDiv.offsetLeft + otherDiv.offsetWidth; 426 var x = otherDiv.offsetLeft + otherDiv.offsetWidth;
426 if (x < div.offsetLeft) 427 if (x < pos.x)
427 deltaPos.x = x - div.offsetLeft; 428 deltaPos.x = x - pos.x;
428 else 429 else
429 deltaPos.x = 0; 430 deltaPos.x = 0;
430 } 431 }
431 deltaPos.y = 0; 432 deltaPos.y = 0;
432 } else { 433 } else {
433 deltaPos.x = 0; 434 deltaPos.x = 0;
434 if (deltaPos.y > 0) { 435 if (deltaPos.y > 0) {
435 var y = otherDiv.offsetTop - div.offsetHeight; 436 var y = otherDiv.offsetTop - div.offsetHeight;
436 if (y > div.offsetTop) 437 if (y > pos.y)
437 deltaPos.y = y - div.offsetTop; 438 deltaPos.y = y - pos.y;
438 else 439 else
439 deltaPos.y = 0; 440 deltaPos.y = 0;
440 } else if (deltaPos.y < 0) { 441 } else if (deltaPos.y < 0) {
441 var y = otherDiv.offsetTop + otherDiv.offsetTop; 442 var y = otherDiv.offsetTop + otherDiv.offsetTop;
442 if (y < div.offsetTop) 443 if (y < pos.y)
443 deltaPos.y = y - div.offsetTop; 444 deltaPos.y = y - pos.y;
444 else 445 else
445 deltaPos.y = 0; 446 deltaPos.y = 0;
446 } 447 }
447 } 448 }
448 449
449 return true; 450 return true;
450 } 451 }
451 }; 452 };
452 453
453 // Export 454 // Export
454 return {DisplayLayout: DisplayLayout}; 455 return {DisplayLayout: DisplayLayout};
455 }); 456 });
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/resources/options/chromeos/display_layout_manager_multi.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698