proton-bridge/internal/frontend/qml/ProtonUI/LogoHeader.qml

151 lines
4.3 KiB
QML

// Copyright (c) 2021 Proton Technologies AG
//
// This file is part of ProtonMail Bridge.
//
// ProtonMail Bridge is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ProtonMail Bridge is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with ProtonMail Bridge. If not, see <https://www.gnu.org/licenses/>.
// Header of window with logo and buttons
import QtQuick 2.8
import ProtonUI 1.0
import QtQuick.Window 2.2
Rectangle {
id: root
// dimensions
property Window parentWin
property string title: "ProtonMail Bridge"
property bool hasIcon : true
anchors.top : parent.top
anchors.right : parent.right
width : Style.main.width
height : Style.title.height
// style
color : Style.title.background
signal hideClicked()
// Drag to move : https://stackoverflow.com/a/18927884
MouseArea {
property variant clickPos: "1,1"
anchors.fill: parent
onPressed: {
clickPos = Qt.point(mouse.x,mouse.y)
}
onPositionChanged: {
var delta = Qt.point(mouse.x-clickPos.x, mouse.y-clickPos.y)
parentWin.x += delta.x;
parentWin.y += delta.y;
}
}
// logo
Image {
id: imgLogo
height : Style.title.imgHeight
fillMode : Image.PreserveAspectFit
visible: root.hasIcon
anchors {
left : root.left
leftMargin : Style.title.leftMargin
verticalCenter : root.verticalCenter
}
//source : "qrc://logo.svg"
source : "logo.svg"
smooth : true
}
TextMetrics {
id: titleMetrics
elideWidth: 2*root.width/3
elide: Qt.ElideMiddle
font: titleText.font
text: root.title
}
// Title
Text {
id: titleText
anchors {
left : hasIcon ? imgLogo.right : parent.left
leftMargin : hasIcon ? Style.title.leftMargin : Style.main.leftMargin
verticalCenter : root.verticalCenter
}
text : titleMetrics.elidedText
color : Style.title.text
font.pointSize : Style.title.fontSize * Style.pt
}
// Underline Button
Rectangle {
id: buttonUndrLine
anchors {
verticalCenter : root.verticalCenter
right : buttonCross.left
rightMargin : 2*Style.title.fontSize
}
width : Style.title.fontSize
height : Style.title.fontSize
color : "transparent"
Canvas {
anchors.fill: parent
onPaint: {
var val = Style.title.fontSize
var ctx = getContext("2d")
ctx.strokeStyle = 'white'
ctx.strokeWidth = 4
ctx.moveTo(0 , val-1)
ctx.lineTo(val, val-1)
ctx.stroke()
}
}
MouseArea {
anchors.fill: parent
onClicked: root.hideClicked()
}
}
// Cross Button
Rectangle {
id: buttonCross
anchors {
verticalCenter : root.verticalCenter
right : root.right
rightMargin : Style.main.rightMargin
}
width : Style.title.fontSize
height : Style.title.fontSize
color : "transparent"
Canvas {
anchors.fill: parent
onPaint: {
var val = Style.title.fontSize
var ctx = getContext("2d")
ctx.strokeStyle = 'white'
ctx.strokeWidth = 4
ctx.moveTo(0,0)
ctx.lineTo(val,val)
ctx.moveTo(val,0)
ctx.lineTo(0,val)
ctx.stroke()
}
}
MouseArea {
anchors.fill: parent
onClicked: root.hideClicked()
}
}
}