This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 198542
Collapse All | Expand All

(-)welcome/src/org/netbeans/modules/welcome/content/LinkButton.java (-1 / +105 lines)
Lines 46-58 Link Here
46
46
47
import java.awt.Color;
47
import java.awt.Color;
48
import java.awt.Cursor;
48
import java.awt.Cursor;
49
import java.awt.Component;
50
import java.awt.BasicStroke;
49
import java.awt.Dimension;
51
import java.awt.Dimension;
50
import java.awt.Font;
52
import java.awt.Font;
51
import java.awt.FontMetrics;
53
import java.awt.FontMetrics;
54
import java.awt.Point;
55
import java.awt.geom.*;
52
import java.awt.Graphics;
56
import java.awt.Graphics;
53
import java.awt.Graphics2D;
57
import java.awt.Graphics2D;
54
import java.awt.Insets;
58
import java.awt.Insets;
55
import java.awt.Rectangle;
59
import java.awt.Rectangle;
60
import java.awt.RenderingHints;
61
import java.awt.Shape;
56
import java.awt.event.ActionListener;
62
import java.awt.event.ActionListener;
57
import java.awt.event.FocusEvent;
63
import java.awt.event.FocusEvent;
58
import java.awt.event.FocusListener;
64
import java.awt.event.FocusListener;
Lines 62-71 Link Here
62
import java.util.logging.LogRecord;
68
import java.util.logging.LogRecord;
63
import javax.swing.BorderFactory;
69
import javax.swing.BorderFactory;
64
import javax.swing.JButton;
70
import javax.swing.JButton;
71
import javax.swing.JFrame;
65
import javax.swing.JLabel;
72
import javax.swing.JLabel;
73
import javax.swing.JToolTip;
66
import javax.swing.border.Border;
74
import javax.swing.border.Border;
67
import javax.swing.border.EmptyBorder;
75
import javax.swing.border.EmptyBorder;
76
import javax.swing.JComponent;
68
import org.openide.util.NbBundle;
77
import org.openide.util.NbBundle;
78
import org.openide.windows.WindowManager;
69
79
70
/**
80
/**
71
 *
81
 *
Lines 76-82 Link Here
76
86
77
    private boolean underline = false;
87
    private boolean underline = false;
78
    private final boolean showBorder;
88
    private final boolean showBorder;
79
80
    private final Color defaultForeground;
89
    private final Color defaultForeground;
81
90
82
    private final static Border regularBorder = ButtonBorder.createRegular();
91
    private final static Border regularBorder = ButtonBorder.createRegular();
Lines 84-89 Link Here
84
93
85
    private String usageTrackingId;
94
    private String usageTrackingId;
86
95
96
    private JToolTip tooltip;
97
87
    public LinkButton( String label, String usageTrackingId ) {
98
    public LinkButton( String label, String usageTrackingId ) {
88
        this( label, false, usageTrackingId );
99
        this( label, false, usageTrackingId );
89
    }
100
    }
Lines 100-105 Link Here
100
        super( label );
111
        super( label );
101
        this.defaultForeground = foreground;
112
        this.defaultForeground = foreground;
102
        this.showBorder = showBorder;
113
        this.showBorder = showBorder;
114
115
        tooltip = new WelcomeToolTip();
116
        tooltip.setComponent(this);
117
118
        setToolTipText(label);
119
103
        setForeground( defaultForeground );
120
        setForeground( defaultForeground );
104
        setFont( BUTTON_FONT );
121
        setFont( BUTTON_FONT );
105
        this.usageTrackingId = usageTrackingId;
122
        this.usageTrackingId = usageTrackingId;
Lines 127-132 Link Here
127
    }
144
    }
128
145
129
    @Override
146
    @Override
147
    public JToolTip createToolTip() {
148
        return tooltip;
149
    }
150
151
    @Override
152
    public Point getToolTipLocation(MouseEvent event) {
153
        JFrame frame = (JFrame) WindowManager.getDefault().getMainWindow();
154
155
        int mainWindowX = frame.getLocationOnScreen().x;
156
        Dimension mainWindowSize = frame.getSize();
157
158
        Rectangle tooltopVisible = getVisibleRect();
159
        Point tooltipLocation = getLocationOnScreen();
160
        System.err.println("Original Tooltip location x " + tooltipLocation.x);
161
        int ttX = 10;
162
        if ((mainWindowX + mainWindowSize.width)
163
                < (tooltipLocation.x + tooltopVisible.width)) {
164
            ttX =  - ((tooltipLocation.x + tooltopVisible.width) -
165
                    (mainWindowX + mainWindowSize.width));
166
        }
167
        return new Point(ttX, 20);
168
    }
169
170
    @Override
130
    public void mouseClicked(MouseEvent e) {
171
    public void mouseClicked(MouseEvent e) {
131
    }
172
    }
132
173
Lines 234-236 Link Here
234
        System.err.println("usage: " + id);
275
        System.err.println("usage: " + id);
235
    }
276
    }
236
}
277
}
278
279
class WelcomeToolTip extends JToolTip {
280
281
    public WelcomeToolTip() {
282
        super();
283
        this.setOpaque(false);
284
    }
285
286
    @Override
287
    public Dimension getPreferredSize() {
288
        Dimension dim = super.getPreferredSize();
289
        return new Dimension((int)dim.getWidth() + 50,(int)dim.getHeight()+10);
290
    }
291
    @Override
292
    public void paintComponent(Graphics g) {
293
        // set the parent opaque
294
        Component parent = this.getParent();
295
        if(parent != null) {
296
            if(parent instanceof JComponent) {
297
                JComponent jparent = (JComponent)parent;
298
                if(jparent.isOpaque()) {
299
                    jparent.setOpaque(false);
300
                }
301
            }
302
        }
303
        // create a round rectangle
304
        Shape round = new RoundRectangle2D.Float(4f,4f,
305
            this.getWidth() -1f - 8f,
306
            this.getHeight() -1f -8f,
307
            15f,15f);
308
309
        // draw background
310
        Graphics2D g2 = Utils.prepareGraphics( g );
311
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
312
            RenderingHints.VALUE_ANTIALIAS_ON);
313
        // set GhostWhite background color
314
        g2.setColor(Color.getHSBColor(0.333f, 0.027f, 1f));
315
        g2.fill(round);
316
317
        // draw the LightSteelBlue border
318
        g2.setColor(Color.getHSBColor(0.406f, 0.207f,  0.871f));
319
        g2.setStroke(new BasicStroke(1));
320
        g2.draw(round);
321
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
322
            RenderingHints.VALUE_ANTIALIAS_DEFAULT);
323
324
        // draw the text
325
        String text = this.getComponent().getToolTipText();
326
        if(text != null) {
327
            FontMetrics fm = g2.getFontMetrics();
328
            int h = fm.getAscent();
329
            Font font = fm.getFont();
330
            g2.setFont(new Font(font.getFontName(), Font.BOLD, font.getSize()));
331
            g2.setColor(Color.DARK_GRAY);
332
            g2.drawString(text,10,(this.getHeight()+h)/2);
333
        }
334
    }
335
336
    @Override
337
    public void setToolTipText(String str) {
338
        super.setToolTipText(str);
339
    }
340
}

Return to bug 198542