스니펫:음각 글씨 효과

위클립스
이동: 둘러보기, 찾기
스니펫 분류
스니펫 (3)
스니펫/JDT (1)
스니펫/PDE (3)
스니펫/SWT (7)

[편집] 결과

Shadowed-text.gif

[편집] 스니펫 코드

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Path;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
 
public class ShadowAndHighlightedText {
   public static void main(String[] args) {
      Display display = Display.getDefault();
      Shell shell = new Shell(display, SWT.SHELL_TRIM);
      shell.setLayout(new FillLayout());
 
      final Canvas canvas = new Canvas(shell, SWT.DOUBLE_BUFFERED);
 
      canvas.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
      canvas.addListener(SWT.Paint, new Listener() {
         @Override
         public void handleEvent(Event event) {
            render(canvas, event.gc);
         }
      });
 
      canvas.addListener(SWT.MouseMove, new Listener() {
         @Override
         public void handleEvent(Event event) {
            canvas.redraw();
         }
      });
 
      shell.open();
      while (!shell.isDisposed()) {
         if (!display.readAndDispatch()) {
            display.sleep();
         }
      }
 
      display.dispose();
   }
 
   protected static void render(Canvas canvas, GC g) {
      g.setAntialias(SWT.ON);
      String message = "Hello★Eclipse";
 
      Path path = new Path(Display.getDefault());
      Font font = new Font(Display.getDefault(), new FontData("나눔고딕", 70, SWT.ITALIC));
 
      // 패스에 문자 추가
      path.addString(message, 0, 0, font);
 
      // 바탕 문자를 그림.
      g.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_GRAY));
      g.fillPath(path);
 
      // 문자 이외의 영역에 그려지는 것을 방지.
      g.setClipping(path);
 
      // 마우스 하이라이팅
      Point cursorLocation = Display.getDefault().getCursorLocation();
      Point relLocation = canvas.toControl(cursorLocation);
 
      int highlightRadius = 50;
 
      g.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_RED));
      g.setAlpha(125);
      g.fillOval(relLocation.x - highlightRadius, relLocation.y - highlightRadius, highlightRadius * 2,
            highlightRadius * 2);
 
      // 그림자 그리기
      {
         // 문자 경로에 1, 2만큼 이동하여 문자를 다시 포개어 그림자를 나타내는 경로를 얻음.
         path.addString(message, 1, 2, font);
 
         g.setAlpha(160);
         g.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
         g.fillPath(path);
      }
 
      font.dispose();
      path.dispose();
   }
}
개인 도구
이름공간
변수
행위
포탈
탐색
도움
도구모음