- SCM cstyle = a->get_property ("cautionary-style");
- parens = ly_is_equal (cstyle, ly_symbol2scm ("parentheses"));
- }
-
- SCM accs = a->get_property ("accidentals");
- SCM scm_style = a->get_property ("style");
- if (!scm_is_symbol (scm_style)
- && !parens
- && scm_ilength (accs) == 1)
- {
- switch (scm_to_int (scm_car (accs)))
- {
- case FLAT:
- {
- Box stem = b;
- Box bulb = b;
-
- /*
- we could make the stem thinner, but that places the flats
- really close.
- */
- stem[X_AXIS][RIGHT] *= .5;
-
- /*
- To prevent vertical alignment for 6ths
- */
- stem[Y_AXIS] *= 1.1;
- bulb[Y_AXIS][UP] *= .35;
-
- boxes.push_back (bulb);
- boxes.push_back (stem);
- }
- break;
- case NATURAL:
- {
- Box lstem = b;
- Box rstem = b;
- Box belly = b;
-
- lstem[Y_AXIS] *= 1.1;
- rstem[Y_AXIS] *= 1.1;
-
- belly[Y_AXIS] *= 0.75;
- lstem[X_AXIS][RIGHT] *= .33;
- rstem[X_AXIS][LEFT] = rstem[X_AXIS].linear_combination (1.0 / 3.0);
- lstem[Y_AXIS][DOWN] = belly[Y_AXIS][DOWN];
- rstem[Y_AXIS][UP] = belly[Y_AXIS][UP];
- boxes.push_back (belly);
- boxes.push_back (lstem);
- boxes.push_back (rstem);
- }
- break;
- /*
- TODO: add support for, double flat.
- */
- }
+ // a bit more padding for the right of the stem
+ // we raise the stem horizontally to a bit less than the average
+ // horizontal "height" of the entire glyph. This will bring flats
+ // closer to doubleflats, which looks better (MS opinion).
+ // this should work for all fonts where the flat is not
+ // completely bizarre
+ Real left = my_stencil->extent (X_AXIS)[LEFT];
+ Real right = my_stencil->extent (X_AXIS)[RIGHT] * 0.375;
+ Real down = my_stencil->extent (Y_AXIS)[DOWN];
+ Real up = my_stencil->extent (Y_AXIS)[UP];
+ vector<Box> boxes;
+ boxes.push_back (Box (Interval (left, right), Interval (down, up)));
+ Skyline merge_with_me (boxes, Y_AXIS, RIGHT);
+ (*sky)[RIGHT].merge (merge_with_me);