123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- // Copyright (c) 2020 Ultimaker B.V.
- // Cura is released under the terms of the LGPLv3 or higher.
- import QtQuick 2.7
- import QtQuick.Controls 2.3
- import UM 1.0 as UM
- UM.PointingRectangle
- {
- id: base
- property real sourceWidth: 0
- width: UM.Theme.getSize("tooltip").width
- height: textScroll.height + UM.Theme.getSize("tooltip_margins").height * 2
- color: UM.Theme.getColor("tooltip")
- arrowSize: UM.Theme.getSize("default_arrow").width
- opacity: 0
- Behavior on opacity
- {
- NumberAnimation { duration: 100; }
- }
- property alias text: label.text
- function show(position)
- {
- if(position.y + base.height > parent.height)
- {
- x = position.x - base.width;
- y = parent.height - base.height;
- } else
- {
- var new_x = x = position.x - base.width
- // If the tooltip would fall out of the screen, display it on the other side.
- if(new_x < 0)
- {
- new_x = x + sourceWidth + base.width
- }
- x = new_x
- y = position.y - UM.Theme.getSize("tooltip_arrow_margins").height;
- if(y < 0)
- {
- position.y += -y;
- y = 0;
- }
- }
- base.opacity = 1;
- target = Qt.point(position.x + 1, position.y + Math.round(UM.Theme.getSize("tooltip_arrow_margins").height / 2))
- }
- function hide()
- {
- base.opacity = 0;
- }
- MouseArea
- {
- enabled: parent.opacity > 0
- visible: enabled
- anchors.fill: parent
- acceptedButtons: Qt.NoButton
- hoverEnabled: true
- onHoveredChanged:
- {
- if(containsMouse && base.opacity > 0)
- {
- base.show(Qt.point(target.x - 1, target.y - UM.Theme.getSize("tooltip_arrow_margins").height / 2)); //Same arrow position as before.
- }
- else
- {
- base.hide();
- }
- }
- ScrollView
- {
- id: textScroll
- width: parent.width
- height: Math.min(label.height, base.parent.height)
- ScrollBar.horizontal: ScrollBar {
- active: false //Only allow vertical scrolling. We should grow vertically only, but due to how the label is positioned it allocates space in the ScrollView horizontally.
- }
- Label
- {
- id: label
- x: UM.Theme.getSize("tooltip_margins").width
- y: UM.Theme.getSize("tooltip_margins").height
- width: base.width - UM.Theme.getSize("tooltip_margins").width * 2
- wrapMode: Text.Wrap;
- textFormat: Text.RichText
- font: UM.Theme.getFont("default");
- color: UM.Theme.getColor("tooltip_text");
- renderType: Text.NativeRendering
- }
- }
- }
- }
|