Skip to content

Commit

Permalink
Update seq block cursor
Browse files Browse the repository at this point in the history
  • Loading branch information
FangCunWuChang committed May 27, 2024
1 parent 3c1ed41 commit ad0ecce
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 37 deletions.
123 changes: 86 additions & 37 deletions src/ui/component/sequencer/SeqTrackContentViewer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -365,10 +365,6 @@ void SeqTrackContentViewer::paint(juce::Graphics& g) {
}

void SeqTrackContentViewer::mouseMove(const juce::MouseEvent& event) {
/** Size */
auto screenSize = utils::getScreenSize(this);
int blockJudgeWidth = screenSize.getWidth() * 0.005;

/** Move */
if (Tools::getInstance()->getType() == Tools::Type::Hand) {
this->setMouseCursor(juce::MouseCursor::DraggingHandCursor);
Expand All @@ -377,6 +373,72 @@ void SeqTrackContentViewer::mouseMove(const juce::MouseEvent& event) {

/** Block */
float posX = event.position.getX();
std::tuple<SeqTrackContentViewer::BlockControllerType, int> blockController;
switch (Tools::getInstance()->getType()) {
case Tools::Type::Arrow:
case Tools::Type::Eraser:
case Tools::Type::Scissors:
blockController = this->getBlockControllerWithoutEdge(posX);
break;
case Tools::Type::Magic:
case Tools::Type::Pencil:
blockController = this->getBlockController(posX);
break;
}

if (std::get<0>(blockController) == BlockControllerType::Left) {
this->setMouseCursor(juce::MouseCursor::LeftEdgeResizeCursor);
return;
}
else if (std::get<0>(blockController) == BlockControllerType::Right) {
this->setMouseCursor(juce::MouseCursor::RightEdgeResizeCursor);
return;
}
else if (std::get<0>(blockController) == BlockControllerType::Inside) {
this->setMouseCursor(juce::MouseCursor::PointingHandCursor);
return;
}

this->setMouseCursor(juce::MouseCursor::NormalCursor);
}

void SeqTrackContentViewer::updateBlockInternal(int blockIndex) {
if (auto temp = this->blockTemp[blockIndex]) {
std::tie(temp->startTime, temp->endTime, temp->offset)
= quickAPI::getBlock(this->index, blockIndex);
}
}

void SeqTrackContentViewer::setAudioPointTempInternal(
const juce::Array<juce::MemoryBlock>& temp) {
this->audioPointTemp = temp;
}

void SeqTrackContentViewer::updateMIDINoteTempInternal() {
/** Get Note Zone */
int minNote = 127, maxNote = 0;
int midiTracks = this->midiDataTemp.getNumTracks();
for (int i = 0; i < midiTracks; i++) {
auto track = this->midiDataTemp.getTrack(i);
for (auto e : (*track)) {
if (e->message.isNoteOn(true)) {
minNote = std::min(minNote, e->message.getNoteNumber());
maxNote = std::max(maxNote, e->message.getNoteNumber());
}
}
}
if (maxNote < minNote) { maxNote = minNote = 0; }
this->midiMinNote = minNote;
this->midiMaxNote = maxNote;
}

std::tuple<SeqTrackContentViewer::BlockControllerType, int>
SeqTrackContentViewer::getBlockController(float posX) const {
/** Size */
auto screenSize = utils::getScreenSize(this);
int blockJudgeWidth = screenSize.getWidth() * 0.005;

/** Get Each Block */
for (int i = 0; i < this->blockTemp.size(); i++) {
/** Get Block Time */
auto block = this->blockTemp.getUnchecked(i);
Expand Down Expand Up @@ -405,50 +467,37 @@ void SeqTrackContentViewer::mouseMove(const juce::MouseEvent& event) {
}
}

/** Set Cursor */
/** Get Controller */
if (posX >= judgeSSX && posX < judgeSEX) {
this->setMouseCursor(juce::MouseCursor::LeftEdgeResizeCursor);
return;
return { BlockControllerType::Left, i };
}
else if (posX >= judgeESX && posX < judgeEEX) {
this->setMouseCursor(juce::MouseCursor::RightEdgeResizeCursor);
return;
return { BlockControllerType::Right, i };
}
else if (posX >= judgeSEX && posX < judgeESX) {
this->setMouseCursor(juce::MouseCursor::PointingHandCursor);
return;
return { BlockControllerType::Inside, i };
}
}

this->setMouseCursor(juce::MouseCursor::NormalCursor);
/** None */
return { BlockControllerType::None, -1 };
}

void SeqTrackContentViewer::updateBlockInternal(int blockIndex) {
if (auto temp = this->blockTemp[blockIndex]) {
std::tie(temp->startTime, temp->endTime, temp->offset)
= quickAPI::getBlock(this->index, blockIndex);
}
}

void SeqTrackContentViewer::setAudioPointTempInternal(
const juce::Array<juce::MemoryBlock>& temp) {
this->audioPointTemp = temp;
}
std::tuple<SeqTrackContentViewer::BlockControllerType, int>
SeqTrackContentViewer::getBlockControllerWithoutEdge(float posX) const {
/** Get Each Block */
for (int i = 0; i < this->blockTemp.size(); i++) {
/** Get Block Time */
auto block = this->blockTemp.getUnchecked(i);
float startX = (block->startTime - this->secStart) / (this->secEnd - this->secStart) * this->getWidth();
float endX = (block->endTime - this->secStart) / (this->secEnd - this->secStart) * this->getWidth();

void SeqTrackContentViewer::updateMIDINoteTempInternal() {
/** Get Note Zone */
int minNote = 127, maxNote = 0;
int midiTracks = this->midiDataTemp.getNumTracks();
for (int i = 0; i < midiTracks; i++) {
auto track = this->midiDataTemp.getTrack(i);
for (auto e : (*track)) {
if (e->message.isNoteOn(true)) {
minNote = std::min(minNote, e->message.getNoteNumber());
maxNote = std::max(maxNote, e->message.getNoteNumber());
}
/** Set Cursor */
if (posX >= startX && posX < endX) {
return { BlockControllerType::Inside, i };
}
}
if (maxNote < minNote) { maxNote = minNote = 0; }
this->midiMinNote = minNote;
this->midiMaxNote = maxNote;

/** None */
return { BlockControllerType::None, -1 };
}
6 changes: 6 additions & 0 deletions src/ui/component/sequencer/SeqTrackContentViewer.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,5 +46,11 @@ class SeqTrackContentViewer final : public juce::Component {
void setAudioPointTempInternal(const juce::Array<juce::MemoryBlock>& temp);
void updateMIDINoteTempInternal();

enum class BlockControllerType {
None, Left, Right, Inside
};
std::tuple<BlockControllerType, int> getBlockController(float posX) const;
std::tuple<BlockControllerType, int> getBlockControllerWithoutEdge(float posX) const;

JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(SeqTrackContentViewer)
};

0 comments on commit ad0ecce

Please sign in to comment.