Last active
August 29, 2015 14:03
-
-
Save tomashanacek/1150736b9b79aa269a58 to your computer and use it in GitHub Desktop.
Fit artboard to selection
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
var currentArtboard = [[[doc currentPage] artboards] firstObject]; | |
var layers = selection; | |
var bounds = getBoundsForLayers(layers); | |
for (var i = 0, len = [layers count]; i < len; ++i) { | |
var layer = [layers objectAtIndex:i]; | |
[[layer absoluteRect] setRulerX:[[layer absoluteRect] rulerX] - bounds.rulerX]; | |
[[layer absoluteRect] setRulerY:[[layer absoluteRect] rulerY] - bounds.rulerY]; | |
} | |
var newFrame = [MSRect rectWithX:bounds.left - bounds.rulerX y:bounds.top - bounds.rulerY width:bounds.width height:bounds.height]; | |
[currentArtboard setFrame:newFrame]; | |
function layerBounds(layer) { | |
var layerRect = [layer absoluteRect]; | |
var left = [layerRect x]; | |
var top = [layerRect y]; | |
var width = [layerRect width]; | |
var height = [layerRect height]; | |
var rulerX = [[layer absoluteRect] rulerX]; | |
var rulerY = [[layer absoluteRect] rulerY]; | |
return { | |
left: left, | |
top: top, | |
right: left + width, | |
bottom: top + height, | |
width: width, | |
height: height, | |
rulerX: rulerX, | |
rulerY: rulerY | |
}; | |
} | |
function extendBounds(original, extension) { | |
var top = Math.min(original.top, extension.top); | |
var left = Math.min(original.left, extension.left); | |
var rulerX = Math.min(original.rulerX, extension.rulerX); | |
var rulerY = Math.min(original.rulerY, extension.rulerY); | |
var bottom = Math.max(original.bottom, extension.bottom); | |
var right = Math.max(original.right, extension.right); | |
var width = right - left; | |
var height = bottom - top; | |
return { | |
left: left, | |
top: top, | |
right: left + width, | |
bottom: top + height, | |
width: width, | |
height: height, | |
rulerX: rulerX, | |
rulerY: rulerY | |
}; | |
} | |
function getBoundsForLayers(layers) { | |
var bounds = layerBounds(layers[0]); | |
for (var i = 1, len = [layers count]; i < len; ++i) { | |
var layer = [layers objectAtIndex:i]; | |
bounds = extendBounds(bounds, layerBounds(layer)); | |
} | |
return bounds; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment