mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-29 11:57:32 +09:00
Issue #1705 - Part 8: Implement scrollbar-width:thin on GTK.
This commit is contained in:
parent
32df94bf3b
commit
2d99d18c21
1 changed files with 54 additions and 24 deletions
|
|
@ -1098,6 +1098,12 @@ nsNativeThemeGTK::GetExtraSizeForWidget(nsIFrame* aFrame, uint8_t aWidgetType,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
IsScrollbarWidthThin(nsIFrame* aFrame)
|
||||||
|
{
|
||||||
|
return aFrame->StyleUserInterface()->mScrollbarWidth == StyleScrollbarWidth::Thin;
|
||||||
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsNativeThemeGTK::DrawWidgetBackground(nsRenderingContext* aContext,
|
nsNativeThemeGTK::DrawWidgetBackground(nsRenderingContext* aContext,
|
||||||
nsIFrame* aFrame,
|
nsIFrame* aFrame,
|
||||||
|
|
@ -1419,32 +1425,39 @@ nsNativeThemeGTK::GetMinimumWidgetSize(nsPresContext* aPresContext,
|
||||||
case NS_THEME_SCROLLBARBUTTON_UP:
|
case NS_THEME_SCROLLBARBUTTON_UP:
|
||||||
case NS_THEME_SCROLLBARBUTTON_DOWN:
|
case NS_THEME_SCROLLBARBUTTON_DOWN:
|
||||||
{
|
{
|
||||||
if (gtk_check_version(3,20,0) == nullptr) {
|
if (!IsScrollbarWidthThin(aFrame)) {
|
||||||
moz_gtk_get_widget_min_size(MOZ_GTK_SCROLLBAR_BUTTON,
|
// Get scrollbar button metrics from the system, except in the case of
|
||||||
&(aResult->width), &(aResult->height));
|
// thin scrollbars, where we leave them at 0 (collapse)
|
||||||
} else {
|
if (gtk_check_version(3,20,0) == nullptr) {
|
||||||
MozGtkScrollbarMetrics metrics;
|
moz_gtk_get_widget_min_size(MOZ_GTK_SCROLLBAR_BUTTON,
|
||||||
moz_gtk_get_scrollbar_metrics(&metrics);
|
&(aResult->width), &(aResult->height));
|
||||||
|
} else {
|
||||||
|
MozGtkScrollbarMetrics metrics;
|
||||||
|
moz_gtk_get_scrollbar_metrics(&metrics);
|
||||||
|
|
||||||
aResult->width = metrics.slider_width;
|
aResult->width = metrics.slider_width;
|
||||||
aResult->height = metrics.stepper_size;
|
aResult->height = metrics.stepper_size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*aIsOverridable = false;
|
*aIsOverridable = false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NS_THEME_SCROLLBARBUTTON_LEFT:
|
case NS_THEME_SCROLLBARBUTTON_LEFT:
|
||||||
case NS_THEME_SCROLLBARBUTTON_RIGHT:
|
case NS_THEME_SCROLLBARBUTTON_RIGHT:
|
||||||
{
|
{
|
||||||
if (gtk_check_version(3,20,0) == nullptr) {
|
if (!IsScrollbarWidthThin(aFrame)) {
|
||||||
moz_gtk_get_widget_min_size(MOZ_GTK_SCROLLBAR_BUTTON,
|
// Get scrollbar button metrics from the system, except in the case of
|
||||||
&(aResult->width), &(aResult->height));
|
// thin scrollbars, where we leave them at 0 (collapse)
|
||||||
} else {
|
if (gtk_check_version(3,20,0) == nullptr) {
|
||||||
MozGtkScrollbarMetrics metrics;
|
moz_gtk_get_widget_min_size(MOZ_GTK_SCROLLBAR_BUTTON,
|
||||||
moz_gtk_get_scrollbar_metrics(&metrics);
|
&(aResult->width), &(aResult->height));
|
||||||
|
} else {
|
||||||
|
MozGtkScrollbarMetrics metrics;
|
||||||
|
moz_gtk_get_scrollbar_metrics(&metrics);
|
||||||
|
|
||||||
aResult->width = metrics.stepper_size;
|
aResult->width = metrics.stepper_size;
|
||||||
aResult->height = metrics.slider_width;
|
aResult->height = metrics.slider_width;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
*aIsOverridable = false;
|
*aIsOverridable = false;
|
||||||
}
|
}
|
||||||
|
|
@ -1514,6 +1527,24 @@ nsNativeThemeGTK::GetMinimumWidgetSize(nsPresContext* aPresContext,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NS_THEME_SCROLLBARTHUMB_VERTICAL:
|
case NS_THEME_SCROLLBARTHUMB_VERTICAL:
|
||||||
|
{
|
||||||
|
if (gtk_check_version(3,20,0) == nullptr) {
|
||||||
|
moz_gtk_get_widget_min_size(NativeThemeToGtkTheme(aWidgetType, aFrame),
|
||||||
|
&(aResult->width), &(aResult->height));
|
||||||
|
} else {
|
||||||
|
MozGtkScrollbarMetrics metrics;
|
||||||
|
moz_gtk_get_scrollbar_metrics(&metrics);
|
||||||
|
|
||||||
|
aResult->width = metrics.slider_width;
|
||||||
|
aResult->height = metrics.min_slider_size;
|
||||||
|
}
|
||||||
|
if (IsScrollbarWidthThin(aFrame)) {
|
||||||
|
// If thin scrollbars, divide the thickness by 3
|
||||||
|
aResult->width /= 3;
|
||||||
|
}
|
||||||
|
*aIsOverridable = false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case NS_THEME_SCROLLBARTHUMB_HORIZONTAL:
|
case NS_THEME_SCROLLBARTHUMB_HORIZONTAL:
|
||||||
{
|
{
|
||||||
if (gtk_check_version(3,20,0) == nullptr) {
|
if (gtk_check_version(3,20,0) == nullptr) {
|
||||||
|
|
@ -1523,13 +1554,12 @@ nsNativeThemeGTK::GetMinimumWidgetSize(nsPresContext* aPresContext,
|
||||||
MozGtkScrollbarMetrics metrics;
|
MozGtkScrollbarMetrics metrics;
|
||||||
moz_gtk_get_scrollbar_metrics(&metrics);
|
moz_gtk_get_scrollbar_metrics(&metrics);
|
||||||
|
|
||||||
if (aWidgetType == NS_THEME_SCROLLBARTHUMB_VERTICAL) {
|
aResult->height = metrics.slider_width;
|
||||||
aResult->width = metrics.slider_width;
|
aResult->width = metrics.min_slider_size;
|
||||||
aResult->height = metrics.min_slider_size;
|
}
|
||||||
} else {
|
if (IsScrollbarWidthThin(aFrame)) {
|
||||||
aResult->height = metrics.slider_width;
|
// If thin scrollbars, divide the thickness by 3
|
||||||
aResult->width = metrics.min_slider_size;
|
aResult->height /= 3;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
*aIsOverridable = false;
|
*aIsOverridable = false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue