VexFlow - Copyright (c) Mohit Muthanna 2010. Copyright Mohit Muthanna 2010

Author Taehoon Moon 2014

import { Vex } from './vex';
import { BoundingBox } from './boundingbox';
import { Note } from './note';
import { Clef } from './clef';
import { Glyph } from './glyph';

/** @constructor */
export class ClefNote extends Note {
  static get CATEGORY() { return 'clefnote'; }

  constructor(type, size, annotation) {
    super({ duration: 'b' });
    this.attrs.type = 'ClefNote';

    this.setType(type, size, annotation);

Note properties

    this.ignore_ticks = true;
  }

  setType(type, size, annotation) {
    this.type = type;
    this.clef_obj = new Clef(type, size, annotation);
    this.clef = this.clef_obj.clef;
    this.glyph = new Glyph(this.clef.code, this.clef.point);
    this.setWidth(this.glyph.getMetrics().width);
    return this;
  }

  getClef() {
    return this.clef;
  }

  setContext(context) {
    this.context = context;
    this.glyph.setContext(this.context);
    return this;
  }

  getBoundingBox() {
    return new BoundingBox(0, 0, 0, 0);
  }

  addToModifierContext() {
    /* overridden to ignore */
    return this;
  }

  getCategory() { return ClefNote.CATEGORY; }

  preFormat() {
    this.setPreFormatted(true);
    return this;
  }

  draw() {
    if (!this.stave) throw new Vex.RERR('NoStave', "Can't draw without a stave.");

    if (!this.glyph.getContext()) {
      this.glyph.setContext(this.context);
    }

    const abs_x = this.getAbsoluteX();

    this.glyph.setStave(this.stave);
    this.glyph.setYShift(
      this.stave.getYForLine(this.clef.line) - this.stave.getYForGlyphs());
    this.glyph.renderToStave(abs_x);

If the Vex.Flow.Clef has an annotation, such as 8va, draw it.

    if (this.clef_obj.annotation !== undefined) {
      const attachment = new Glyph(this.clef_obj.annotation.code, this.clef_obj.annotation.point);
      if (!attachment.getContext()) {
        attachment.setContext(this.context);
      }
      attachment.setStave(this.stave);
      attachment.setYShift(
        this.stave.getYForLine(this.clef_obj.annotation.line) - this.stave.getYForGlyphs());
      attachment.setXShift(this.clef_obj.annotation.x_shift);
      attachment.renderToStave(abs_x);
    }
  }
}
h