mirror of
https://github.com/openjdk/jdk.git
synced 2026-03-16 10:53:31 +00:00
8226964: [Yaru] GTK L&F: There is no difference between menu selected and de-selected
Reviewed-by: prr, kcr
This commit is contained in:
parent
adfa9a7eb1
commit
2f16ca0f59
@ -535,6 +535,34 @@ class GTKPainter extends SynthPainter {
|
||||
}
|
||||
}
|
||||
|
||||
private int getBrightness(Color c) {
|
||||
return Math.max(c.getRed(), Math.max(c.getGreen(), c.getBlue()));
|
||||
}
|
||||
|
||||
private int getMaxColorDiff(Color c1, Color c2) {
|
||||
return Math.max(Math.abs(c1.getRed() - c2.getRed()),
|
||||
Math.max(Math.abs(c1.getGreen() - c2.getGreen()),
|
||||
Math.abs(c1.getBlue() - c2.getBlue())));
|
||||
}
|
||||
|
||||
private int scaleColorComponent(int color, double scaleFactor) {
|
||||
return (int)(color + color * scaleFactor);
|
||||
}
|
||||
private Color deriveColor(Color originalColor, int originalBrightness,
|
||||
int targetBrightness) {
|
||||
int r, g, b;
|
||||
if (originalBrightness == 0) {
|
||||
r = g = b = targetBrightness;
|
||||
} else {
|
||||
double scaleFactor = (targetBrightness - originalBrightness)
|
||||
/ originalBrightness ;
|
||||
r = scaleColorComponent(originalColor.getRed(), scaleFactor);
|
||||
g = scaleColorComponent(originalColor.getGreen(), scaleFactor);
|
||||
b = scaleColorComponent(originalColor.getBlue(), scaleFactor);
|
||||
}
|
||||
return new Color(r, g, b);
|
||||
}
|
||||
|
||||
//
|
||||
// MENU
|
||||
//
|
||||
@ -551,6 +579,57 @@ class GTKPainter extends SynthPainter {
|
||||
int gtkState = GTKLookAndFeel.synthStateToGTKState(
|
||||
context.getRegion(), context.getComponentState());
|
||||
if (gtkState == SynthConstants.MOUSE_OVER) {
|
||||
if (GTKLookAndFeel.is3() && context.getRegion() == Region.MENU) {
|
||||
GTKStyle style = (GTKStyle)context.getStyle();
|
||||
Color highlightColor = style.getGTKColor(
|
||||
GTKEngine.WidgetType.MENU_ITEM.ordinal(),
|
||||
gtkState, ColorType.BACKGROUND.getID());
|
||||
Color backgroundColor = style.getGTKColor(
|
||||
GTKEngine.WidgetType.MENU_BAR.ordinal(),
|
||||
SynthConstants.ENABLED, ColorType.BACKGROUND.getID());
|
||||
|
||||
int minBrightness = 0, maxBrightness = 255;
|
||||
int minBrightnessDifference = 100;
|
||||
int actualBrightnessDifference =
|
||||
getMaxColorDiff(highlightColor, backgroundColor);
|
||||
if (actualBrightnessDifference < minBrightnessDifference) {
|
||||
int highlightBrightness =
|
||||
getBrightness(highlightColor);
|
||||
int backgroundBrightness =
|
||||
getBrightness(backgroundColor);
|
||||
int originalHighlightBrightness =
|
||||
highlightBrightness;
|
||||
if (highlightBrightness >= backgroundBrightness) {
|
||||
if (backgroundBrightness + minBrightnessDifference <=
|
||||
maxBrightness) {
|
||||
highlightBrightness =
|
||||
backgroundBrightness +
|
||||
minBrightnessDifference;
|
||||
} else {
|
||||
highlightBrightness =
|
||||
backgroundBrightness -
|
||||
minBrightnessDifference;
|
||||
}
|
||||
} else {
|
||||
if (backgroundBrightness - minBrightnessDifference >=
|
||||
minBrightness) {
|
||||
highlightBrightness =
|
||||
backgroundBrightness -
|
||||
minBrightnessDifference;
|
||||
} else {
|
||||
highlightBrightness =
|
||||
backgroundBrightness +
|
||||
minBrightnessDifference;
|
||||
}
|
||||
}
|
||||
|
||||
g.setColor(deriveColor(highlightColor,
|
||||
originalHighlightBrightness,
|
||||
highlightBrightness));
|
||||
g.fillRect(x, y, w, h);
|
||||
return;
|
||||
}
|
||||
}
|
||||
Region id = Region.MENU_ITEM;
|
||||
synchronized (UNIXToolkit.GTK_LOCK) {
|
||||
if (! ENGINE.paintCachedImage(g, x, y, w, h, id)) {
|
||||
|
||||
@ -205,6 +205,14 @@ class GTKStyle extends SynthStyle implements GTKConstants {
|
||||
return getGTKColor(null, state, type);
|
||||
}
|
||||
|
||||
Color getGTKColor(int widgetType, int state, int colorType) {
|
||||
synchronized (sun.awt.UNIXToolkit.GTK_LOCK) {
|
||||
int rgb = nativeGetColorForState(widgetType, state,
|
||||
colorType);
|
||||
return new ColorUIResource(rgb);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the color for the specified state.
|
||||
*
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user