CoolFace
Apppublic

Sebastiankay/motion-graphics-webui

sourceHugging Facemitupdated 2y agoView on Hugging Face
0likes
align.js372 linesDownload Raw Back to js
1// Center line reference2function initLines() {3  if (canvas.getItemById('center_h')) {4    canvas.remove(canvas.getItemById('center_h'));5    canvas.remove(canvas.getItemById('center_v'));6  }7  if (canvas.getItemById('line_h')) {8    canvas.remove(canvas.getItemById('line_h'));9    canvas.remove(canvas.getItemById('line_v'));10  }11 12  // Canvas center reference13  canvas.add(14    new fabric.Line(15      [16        canvas.get('width') / 2,17        0,18        canvas.get('width') / 2,19        canvas.get('height'),20      ],21      {22        opacity: 0,23        selectable: false,24        evented: false,25        id: 'center_h',26      }27    )28  );29  canvas.add(30    new fabric.Line(31      [32        0,33        canvas.get('height') / 2,34        canvas.get('width'),35        canvas.get('height') / 2,36      ],37      {38        opacity: 0,39        selectable: false,40        evented: false,41        id: 'center_v',42      }43    )44  );45 46  // Canvas alignemnt guides47  line_h = new fabric.Line(48    [49      canvas.get('width') / 2,50      artboard.get('top'),51      canvas.get('width') / 2,52      artboard.get('height') + artboard.get('top'),53    ],54    {55      stroke: 'red',56      opacity: 0,57      selectable: false,58      evented: false,59      id: 'line_h',60    }61  );62  line_v = new fabric.Line(63    [64      artboard.get('left'),65      canvas.get('height') / 2,66      artboard.get('width') + artboard.get('left'),67      canvas.get('height') / 2,68    ],69    {70      stroke: 'red',71      opacity: 0,72      selectable: false,73      evented: false,74      id: 'line_v',75    }76  );77  canvas.add(line_h);78  canvas.add(line_v);79}80 81function alignControls(object, type) {82  if (type == 'align-top') {83    object.set(84      'top',85      artboard.get('top') +86        (object.get('height') * object.get('scaleY')) / 287    );88  } else if (type == 'align-center-v') {89    object.set(90      'top',91      artboard.get('top') + artboard.get('height') / 292    );93  } else if (type == 'align-bottom') {94    object.set(95      'top',96      artboard.get('top') +97        artboard.get('height') -98        (object.get('height') * object.get('scaleY')) / 299    );100  } else if (type == 'align-left') {101    object.set(102      'left',103      artboard.get('left') +104        (object.get('width') * object.get('scaleX')) / 2105    );106  } else if (type == 'align-center-h') {107    object.set(108      'left',109      artboard.get('left') + artboard.get('width') / 2110    );111  } else {112    object.set(113      'left',114      artboard.get('left') +115        artboard.get('width') -116        (object.get('width') * object.get('scaleX')) / 2117    );118  }119}120 121// Align object122function alignObject() {123  const type = $(this).attr('id');124  const object = canvas.getActiveObject();125  console.log(canvas.getActiveObject().type);126  if (canvas.getActiveObject().type == 'activeSelection') {127    const tempselection = canvas.getActiveObject();128    canvas.discardActiveObject();129    tempselection._objects.forEach(function (object) {130      alignControls(object, type);131      canvas.renderAll();132      newKeyframe(133        'left',134        object,135        currenttime,136        object.get('left'),137        true138      );139      newKeyframe(140        'top',141        object,142        currenttime,143        object.get('top'),144        true145      );146    });147    reselect(tempselection);148  } else {149    alignControls(object, type);150    canvas.renderAll();151    newKeyframe(152      'left',153      object,154      currenttime,155      object.get('left'),156      true157    );158    newKeyframe('top', object, currenttime, object.get('top'), true);159  }160}161$(document).on('click', '.align', alignObject);162 163// Alignment guides164function centerLines(e) {165  if (!cropping) {166    line_h.opacity = 0;167    line_v.opacity = 0;168    canvas.renderAll();169    const snapZone = 5;170    const obj_left = e.target.left;171    const obj_top = e.target.top;172    const obj_width = e.target.get('width') * e.target.get('scaleX');173    const obj_height =174      e.target.get('height') * e.target.get('scaleY');175    canvas.forEachObject(function (obj, index, array) {176      // Check for horizontal snapping177      function checkHSnap(a, b, snapZone, e, type) {178        if (a > b - snapZone && a < b + snapZone) {179          line_h.opacity = 1;180          line_h.bringToFront();181          var value = b;182          if (type == 1) {183            value = b;184          } else if (type == 2) {185            value =186              b -187              (e.target.get('width') * e.target.get('scaleX')) / 2;188          } else if (type == 3) {189            value =190              b +191              (e.target.get('width') * e.target.get('scaleX')) / 2;192          }193          e.target194            .set({195              left: value,196            })197            .setCoords();198          line_h199            .set({200              x1: b,201              y1: artboard.get('top'),202              x2: b,203              y2: artboard.get('height') + artboard.get('top'),204            })205            .setCoords();206          canvas.renderAll();207        }208      }209 210      // Check for vertical snapping211      function checkVSnap(a, b, snapZone, e, type) {212        if (a > b - snapZone && a < b + snapZone) {213          line_v.opacity = 1;214          line_v.bringToFront();215          var value = b;216          if (type == 1) {217            value = b;218          } else if (type == 2) {219            value =220              b -221              (e.target.get('height') * e.target.get('scaleY')) / 2;222          } else if (type == 3) {223            value =224              b +225              (e.target.get('height') * e.target.get('scaleY')) / 2;226          }227          e.target228            .set({229              top: value,230            })231            .setCoords();232          line_v233            .set({234              y1: b,235              x1: artboard.get('left'),236              y2: b,237              x2: artboard.get('width') + artboard.get('left'),238            })239            .setCoords();240          canvas.renderAll();241        }242      }243      if (obj != e.target && obj != line_h && obj != line_v) {244        if (245          obj.get('id') == 'center_h' ||246          obj.get('id') == 'center_v'247        ) {248          var check1 = [[obj_left, obj.get('left'), 1]];249          var check2 = [[obj_top, obj.get('top'), 1]];250 251          for (var i = 0; i < check1.length; i++) {252            checkHSnap(253              check1[i][0],254              check1[i][1],255              snapZone,256              e,257              check1[i][2]258            );259            checkVSnap(260              check2[i][0],261              check2[i][1],262              snapZone,263              e,264              check2[i][2]265            );266          }267        } else {268          var check1 = [269            [obj_left, obj.get('left'), 1],270            [271              obj_left,272              obj.get('left') +273                (obj.get('width') * obj.get('scaleX')) / 2,274              1,275            ],276            [277              obj_left,278              obj.get('left') -279                (obj.get('width') * obj.get('scaleX')) / 2,280              1,281            ],282            [obj_left + obj_width / 2, obj.get('left'), 2],283            [284              obj_left + obj_width / 2,285              obj.get('left') +286                (obj.get('width') * obj.get('scaleX')) / 2,287              2,288            ],289            [290              obj_left + obj_width / 2,291              obj.get('left') -292                (obj.get('width') * obj.get('scaleX')) / 2,293              2,294            ],295            [obj_left - obj_width / 2, obj.get('left'), 3],296            [297              obj_left - obj_width / 2,298              obj.get('left') +299                (obj.get('width') * obj.get('scaleX')) / 2,300              3,301            ],302            [303              obj_left - obj_width / 2,304              obj.get('left') -305                (obj.get('width') * obj.get('scaleX')) / 2,306              3,307            ],308          ];309          var check2 = [310            [obj_top, obj.get('top'), 1],311            [312              obj_top,313              obj.get('top') +314                (obj.get('height') * obj.get('scaleY')) / 2,315              1,316            ],317            [318              obj_top,319              obj.get('top') -320                (obj.get('height') * obj.get('scaleY')) / 2,321              1,322            ],323            [obj_top + obj_height / 2, obj.get('top'), 2],324            [325              obj_top + obj_height / 2,326              obj.get('top') +327                (obj.get('height') * obj.get('scaleY')) / 2,328              2,329            ],330            [331              obj_top + obj_height / 2,332              obj.get('top') -333                (obj.get('height') * obj.get('scaleY')) / 2,334              2,335            ],336            [obj_top - obj_height / 2, obj.get('top'), 3],337            [338              obj_top - obj_height / 2,339              obj.get('top') +340                (obj.get('height') * obj.get('scaleY')) / 2,341              3,342            ],343            [344              obj_top - obj_height / 2,345              obj.get('top') -346                (obj.get('height') * obj.get('scaleY')) / 2,347              3,348            ],349          ];350 351          for (var i = 0; i < check1.length; i++) {352            checkHSnap(353              check1[i][0],354              check1[i][1],355              snapZone,356              e,357              check1[i][2]358            );359            checkVSnap(360              check2[i][0],361              check2[i][1],362              snapZone,363              e,364              check2[i][2]365            );366          }367        }368      }369    });370  }371}372