Skip to content

Instantly share code, notes, and snippets.

@tomashanacek
Last active August 29, 2015 14:03
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tomashanacek/1150736b9b79aa269a58 to your computer and use it in GitHub Desktop.
Save tomashanacek/1150736b9b79aa269a58 to your computer and use it in GitHub Desktop.
Fit artboard to selection
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