You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
5.0 KiB
145 lines
5.0 KiB
/*
|
|
* Copyright (c) 2002, 2006, Oracle and/or its affiliates. All rights reserved.
|
|
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*/
|
|
package com.sun.java.swing.plaf.gtk;
|
|
|
|
import javax.swing.*;
|
|
import javax.swing.plaf.synth.*;
|
|
import java.awt.Color;
|
|
import java.awt.Graphics;
|
|
import java.awt.Rectangle;
|
|
|
|
/**
|
|
* @author Joshua Outwater
|
|
*/
|
|
class GTKGraphicsUtils extends SynthGraphicsUtils {
|
|
public void paintText(SynthContext context, Graphics g, String text,
|
|
int x, int y, int mnemonicIndex) {
|
|
if (text == null || text.length() <= 0) {
|
|
// We don't need to paint empty strings
|
|
return;
|
|
}
|
|
|
|
if (context.getRegion() == Region.INTERNAL_FRAME_TITLE_PANE) {
|
|
// Metacity handles painting of text on internal frame title,
|
|
// ignore this.
|
|
return;
|
|
}
|
|
int componentState = context.getComponentState();
|
|
if ((componentState & SynthConstants.DISABLED) ==
|
|
SynthConstants.DISABLED){
|
|
Color orgColor = g.getColor();
|
|
g.setColor(context.getStyle().getColor(context,
|
|
GTKColorType.WHITE));
|
|
x += 1;
|
|
y += 1;
|
|
super.paintText(context, g, text, x, y, mnemonicIndex);
|
|
|
|
g.setColor(orgColor);
|
|
x -= 1;
|
|
y -= 1;
|
|
super.paintText(context, g, text, x, y, mnemonicIndex);
|
|
}
|
|
else {
|
|
String themeName = GTKLookAndFeel.getGtkThemeName();
|
|
if (themeName != null && themeName.startsWith("blueprint") &&
|
|
shouldShadowText(context.getRegion(), componentState)) {
|
|
|
|
g.setColor(Color.BLACK);
|
|
super.paintText(context, g, text, x+1, y+1, mnemonicIndex);
|
|
g.setColor(Color.WHITE);
|
|
}
|
|
|
|
super.paintText(context, g, text, x, y, mnemonicIndex);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Paints text at the specified location. This will not attempt to
|
|
* render the text as html nor will it offset by the insets of the
|
|
* component.
|
|
*
|
|
* @param ss SynthContext
|
|
* @param g Graphics used to render string in.
|
|
* @param text Text to render
|
|
* @param bounds Bounds of the text to be drawn.
|
|
* @param mnemonicIndex Index to draw string at.
|
|
*/
|
|
public void paintText(SynthContext context, Graphics g, String text,
|
|
Rectangle bounds, int mnemonicIndex) {
|
|
if (text == null || text.length() <= 0) {
|
|
// We don't need to paint empty strings
|
|
return;
|
|
}
|
|
|
|
Region id = context.getRegion();
|
|
if ((id == Region.RADIO_BUTTON ||
|
|
id == Region.CHECK_BOX ||
|
|
id == Region.TABBED_PANE_TAB) &&
|
|
(context.getComponentState() & SynthConstants.FOCUSED) != 0)
|
|
{
|
|
JComponent source = context.getComponent();
|
|
if (!(source instanceof AbstractButton) ||
|
|
((AbstractButton)source).isFocusPainted()) {
|
|
|
|
// The "bounds" parameter encompasses only the actual text;
|
|
// when drawing the focus, we need to expand that bounding
|
|
// box by "focus-line-width" plus "focus-padding". Note that
|
|
// the layout process for these components will have already
|
|
// taken these values into account, so there should always
|
|
// be enough space allocated for drawing the focus indicator.
|
|
int synthState = context.getComponentState();
|
|
GTKStyle style = (GTKStyle)context.getStyle();
|
|
int focusSize =
|
|
style.getClassSpecificIntValue(context,
|
|
"focus-line-width", 1);
|
|
int focusPad =
|
|
style.getClassSpecificIntValue(context,
|
|
"focus-padding", 1);
|
|
int totalFocus = focusSize + focusPad;
|
|
int x = bounds.x - totalFocus;
|
|
int y = bounds.y - totalFocus;
|
|
int w = bounds.width + (2 * totalFocus);
|
|
int h = bounds.height + (2 * totalFocus);
|
|
|
|
Color color = g.getColor();
|
|
GTKPainter.INSTANCE.paintFocus(context, g, id,
|
|
synthState, "checkbutton",
|
|
x, y, w, h);
|
|
g.setColor(color);
|
|
}
|
|
}
|
|
super.paintText(context, g, text, bounds, mnemonicIndex);
|
|
}
|
|
|
|
private static boolean shouldShadowText(Region id, int state) {
|
|
int gtkState = GTKLookAndFeel.synthStateToGTKState(id, state);
|
|
return((gtkState == SynthConstants.MOUSE_OVER) &&
|
|
(id == Region.MENU ||
|
|
id == Region.MENU_ITEM ||
|
|
id == Region.CHECK_BOX_MENU_ITEM ||
|
|
id == Region.RADIO_BUTTON_MENU_ITEM));
|
|
}
|
|
}
|