Skip to content

Instantly share code, notes, and snippets.

@ktryndchrs
Last active September 20, 2015 18:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ktryndchrs/ddc5bab88e6f95ad9bd3 to your computer and use it in GitHub Desktop.
Save ktryndchrs/ddc5bab88e6f95ad9bd3 to your computer and use it in GitHub Desktop.
/*
* 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