slider: Request a size

Sliders (and level bars) currently don't request any size, so it's
up to the caller (or stylesheet) to explicitly set a size big
enough to fit the bar/handle.

That's rather unexpected, we should request the size we need ourselves.

Closes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7133

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2994>
This commit is contained in:
Florian Müllner 2023-10-26 13:39:38 +02:00 committed by Marge Bot
parent a6706bd2ca
commit 99d49f787b
2 changed files with 32 additions and 0 deletions

View File

@ -259,6 +259,26 @@ export const BarLevel = GObject.registerClass({
cr.$dispose();
}
vfunc_get_preferred_height(_forWidth) {
const themeNode = this.get_theme_node();
const height = this._getPreferredHeight();
return themeNode.adjust_preferred_height(height, height);
}
vfunc_get_preferred_width(_forHeight) {
const themeNode = this.get_theme_node();
const width = this._getPreferredWidth();
return themeNode.adjust_preferred_width(width, width);
}
_getPreferredHeight() {
return this._barLevelHeight + this._barLevelBorderWidth;
}
_getPreferredWidth() {
return this._overdriveSeparatorWidth + this._barLevelBorderWidth;
}
_getCurrentValue() {
return this._value;
}

View File

@ -75,6 +75,18 @@ export const Slider = GObject.registerClass({
cr.$dispose();
}
_getPreferredHeight() {
const barHeight = super._getPreferredHeight();
const handleHeight = 2 * this._handleRadius + this._handleBorderWidth;
return Math.max(barHeight, handleHeight);
}
_getPreferredWidth() {
const barWidth = super._getPreferredWidth();
const handleWidth = 2 * this._handleRadius + this._handleBorderWidth;
return Math.max(barWidth, handleWidth);
}
vfunc_button_press_event(event) {
return this.startDragging(event);
}