package cnp.ew.displayer;

import java.awt.*;
import cnp.ew.lightweight.*;
import java.awt.image.*;
import cnp.ew.image.*;
import cnp.ew.util.*;

public class CpRotatedDisplayer implements CpDisplayable
{
    CpDisplayable innerDisplayer;


    public CpRotatedDisplayer(CpDisplayable innerDisplayer)
    {
        this.innerDisplayer = innerDisplayer;
    }

    public void paintIn(CpLightweightComponent c, Graphics g, Rectangle r)
    {
        paintIn(c, g, r.x, r.y, r.width, r.height);
    }

    public void paintIn(CpLightweightComponent c, Graphics g, int x, int y, int w, int h)
    {
        Component component = CpToolkit.defaultComponent();

        if (h <= 0 || w <= 0) {
            return;
        }
        Image image = c.createImage(h, w);
        Graphics tempG=null;
        try {
            tempG = image.getGraphics();
            tempG.setColor(c.getBackground());
            tempG.fillRect(0, 0, h, w);
            innerDisplayer.paintIn(c, tempG, 0, 0, h, w);
        } finally {
            tempG.dispose();
        }

        ImageFilter f = new CpRotate90Filter();
        ImageProducer producer = new FilteredImageSource(image.getSource(), f);
        Image rotatedImage = component.createImage(producer);
        MediaTracker tracker = new MediaTracker(component);
        tracker.addImage(rotatedImage, 1);
        try {
            tracker.waitForID(1);
        }
        catch(InterruptedException e) {
        }
        g.drawImage(rotatedImage, x,   y , component);
    }


    public Dimension preferredSize(CpLightweightComponent c)
    {
        Dimension preferredSize = innerDisplayer.preferredSize(c);
        return new Dimension(preferredSize.height, preferredSize.width);
    }
}