import QtQuick 2.0 Item { id: keyItem width: 45 height: 50 property string glyph: "a" property bool toggle: false // does this button have the toggle behaivor? property bool toggled: false // is this button currently toggled? property alias mouseArea: mouseArea1 function resetToggledMode(mode) { toggled = mode; if (toggled) { state = "mouseDepressed"; } else { state = ""; } } MouseArea { id: mouseArea1 width: 36 anchors.fill: parent hoverEnabled: true onCanceled: { if (toggled) { keyItem.state = "mouseDepressed"; } else { keyItem.state = ""; } } onClicked: { mouse.accepted = true; webEntity.synthesizeKeyPress(glyph); if (toggle) { toggled = !toggled; } } onDoubleClicked: { mouse.accepted = true; } onEntered: { keyItem.state = "mouseOver"; } onExited: { if (toggled) { keyItem.state = "mouseDepressed"; } else { keyItem.state = ""; } } onPressed: { keyItem.state = "mouseClicked"; mouse.accepted = true; } onReleased: { if (containsMouse) { keyItem.state = "mouseOver"; } else { if (toggled) { keyItem.state = "mouseDepressed"; } else { keyItem.state = ""; } } mouse.accepted = true; } } Rectangle { id: roundedRect width: 30 color: "#121212" radius: 2 border.color: "#00000000" anchors.right: parent.right anchors.rightMargin: 4 anchors.left: parent.left anchors.leftMargin: 4 anchors.bottom: parent.bottom anchors.bottomMargin: 4 anchors.top: parent.top anchors.topMargin: 4 } Text { id: letter y: 6 width: 50 color: "#ffffff" text: glyph style: Text.Normal font.family: "Tahoma" anchors.right: parent.right anchors.rightMargin: 0 anchors.left: parent.left anchors.leftMargin: 0 anchors.bottom: parent.bottom anchors.bottomMargin: 0 anchors.top: parent.top anchors.topMargin: 8 horizontalAlignment: Text.AlignHCenter font.pixelSize: 28 } states: [ State { name: "mouseOver" PropertyChanges { target: roundedRect color: "#121212" radius: 3 border.width: 2 border.color: "#00b4ef" } PropertyChanges { target: letter color: "#00b4ef" style: Text.Normal } }, State { name: "mouseClicked" PropertyChanges { target: roundedRect color: "#1080b8" border.width: 2 border.color: "#00b4ef" } PropertyChanges { target: letter color: "#121212" styleColor: "#00000000" style: Text.Normal } }, State { name: "mouseDepressed" PropertyChanges { target: roundedRect color: "#0578b1" border.width: 0 } PropertyChanges { target: letter color: "#121212" styleColor: "#00000000" style: Text.Normal } } ] }