001package org.vishia.gral.swt; 002 003import org.eclipse.swt.SWT; 004import org.eclipse.swt.events.PaintEvent; 005import org.eclipse.swt.events.PaintListener; 006import org.eclipse.swt.graphics.Color; 007import org.eclipse.swt.graphics.Device; 008import org.eclipse.swt.graphics.Font; 009import org.eclipse.swt.graphics.GC; 010import org.eclipse.swt.widgets.Canvas; 011import org.eclipse.swt.widgets.Composite; 012 013/**This class supports drawing a Label without background. 014 * The Problem is: A swt.Color doesn't support the transparent/opaque/alpha property of colors. 015 * Therefore setBackground(Color) with an non-opaque color can't be used in SWT (in the current version). 016 * But a swt.widgets.Composite support drawing without background. 017 * This class isn't offer in the Gral interface. It is used for Prompt labels which overlay an input field. 018 * 019 * @author Hartmut Schorrig 020 * 021 */ 022public class SwtTransparentLabel extends Canvas 023{ 024 String text = ""; 025 026 Font font = null; 027 028 public SwtTransparentLabel(Composite parent, int style) 029 { 030 super(parent, style | SWT.TRANSPARENT); 031 addPaintListener(paintListener); 032 } 033 034 035 public void setText (String string) { 036 text = string; 037 } 038 039 public void setFont (Font font) { 040 this.font = font; 041 } 042 043 044 public void setBackground (Color color) { 045 if (color != null) { 046 } 047 } 048 049 050 public String getText(){ return text; } 051 052 053 054 /**The listener for paint events. It is called whenever the window is shown newly. */ 055 protected PaintListener paintListener = new PaintListener() 056 { 057 058 @Override 059 public void paintControl(PaintEvent e) { 060 // TODO Auto-generated method stub 061 GC gc = e.gc; 062 if(font !=null){ gc.setFont(font); } 063 //gc.setAlpha(100); 064 gc.drawString(text, 0, 0, true); 065 } 066 067 }; 068 069 070 071}