Last active
September 20, 2015 18:42
-
-
Save ktryndchrs/ddc5bab88e6f95ad9bd3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Align To plugin for Sketch.app | |
* Author: Lucien Lee (Modified by Ktryn Desrochers) | |
* Version: 1.0 | |
*/ | |
function align(direction){ | |
if([selection count] < 2){ | |
[doc showMessage:"Please select 2 or more layers."] | |
}else { | |
var layers = [] | |
for (var i=0; i < [selection count]; i++){ | |
layerName = selection[i].name() | |
layers.push(layerName) | |
} | |
switch (direction){ | |
case "left": | |
var alignObj = function(frame){ | |
[frame setMinX:lowerX] | |
} | |
break; | |
case "right": | |
var alignObj = function(frame){ | |
[frame setMaxX:higherX] | |
} | |
break; | |
case "top": | |
var alignObj = function(frame){ | |
[frame setMinY:lowerY] | |
} | |
break; | |
case "bottom": | |
var alignObj = function(frame){ | |
[frame setMaxY:higherY] | |
} | |
break; | |
case "horizontal center": | |
var alignObj = function(frame){ | |
[frame setMidX:((higherMidX-lowerMidX)/2)+lowerMidX] | |
} | |
break; | |
case "vertical center": | |
var alignObj = function(frame){ | |
[frame setMidY:((higherMidY-lowerMidY)/2)+lowerMidY] | |
} | |
break; | |
case "center": | |
var alignObj = function(frame){ | |
[frame setMidX:((higherMidX-lowerMidX)/2)+lowerMidX] | |
[frame setMidY:((higherMidY-lowerMidY)/2)+lowerMidY] | |
} | |
break; | |
} | |
var lowerX = 999999999999999999 | |
var higherX = 0 | |
var lowerY = 999999999999999999 | |
var higherY = 0 | |
var lowerMidX = 999999999999999999 | |
var higherMidX = 0 | |
var lowerMidY = 999999999999999999 | |
var higherMidY = 0 | |
for (var i=0; i < [selection count]; i++){ | |
layer = [selection objectAtIndex:i] | |
curFrame = [layer frame] | |
if ([curFrame minX] <= lowerX){ | |
lowerX = [curFrame minX] | |
} | |
if ([curFrame maxX] >= higherX){ | |
higherX = [curFrame maxX] | |
} | |
if ([curFrame minY] <= lowerY){ | |
lowerY = [curFrame minY] | |
} | |
if ([curFrame maxY] >= higherY){ | |
higherY = [curFrame maxY] | |
} | |
if ([curFrame midX] <= lowerMidX){ | |
lowerMidX = [curFrame midX] | |
} | |
if ([curFrame midX] >= higherMidX){ | |
higherMidX = [curFrame midX] | |
} | |
if ([curFrame midY] <= lowerMidY){ | |
lowerMidY = [curFrame midY] | |
} | |
if ([curFrame midY] >= higherMidY){ | |
higherMidY = [curFrame midY] | |
} | |
} | |
for (var i=0; i < [selection count]+1; i++){ | |
layer = [selection objectAtIndex:i] | |
frame = [layer frame] | |
alignObj(frame) | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment