summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndré Nusser <andre.nusser@googlemail.com>2018-06-10 13:53:06 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2018-08-12 11:13:52 +0200
commitb64e858af397e51c1f1bad95a1747a54a85ab744 (patch)
tree9ebfee051a86b16906ab850eb75af0d1bc70b98c
parent3d218d5991a253f8d6a12db73908bead34d3e2da (diff)
Add instrument label and highlight of drums.
-rw-r--r--plugingui/colour.cc4
-rw-r--r--plugingui/colour.h2
-rw-r--r--plugingui/drumkittab.cc51
-rw-r--r--plugingui/drumkittab.h8
4 files changed, 62 insertions, 3 deletions
diff --git a/plugingui/colour.cc b/plugingui/colour.cc
index 70aa562..02d03c6 100644
--- a/plugingui/colour.cc
+++ b/plugingui/colour.cc
@@ -62,7 +62,9 @@ Colour& Colour::operator=(const Colour& other)
bool Colour::operator==(const Colour& other) const
{
- return data == other.data;
+ return data[0] == other.data[0] &&
+ data[1] == other.data[1] &&
+ data[2] == other.data[2];
}
bool Colour::operator!=(const Colour& other) const
diff --git a/plugingui/colour.h b/plugingui/colour.h
index 232b0b9..0bfe80d 100644
--- a/plugingui/colour.h
+++ b/plugingui/colour.h
@@ -59,7 +59,7 @@ struct ColourHasher
// TODO: replace by something reasonable
std::size_t operator()(const Colour& colour) const
{
- return 7*colour.red() + 11*colour.green() + 13*colour.blue() + 17*colour.alpha();
+ return 7*colour.red() + 11*colour.green() + 13*colour.blue()/* + 17*colour.alpha()*/;
}
};
diff --git a/plugingui/drumkittab.cc b/plugingui/drumkittab.cc
index d9123ea..74d4a64 100644
--- a/plugingui/drumkittab.cc
+++ b/plugingui/drumkittab.cc
@@ -29,6 +29,9 @@
#include <iomanip>
#include <sstream>
+// FIXME
+#include <iostream>
+
#include "cpp11fix.h" // required for c++11
#include "painter.h"
#include "settings.h"
@@ -50,6 +53,9 @@ DrumkitTab::DrumkitTab(Widget* parent,
velocity_label.move(10, height()-velocity_label.height()-5);
updateVelocityLabel();
velocity_label.resizeToText();
+
+ instrument_name_label.move(velocity_label.width()+30, height()-instrument_name_label.height()-5);
+ updateInstrumentLabel();
}
void DrumkitTab::resize(std::size_t width, std::size_t height)
@@ -66,10 +72,33 @@ void DrumkitTab::resize(std::size_t width, std::size_t height)
}
velocity_label.move(10, height-velocity_label.height()-5);
+ instrument_name_label.move(velocity_label.width()+30, height-instrument_name_label.height()-5);
}
void DrumkitTab::buttonEvent(ButtonEvent* buttonEvent)
{
+ if (map_image) {
+ if (buttonEvent->button == MouseButton::right) {
+ if (buttonEvent->direction == GUI::Direction::down) {
+ Painter painter(*this);
+ painter.drawImage(drumkit_image_x, drumkit_image_y, *map_image);
+ redraw();
+
+ shows_overlay = true;
+ return;
+ }
+ if (buttonEvent->direction == GUI::Direction::up) {
+ Painter painter(*this);
+ painter.clear();
+ painter.drawImage(drumkit_image_x, drumkit_image_y, *drumkit_image);
+ redraw();
+
+ shows_overlay = false;
+ return;
+ }
+ }
+ }
+
if (buttonEvent->button == MouseButton::left &&
buttonEvent->direction == GUI::Direction::down)
{
@@ -87,9 +116,22 @@ void DrumkitTab::scrollEvent(ScrollEvent* scrollEvent)
triggerAudition(scrollEvent->x, scrollEvent->y);
}
+void DrumkitTab::mouseLeaveEvent()
+{
+ if (map_image && shows_overlay) {
+ Painter painter(*this);
+ painter.clear();
+ painter.drawImage(drumkit_image_x, drumkit_image_y, *drumkit_image);
+ redraw();
+
+ shows_overlay = false;
+ }
+}
+
void DrumkitTab::triggerAudition(int x, int y)
{
auto map_colour = map_image->getPixel(x - drumkit_image_x, y - drumkit_image_y);
+ if (map_colour.alpha() == 0.0) { return; }
auto it = colour_to_instrument.find(map_colour);
if (it == colour_to_instrument.end())
@@ -100,6 +142,9 @@ void DrumkitTab::triggerAudition(int x, int y)
++settings.audition_counter;
settings.audition_instrument = it->second;
settings.audition_velocity = current_velocity;
+
+ current_instrument = it->second;
+ updateInstrumentLabel();
}
void DrumkitTab::updateVelocityLabel()
@@ -109,6 +154,12 @@ void DrumkitTab::updateVelocityLabel()
velocity_label.setText("Velocity: " + stream.str());
}
+void DrumkitTab::updateInstrumentLabel()
+{
+ instrument_name_label.setText("Instrument: " + current_instrument);
+ instrument_name_label.resizeToText();
+}
+
void DrumkitTab::loadImageFiles(std::string const& image_file, std::string const& map_file)
{
drumkit_image = std::make_unique<Image>(image_file);
diff --git a/plugingui/drumkittab.h b/plugingui/drumkittab.h
index 89f37be..cd1d731 100644
--- a/plugingui/drumkittab.h
+++ b/plugingui/drumkittab.h
@@ -55,12 +55,16 @@ public:
void resize(std::size_t width, std::size_t height) override;
void buttonEvent(ButtonEvent* buttonEvent) override;
void scrollEvent(ScrollEvent* scrollEvent) override;
+ void mouseLeaveEvent() override;
void loadImageFiles(std::string const& image_file, std::string const& map_file);
private:
- float current_velocity = .5;
+ float current_velocity{.5};
+ std::string current_instrument{""};
+
std::unordered_map<Colour, std::string, ColourHasher> colour_to_instrument;
+ bool shows_overlay{false};
std::unique_ptr<Image> drumkit_image;
std::unique_ptr<Image> map_image;
@@ -68,6 +72,7 @@ private:
int drumkit_image_y;
Label velocity_label{this};
+ Label instrument_name_label{this};
Settings& settings;
// SettingsNotifier& settings_notifier;
@@ -75,6 +80,7 @@ private:
void triggerAudition(int x, int y);
void updateVelocityLabel();
+ void updateInstrumentLabel();
};
} // GUI::