4 think about crossing stems.
9 #include "paper-def.hh"
10 #include "notehead.hh"
12 #include "molecule.hh"
20 open_right
=open_left
=false;
26 int pos1
= encompass
.top()->position
;
27 int pos2
= encompass
[0]->position
;
31 Real w
= width().length();
33 return Offset(w
/2,dy
* paper()->internote());
44 Slur::set_default_dir()
47 for (int i
=0; i
< encompass
.size(); i
++) {
48 sumpos
+= encompass
[i
]->position
;
51 /* should consult stems */
52 Real meanpos
= sumpos
/Real(encompass
.size());
53 if (meanpos
< 5) // todo
60 Slur::do_pre_processing()
62 right
= encompass
.top()->pcol_l_
;
63 left
= encompass
[0]->pcol_l_
;
67 Slur::do_break_at(PCol
*l
, PCol
*r
) const
69 assert(l
->line_l_
== r
->line_l_
);
70 Slur
*ret
= new Slur(*this);
72 ret
->encompass
.set_size(0);
73 for (int i
=0; i
< encompass
.size(); i
++) {
74 if (encompass
[i
]->pcol_l_
->line_l_
==l
->line_l_
)
75 ret
->encompass
.push(encompass
[i
]);
78 ret
->open_right
= true;
80 ret
->open_left
= true;
87 Slur::do_post_processing()
94 Slur::brew_molecule_p() const
96 Molecule
*output
= new Molecule
;
98 int minp
=1000, maxp
=-1000; // todo
99 for (int i
=0; i
<encompass
.size(); i
++) {
100 minp
= encompass
[i
]->position
<? minp
;
101 maxp
= encompass
[i
]->position
>? maxp
;
103 assert(encompass
.size()>0); // todo
105 Notehead
*lnote_p
=encompass
[0];
106 Notehead
*rnote_p
=encompass
.top();
107 int lpos_i
= lnote_p
->position
;
108 int rpos_i
= rnote_p
->position
;
109 Offset
left_off(lnote_p
->x_dir
, lpos_i
+ 2*dir_i_
);
110 Offset
right_off(lnote_p
->x_dir
, rpos_i
+ 2*dir_i_
);
111 if (!lnote_p
->extremal
)
112 left_off
+= Offset(0.5, -dir_i_
);
113 if (!rnote_p
->extremal
)
114 right_off
+= Offset(-0.5, -dir_i_
);
116 int dy
= int(right_off
.y
- left_off
.y
);
118 Real nw_f
= paper()->note_width();
119 Real nh_f
= paper()->internote();
120 Real w
= width().length();
122 w
+= (right_off
.x
- left_off
.x
) * nw_f
;
123 Real round_w
= w
; // slur lookup rounds the slurwidth .
125 Symbol sl
= paper()->lookup_p_
->slur(dy
, round_w
, dir_i_
);
127 Real error
= w
-round_w
;
130 a
.translate(Offset((left_off
.x
+ 0.5 )*nw_f
+ error
/2,