mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	This makes the TextFields (and the editable ComboBoxes with them) have a tighter visual experience. It also moves the indicater closer to the right edge in the ComboBox and doesn't use preferredWidth for the slim combo box as that implies a maximum width which could lead to unnecessary clipping. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
		
			
				
	
	
		
			105 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			QML
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			QML
		
	
	
	
	
	
// SPDX-License-Identifier: GPL-2.0
 | 
						|
import QtQuick 2.11
 | 
						|
import QtQuick.Controls 2.4
 | 
						|
import QtQuick.Layouts 1.11
 | 
						|
import org.kde.kirigami 2.4 as Kirigami
 | 
						|
 | 
						|
ComboBox {
 | 
						|
	id: cb
 | 
						|
	editable: false
 | 
						|
	Layout.fillWidth: true
 | 
						|
	Layout.preferredHeight: Kirigami.Units.gridUnit * 2.0
 | 
						|
	inputMethodHints: Qt.ImhNoPredictiveText
 | 
						|
	font.pointSize: subsurfaceTheme.regularPointSize
 | 
						|
	rightPadding: Kirigami.Units.smallSpacing
 | 
						|
	property var flickable // used to ensure the combobox is visible on screen
 | 
						|
	delegate: ItemDelegate {
 | 
						|
		width: cb.width
 | 
						|
		contentItem: Text {
 | 
						|
			text: modelData
 | 
						|
			color: subsurfaceTheme.textColor
 | 
						|
			font: cb.font
 | 
						|
			elide: Text.ElideRight
 | 
						|
			verticalAlignment: Text.AlignVCenter
 | 
						|
		}
 | 
						|
		highlighted: cb.highlightedIndex === index
 | 
						|
	}
 | 
						|
 | 
						|
	indicator: Canvas {
 | 
						|
		id: canvas
 | 
						|
		x: cb.width - width - cb.rightPadding
 | 
						|
		y: cb.topPadding + (cb.availableHeight - height) / 2
 | 
						|
		width: Kirigami.Units.gridUnit * 0.8
 | 
						|
		height: width * 0.66
 | 
						|
		contextType: "2d"
 | 
						|
		Connections {
 | 
						|
			target: cb
 | 
						|
			function onPressedChanged() { canvas.requestPaint(); }
 | 
						|
		}
 | 
						|
		// if the theme changes, we need to force a repaint of the indicator
 | 
						|
		property color sttc: subsurfaceTheme.textColor
 | 
						|
		onSttcChanged: { requestPaint() }
 | 
						|
		onPaint: {
 | 
						|
			context.reset();
 | 
						|
			context.moveTo(0, 0);
 | 
						|
			context.lineTo(width, 0);
 | 
						|
			context.lineTo(width / 2, height);
 | 
						|
			context.closePath();
 | 
						|
			context.fillStyle = subsurfaceTheme.textColor;
 | 
						|
			context.fill();
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	contentItem: SsrfTextField {
 | 
						|
		inComboBox: cb.editable
 | 
						|
		readOnly: !cb.editable
 | 
						|
		anchors.right: indicator.left
 | 
						|
		anchors.left: cb.left
 | 
						|
		flickable: cb.flickable
 | 
						|
		leftPadding: Kirigami.Units.smallSpacing
 | 
						|
		rightPadding: Kirigami.Units.smallSpacing
 | 
						|
		text: readOnly ? cb.displayText : cb.editText
 | 
						|
		font: cb.font
 | 
						|
		color: subsurfaceTheme.textColor
 | 
						|
		verticalAlignment: Text.AlignVCenter
 | 
						|
 | 
						|
		onPressed: {
 | 
						|
			if (readOnly) {
 | 
						|
				if (cb.popup.opened) {
 | 
						|
					cb.popup.close()
 | 
						|
				} else {
 | 
						|
					cb.popup.open()
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	background: Rectangle {
 | 
						|
		border.color: cb.focus ? subsurfaceTheme.darkerPrimaryColor : subsurfaceTheme.backgroundColor
 | 
						|
		border.width: cb.visualFocus ? 2 : 1
 | 
						|
		color: Qt.darker(subsurfaceTheme.backgroundColor, 1.1)
 | 
						|
		radius: Kirigami.Units.smallSpacing
 | 
						|
	}
 | 
						|
 | 
						|
	popup: Popup {
 | 
						|
		y: cb.height - 1
 | 
						|
		width: cb.width
 | 
						|
		implicitHeight: contentItem.implicitHeight
 | 
						|
		padding: 1
 | 
						|
 | 
						|
		contentItem: ListView {
 | 
						|
			clip: true
 | 
						|
			implicitHeight: contentHeight
 | 
						|
			model: cb.popup.visible ? cb.delegateModel : null
 | 
						|
			currentIndex: cb.highlightedIndex
 | 
						|
 | 
						|
			ScrollIndicator.vertical: ScrollIndicator { }
 | 
						|
		}
 | 
						|
 | 
						|
		background: Rectangle {
 | 
						|
			border.color: subsurfaceTheme.darkerPrimaryColor
 | 
						|
			color: subsurfaceTheme.backgroundColor
 | 
						|
			radius: Kirigami.Units.smallSpacing
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |