Skip to content
Snippets Groups Projects
Commit 58a8d1ad authored by SeeLook's avatar SeeLook
Browse files

Guitar.qml emits note when clicked.

parent 0e203314
No related branches found
No related tags found
No related merge requests found
......@@ -36,6 +36,7 @@ TguitarBg::TguitarBg(QQuickItem* parent) :
setRenderTarget(QQuickPaintedItem::FramebufferObject);
// setPerformanceHint(QQuickPaintedItem::FastFBOResizing);
setAntialiasing(true);
setAcceptedMouseButtons(Qt::LeftButton);
setTune();
}
......@@ -48,6 +49,13 @@ QPointF TguitarBg::fretToPos(const TfingerPos& pos) {
}
void TguitarBg::setNote(const Tnote& n) {
if (n != m_note) {
}
}
qreal TguitarBg::xiiFret() const {
return static_cast<qreal>(m_fretsPos[11]);
}
......@@ -59,7 +67,7 @@ void TguitarBg::paint(QPainter* painter) {
// painter->fillRect(painter->viewport(), qApp->palette().window().color());
// FINGERBOARD
painter->setPen(QPen(Qt::black, 0, Qt::NoPen));
painter->setPen(Qt::NoPen);
if (GLOB->instrument().type() == Tinstrument::ClassicalGuitar)
painter->setBrush(QBrush(Qt::black, Qt::SolidPattern));
else {
......@@ -206,7 +214,14 @@ void TguitarBg::paint(QPainter* painter) {
}
}
}
void TguitarBg::setReadOnly(bool ro) {
if (ro != m_readOnly) {
m_readOnly = ro;
setAcceptedMouseButtons(m_readOnly ? Qt::NoButton : Qt::LeftButton);
}
}
//#################################################################################################
......@@ -261,6 +276,19 @@ void TguitarBg::hoverMoveEvent(QHoverEvent* event) {
paintFingerAtPoint(event->pos());
}
void TguitarBg::mousePressEvent(QMouseEvent* event) {
if (event->buttons() & Qt::LeftButton) {
if (m_curStr < 7) {
m_note.setChromatic(GLOB->Gtune()->str(m_curStr + 1).chromatic() + m_curFret);
if (GLOB->GpreferFlats)
m_note = m_note.showWithFlat();
emit noteChanged();
}
}
}
//################################################################################################
//################################################ PROTECTED #####################################
//################################################################################################
......
......@@ -21,7 +21,8 @@
#include "nootkacoreglobal.h"
#include <tfingerpos.h>
#include "tfingerpos.h"
#include "music/tnote.h"
#include <QtQuick/qquickpainteditem.h>
......@@ -42,6 +43,8 @@ class NOOTKACORE_EXPORT TguitarBg : public QQuickPaintedItem
Q_PROPERTY(int string READ currentString NOTIFY stringChanged)
Q_PROPERTY(qreal xiiFret READ xiiFret NOTIFY stringsGapChanged)
Q_PROPERTY(QRect fbRect READ fbRect NOTIFY stringsGapChanged)
Q_PROPERTY(bool readOnly READ readOnly WRITE setReadOnly)
Q_PROPERTY(Tnote note READ note WRITE setNote NOTIFY noteChanged)
public:
......@@ -67,6 +70,9 @@ public:
QPointF fingerPos() { return m_fingerPos; }
Tnote note() const { return m_note; }
void setNote(const Tnote& n);
void paint(QPainter* painter) override;
/**
......@@ -83,18 +89,23 @@ public:
Q_INVOKABLE qreal strWidth(int str) { return m_strWidth[str]; }
bool readOnly() const { return m_readOnly; }
void setReadOnly(bool ro);
signals:
void activeChanged();
void fretWidthChanged();
void stringsGapChanged();
void fingerPosChanged();
void stringChanged();
void noteChanged();
protected:
void geometryChanged(const QRectF& newGeometry, const QRectF& oldGeometry) override;
void hoverEnterEvent(QHoverEvent*) override;
void hoverLeaveEvent(QHoverEvent*) override;
void hoverMoveEvent(QHoverEvent* event) override;
void mousePressEvent(QMouseEvent* event) override;
void paintFingerAtPoint(QPoint p);
......@@ -115,7 +126,9 @@ private:
QColor m_strColors[6];
bool m_active;
bool m_readOnly = false;
QPointF m_fingerPos;
Tnote m_note;
};
......
......@@ -10,13 +10,19 @@ import Nootka 1.0
Item {
id: root
anchors.fill: parent
property alias note: guitar.note
// private
property var bodyPix: ["", "-electro", "-bass"]
anchors.fill: parent
TguitarBg {
id: guitar
anchors.fill: parent
onNoteChanged: {
selectedFinger.x = fingerPos.x;
selectedFinger.y = fingerPos.y - selectedFinger.height * 0.15
}
}
Image { // body
......@@ -39,13 +45,22 @@ Item {
z: -1
}
Rectangle {
id: selectedFinger
color: Qt.rgba(0.2, 0.6, 1.0, 1.0)
width: guitar.fretWidth / 1.6
height: width * 0.65
radius: width * 0.5
visible: x != 0
}
Rectangle {
id: finger
color: Qt.rgba(1, 0, 0.5, 0.78)
width: guitar.fretWidth / 1.6
height: width * 0.65
radius: width * 0.5
x: guitar.fingerPos.x;
x: guitar.fingerPos.x
y: guitar.fingerPos.y - height * 0.15
visible: false
}
......
......@@ -10,11 +10,11 @@ Item {
signal note(var n)
height: nootkaWindow.height / 5 //4
height: nootkaWindow.height / 4 //5 for piano
width: nootkaWindow.width
Component.onCompleted: {
var c = Qt.createComponent("qrc:/Piano.qml")
var c = Qt.createComponent("qrc:/Guitar.qml")
instrument = c.createObject(root, {"anchors.fill": root})
instrument.onNoteChanged.connect(callNote)
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment