support for attached buttons
This commit is contained in:
parent
c8cb89faa9
commit
957eab570e
@ -116,10 +116,10 @@ QtQuickControlStyle.ButtonStyle {
|
|||||||
id: roundButtonDelegate
|
id: roundButtonDelegate
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
property QtObject margins: QtObject {
|
property QtObject margins: QtObject {
|
||||||
property int left: delegate.width/8
|
property int left: control.width/8
|
||||||
property int top: delegate.width/8
|
property int top: control.width/8
|
||||||
property int right: delegate.width/8
|
property int right: control.width/8
|
||||||
property int bottom: delegate.width/8
|
property int bottom: control.width/8
|
||||||
}
|
}
|
||||||
property alias hasOverState: roundShadow.hasOverState
|
property alias hasOverState: roundShadow.hasOverState
|
||||||
Private.RoundShadow {
|
Private.RoundShadow {
|
||||||
@ -162,6 +162,7 @@ QtQuickControlStyle.ButtonStyle {
|
|||||||
Component {
|
Component {
|
||||||
id: buttonComponent
|
id: buttonComponent
|
||||||
Item {
|
Item {
|
||||||
|
id: buttonSurface
|
||||||
implicitHeight: Math.floor(Math.max(theme.mSize(theme.defaultFont).height*1.6, style.minimumHeight))
|
implicitHeight: Math.floor(Math.max(theme.mSize(theme.defaultFont).height*1.6, style.minimumHeight))
|
||||||
|
|
||||||
implicitWidth: {
|
implicitWidth: {
|
||||||
@ -171,8 +172,19 @@ QtQuickControlStyle.ButtonStyle {
|
|||||||
Math.max(theme.mSize(theme.defaultFont).width*12, style.minimumWidth);
|
Math.max(theme.mSize(theme.defaultFont).width*12, style.minimumWidth);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Connections {
|
||||||
|
target: control
|
||||||
|
onHoveredChanged: {
|
||||||
|
if (control.hovered) {
|
||||||
|
button.z += 2
|
||||||
|
} else {
|
||||||
|
button.z -= 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Private.ButtonShadow {
|
Private.ButtonShadow {
|
||||||
|
id: shadow
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
state: {
|
state: {
|
||||||
if (control.pressed) {
|
if (control.pressed) {
|
||||||
@ -195,6 +207,56 @@ QtQuickControlStyle.ButtonStyle {
|
|||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
imagePath: "widgets/button"
|
imagePath: "widgets/button"
|
||||||
prefix: "normal"
|
prefix: "normal"
|
||||||
|
|
||||||
|
enabledBorders: {
|
||||||
|
if (control.flat || !control.parent ||
|
||||||
|
control.parent.width < control.parent.implicitWidth ||
|
||||||
|
control.parent.checkedButton === undefined ||
|
||||||
|
!bordersSvg.hasElement("pressed-hint-compose-over-border")) {
|
||||||
|
if (shadows !== null) {
|
||||||
|
shadows.destroy()
|
||||||
|
}
|
||||||
|
return "AllBorders"
|
||||||
|
}
|
||||||
|
|
||||||
|
var borders = new Array()
|
||||||
|
if (control.x == 0) {
|
||||||
|
borders.push("LeftBorder")
|
||||||
|
shadow.anchors.leftMargin = 0;
|
||||||
|
} else {
|
||||||
|
shadow.anchors.leftMargin = -1;
|
||||||
|
}
|
||||||
|
if (control.y == 0) {
|
||||||
|
borders.push("TopBorder")
|
||||||
|
shadow.anchors.topMargin = 0;
|
||||||
|
} else {
|
||||||
|
shadow.anchors.topMargin = -1;
|
||||||
|
}
|
||||||
|
if (control.x + control.width >= control.parent.width) {
|
||||||
|
borders.push("RightBorder")
|
||||||
|
shadow.anchors.rightMargin = 0;
|
||||||
|
} else {
|
||||||
|
shadow.anchors.rightMargin = -1;
|
||||||
|
}
|
||||||
|
if (control.y + control.height >= control.parent.height) {
|
||||||
|
borders.push("BottomBorder")
|
||||||
|
shadow.anchors.bottomMargin = 0;
|
||||||
|
} else {
|
||||||
|
shadow.anchors.bottomMargin = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (shadows === null) {
|
||||||
|
shadows = shadowsComponent.createObject(buttonSurface)
|
||||||
|
}
|
||||||
|
|
||||||
|
return borders.join("|")
|
||||||
|
}
|
||||||
|
|
||||||
|
PlasmaCore.Svg {
|
||||||
|
id: bordersSvg
|
||||||
|
imagePath: "widgets/button"
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PlasmaCore.FrameSvgItem {
|
PlasmaCore.FrameSvgItem {
|
||||||
@ -202,9 +264,71 @@ QtQuickControlStyle.ButtonStyle {
|
|||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
imagePath: "widgets/button"
|
imagePath: "widgets/button"
|
||||||
prefix: "pressed"
|
prefix: "pressed"
|
||||||
|
enabledBorders: surfaceNormal.enabledBorders
|
||||||
opacity: 0
|
opacity: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
property Item shadows
|
||||||
|
Component {
|
||||||
|
id: shadowsComponent
|
||||||
|
Item {
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
PlasmaCore.SvgItem {
|
||||||
|
svg: bordersSvg
|
||||||
|
width: naturalSize.width
|
||||||
|
elementId: (buttonSurface.state == "pressed" ? surfacePressed.prefix : surfaceNormal.prefix) + "-left"
|
||||||
|
visible: button.x > 0
|
||||||
|
anchors {
|
||||||
|
left: parent.left
|
||||||
|
top: parent.top
|
||||||
|
bottom: parent.bottom
|
||||||
|
margins: 1
|
||||||
|
leftMargin: -1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PlasmaCore.SvgItem {
|
||||||
|
svg: bordersSvg
|
||||||
|
width: naturalSize.width
|
||||||
|
elementId: (buttonSurface.state == "pressed" ? surfacePressed.prefix : surfaceNormal.prefix) + "-right"
|
||||||
|
visible: button.x + button.width < button.parent.width
|
||||||
|
anchors {
|
||||||
|
right: parent.right
|
||||||
|
top: parent.top
|
||||||
|
bottom: parent.bottom
|
||||||
|
margins: 1
|
||||||
|
rightMargin: -1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PlasmaCore.SvgItem {
|
||||||
|
svg: bordersSvg
|
||||||
|
height: naturalSize.height
|
||||||
|
elementId: (buttonSurface.state == "pressed" ? surfacePressed.prefix : surfaceNormal.prefix) + "-top"
|
||||||
|
visible: button.y > 0
|
||||||
|
anchors {
|
||||||
|
left: parent.left
|
||||||
|
top: parent.top
|
||||||
|
right: parent.right
|
||||||
|
margins: 1
|
||||||
|
topMargin: -1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PlasmaCore.SvgItem {
|
||||||
|
svg: bordersSvg
|
||||||
|
height: naturalSize.height
|
||||||
|
elementId: (buttonSurface.state == "pressed" ? surfacePressed.prefix : surfaceNormal.prefix) + "-bottom"
|
||||||
|
visible: button.y + button.height < button.parent.height
|
||||||
|
anchors {
|
||||||
|
left: parent.left
|
||||||
|
right: parent.right
|
||||||
|
bottom: parent.bottom
|
||||||
|
margins: 1
|
||||||
|
bottomMargin: -1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
state: (control.pressed || control.checked ? "pressed" : (control.hovered ? "hover" : "normal"))
|
state: (control.pressed || control.checked ? "pressed" : (control.hovered ? "hover" : "normal"))
|
||||||
|
|
||||||
states: [
|
states: [
|
||||||
|
Loading…
x
Reference in New Issue
Block a user