import javax.swing.*;
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;

public class CheckFontCanvas{
  public static void main(String args[]){
    JFrame frame=new JFrame("CheckFontCanvas");
    frame.setSize(800,800);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JCanvas canvas=new JCanvas();
    frame.add(canvas);
    frame.setVisible(true);
    int x,y,y1,sz=100,wd=400;

    Font ft1=new Font("Arial",Font.BOLD,sz);
    String s="Swing";
    FontMetrics fm=canvas.getFontMetrics(ft1);
      int w1=fm.stringWidth(s);
      int dc=fm.getMaxDescent();
    
    x=100;y=25;y1=y+sz-dc; 
    canvas.setFont(ft1);
    canvas.setStroke(new BasicStroke(3));
    canvas.setPaint(Color.yellow);
    canvas.drawString(s,x+3,y1);
    canvas.setPaint(Color.red);
    canvas.drawOutline(s,x+3,y1);
     
    x=100;y=150;y1=y+sz-dc;
    canvas.setPaint(Color.darkGray);
    canvas.fillRect(x-5,y-5,wd+5,sz+15);
    canvas.setPaint(Color.lightGray);
    canvas.drawString(s,x+4,y1+4);
    canvas.setPaint(Color.white);
    canvas.drawString(s,x,y1);

    x=100;y=275;y1=y+sz-dc;
    canvas.setPaint(Color.lightGray);
    canvas.fillRect(x-5,y-5,wd+5,sz+15);
    canvas.setPaint(Color.white);
    canvas.drawString(s,x+4,y1+4);
    canvas.setPaint(Color.black);
    canvas.drawString(s,x,y1);

    x=100;y=400;y1=y+sz-dc;
    Color top_color = new Color(200, 200, 0);
    Color side_color = new Color(100, 100, 0);
    for (int i = 0; i < 22; i++) {
      canvas.setPaint(top_color);
      canvas.drawString(s, x+i, y1+i-1);
      canvas.setPaint(side_color);
      canvas.drawString(s, x+i-1,y1+i);
    }
    canvas.setPaint(Color.yellow);
    canvas.drawString(s, x+20, y1+20);

    x=100;y=525;y1=y+sz-dc;
    AffineTransform origTransform = canvas.getTransform();
    canvas.setPaint(Color.lightGray);
    canvas.translate(x+20,y1);
    canvas.shear(3, 0);
    canvas.scale(1, 0.5);
    canvas.drawString(s, 0, 0);
    canvas.setTransform(origTransform);
    canvas.setPaint(Color.red);
    canvas.drawString(s,x+20,y1);
    
    x=100;y=650;y1=y+sz-dc;
    canvas.setPaint(new GradientPaint(x,y,Color.yellow,x+400,y1+dc,Color.red));    
    canvas.drawString(s,x,y1);
    canvas.setPaint(Color.orange);    
    canvas.drawRect(x-5,y-5,w1+10,sz+10);
  }
}
