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

Unified Diff: experimental/skpdiff/diff_viewer.js

Issue 18925004: modularize the display of diffs for skpdiff (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: swapimg -> swapImg Created 7 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | experimental/skpdiff/viewer.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: experimental/skpdiff/diff_viewer.js
diff --git a/experimental/skpdiff/diff_viewer.js b/experimental/skpdiff/diff_viewer.js
index 338dbdfaef4dc45e4fa09c26cf558afd28a0b42d..700bf4b0e4f6a958605769f9cac5b1dfb0b13c10 100644
--- a/experimental/skpdiff/diff_viewer.js
+++ b/experimental/skpdiff/diff_viewer.js
@@ -1,4 +1,81 @@
-function DiffViewController($scope) {
+angular.module('diff_viewer', []).
+config(['$routeProvider', function($routeProvider) {
+ // Show the list of differences by default
+ $routeProvider.
+ otherwise({ templateUrl: '/diff_list.html', controller: DiffListController});
+}]).
+directive('swapImg', function() {
+ // Custom directive for showing an image that gets swapped my mouseover.
+ return {
+ restrict: 'E', // The directive can be used as an element name
+ replace: true, // The directive replaces itself with the template
+ template: '<canvas ng-mouseenter="swap()" ng-mouseleave="swap()"></canvas>',
+ scope: { // The attributes below are bound to the scope
+ leftSrc: '@',
+ rightSrc: '@',
+ side: '@'
+ },
+ link: function(scope, elm, attrs, ctrl) {
+ var leftImage = new Image();
+ var rightImage = new Image();
+ var ctx = elm[0].getContext('2d');
+
+ scope.render = function() {
+ var image;
+ if (scope.side == "left") {
+ image = leftImage;
+ } else {
+ image = rightImage;
+ }
+
+ // Make it so the maximum size of an image is 500, and the images are scaled
+ // down in halves.
+ var divisor = 1;
+ while ((image.width / divisor) > 500) {
+ divisor *= 2;
+ }
+
+ // Set canvas to correct size and draw the image into it
+ elm[0].width = image.width / divisor;
+ elm[0].height = image.height / divisor;
+ ctx.drawImage(image, 0, 0, elm[0].width, elm[0].height);
+ };
+
+ // When the leftSrc attribute changes, load the image and then rerender
+ attrs.$observe('leftSrc', function(value) {
+ leftImage.src = value;
+ leftImage.onload = function() {
+ if (scope.side == "left") {
+ scope.render();
+ }
+ };
+ });
+
+ // When the rightSrc attribute changes, load the image and then rerender
+ attrs.$observe('rightSrc', function(value) {
+ rightImage.src = value;
+ rightImage.onload = function() {
+ if (scope.side == "right") {
+ scope.render();
+ }
+ };
+ });
+
+ // Swap which side to draw onto the canvas and then rerender
+ scope.swap = function() {
+ if (scope.side == "left") {
+ scope.side = "right";
+ } else {
+ scope.side = "left";
+ }
+ scope.render();
+ };
+ }
+ };
+});
+
+function DiffListController($scope) {
+ // Label each kind of differ for the sort buttons.
$scope.differs = [
{
"title": "Different Pixels"
@@ -7,16 +84,20 @@ function DiffViewController($scope) {
"title": "Perceptual Difference"
}
];
- $scope.sortIndex = 1;
+
+ // Puts the records within AngularJS scope
$scope.records = SkPDiffRecords.records;
- $scope.highlight = function(differName) {
- console.debug(differName);
- }
- $scope.setSortIndex = function(a) {
- $scope.sortIndex = a;
- }
- $scope.sortingDiffer = function(a) {
- console.debug($scope.sortIndex);
- return a.diffs[$scope.sortIndex].result;
- }
-}
+
+ // Indicates which diff metric is used for sorting
+ $scope.sortIndex = 1;
+
+ // Called by the sort buttons to adjust the metric used for sorting
+ $scope.setSortIndex = function(idx) {
+ $scope.sortIndex = idx;
+ };
+
+ // A predicate for pulling out the number used for sorting
+ $scope.sortingDiffer = function(record) {
+ return record.diffs[$scope.sortIndex].result;
+ };
+}
« no previous file with comments | « no previous file | experimental/skpdiff/viewer.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698