forked from mia/Aegisub
Karaoke splitter now allows splitting before first and after last character in syllables.
Originally committed to SVN as r426.
This commit is contained in:
parent
f33dc46a5f
commit
b5b04260a0
1 changed files with 17 additions and 10 deletions
|
@ -357,14 +357,21 @@ void AudioKaraoke::OnPaint(wxPaintEvent &event) {
|
||||||
if (dc.GetPartialTextExtents(temptext, widths)) {
|
if (dc.GetPartialTextExtents(temptext, widths)) {
|
||||||
for (unsigned int i = 0; i < syl.pending_splits.size(); i++) {
|
for (unsigned int i = 0; i < syl.pending_splits.size(); i++) {
|
||||||
dc.SetPen(wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT));
|
dc.SetPen(wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT));
|
||||||
dc.DrawLine(dx+4+widths[syl.pending_splits[i]], 0, dx+4+widths[syl.pending_splits[i]], h);
|
int splitxpos = dx + 4;
|
||||||
|
// Handle splitters placed before first char in syllable; these are represented as -1
|
||||||
|
if (syl.pending_splits[i] >= 0) {
|
||||||
|
splitxpos += widths[syl.pending_splits[i]];
|
||||||
|
} else {
|
||||||
|
splitxpos += 0;
|
||||||
|
}
|
||||||
|
dc.DrawLine(splitxpos, 0, splitxpos, h);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
wxLogError(_T("WTF? Failed to GetPartialTextExtents"));
|
wxLogError(_T("WTF? Failed to GetPartialTextExtents"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (splitting && split_cursor_syl == i && split_cursor_x > 0) {
|
if (splitting && split_cursor_syl == i /*&& split_cursor_x > 0*/) {
|
||||||
dc.SetPen(*wxRED);
|
dc.SetPen(*wxRED);
|
||||||
dc.DrawLine(dx+4+split_cursor_x, 0, dx+4+split_cursor_x, h);
|
dc.DrawLine(dx+4+split_cursor_x, 0, dx+4+split_cursor_x, h);
|
||||||
dc.SetPen(wxPen(wxColour(0,0,0)));
|
dc.SetPen(wxPen(wxColour(0,0,0)));
|
||||||
|
@ -440,14 +447,14 @@ void AudioKaraoke::OnMouse(wxMouseEvent &event) {
|
||||||
|
|
||||||
// Find the character closest to the mouse
|
// Find the character closest to the mouse
|
||||||
int rx = x - syl.display_x - 4;
|
int rx = x - syl.display_x - 4;
|
||||||
int split_cursor_char = -1;
|
int split_cursor_char = -2;
|
||||||
split_cursor_syl = -1;
|
split_cursor_syl = -1;
|
||||||
split_cursor_x = -1;
|
split_cursor_x = -1;
|
||||||
if (syl.contents.Len() >= 2) {
|
if (syl.contents.Len() > 0) {
|
||||||
int lastx = widths[0];
|
int lastx = 0;
|
||||||
split_cursor_syl = syli;
|
split_cursor_syl = syli;
|
||||||
for (unsigned int i = 1; i < widths.size()-1; i++) {
|
for (unsigned int i = 0; i < widths.size(); i++) {
|
||||||
//wxLogDebug(_T("rx=%d, lastx=%d, widths[i]=%d, i=%d, widths.size()=%d, syli=%d"), rx, lastx, widths[i], i, widths.size(), syli);
|
wxLogDebug(_T("rx=%d, lastx=%d, widths[i]=%d, i=%d, widths.size()=%d, syli=%d"), rx, lastx, widths[i], i, widths.size(), syli);
|
||||||
if (lastx - rx < widths[i] - rx) {
|
if (lastx - rx < widths[i] - rx) {
|
||||||
if (rx - lastx < widths[i] - rx) {
|
if (rx - lastx < widths[i] - rx) {
|
||||||
//wxLogDebug(_T("Found at PREV!"));
|
//wxLogDebug(_T("Found at PREV!"));
|
||||||
|
@ -467,13 +474,13 @@ void AudioKaraoke::OnMouse(wxMouseEvent &event) {
|
||||||
// ie. split at next-to-last position
|
// ie. split at next-to-last position
|
||||||
if (split_cursor_x < 0) {
|
if (split_cursor_x < 0) {
|
||||||
//wxLogDebug(_T("Emergency picking LAST!"));
|
//wxLogDebug(_T("Emergency picking LAST!"));
|
||||||
split_cursor_x = widths[widths.size()-2];
|
split_cursor_x = widths[widths.size()-1];
|
||||||
split_cursor_char = widths.size() - 2;
|
split_cursor_char = widths.size() - 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do something if there was a click and we're at a valid position
|
// Do something if there was a click and we're at a valid position
|
||||||
if (event.LeftDown() && split_cursor_char >= 0) {
|
if (event.LeftDown() && split_cursor_char >= -1) {
|
||||||
//wxLogDebug(_T("A click!"));
|
//wxLogDebug(_T("A click!"));
|
||||||
int num_removed = 0;
|
int num_removed = 0;
|
||||||
std::vector<int>::iterator i = syl.pending_splits.begin();
|
std::vector<int>::iterator i = syl.pending_splits.begin();
|
||||||
|
|
Loading…
Reference in a new issue