package org.xmlvm.iphone;
import java.awt.geom.AffineTransform;
import java.util.ArrayList;
import java.util.List;
import org.xmlvm.iphone.internal.Simulator;
public class UIView
{
protected AffineTransform affineTransform;
protected CGRect viewRect;
protected List<UIView> subViews;
protected UIView parent;
public UIView()
{
this.viewRect = null;
this.affineTransform = new AffineTransform();
subViews = new ArrayList<UIView>();
parent = null;
}
public UIView(CGRect rect)
{
this.viewRect = new CGRect(rect);
this.affineTransform = new AffineTransform();
subViews = new ArrayList<UIView>();
parent = null;
}
public void initWithFrame(CGRect rect)
{
setFrame(rect);
}
public void setFrame(CGRect rect)
{
viewRect = new CGRect(rect);
}
public void addSubview(UIView subView)
{
subView.parent = this;
subViews.add(subView);
}
public CGRect getDisplayRect()
{
CGRect rect = new CGRect(viewRect);
if (parent == null)
return rect;
CGRect parentRect = parent.getDisplayRect();
rect.origin.x += parentRect.origin.x;
rect.origin.y += parentRect.origin.y;
return rect;
}
public void drawRect(CGRect rect)
{
for (UIView v : subViews) {
v.drawRect(rect);
}
}
public void setNeedsDisplay()
{
setNeedsDisplayInRect(getDisplayRect());
}
protected void setNeedsDisplayInRect(CGRect rect)
{
CGRect displayRect = getDisplayRect();
int x = (int) (displayRect.origin.x + rect.origin.x);
int y = (int) (displayRect.origin.y + rect.origin.y);
Simulator.redrawDisplay(x, y, (int) rect.size.width,
(int) rect.size.height);
}
public void setTransform(CGAffineTransform trans)
{
affineTransform = new AffineTransform();
switch (trans.type) {
case 0:
// Rotate
affineTransform.rotate(trans.alpha, viewRect.size.width / 2,
viewRect.size.height / 2);
}
Simulator.redrawDisplay();
// TODO the following clip rect doesn't work properly when rotating
// images.
// repaint((int) displayRect.origin.x,
// (int) displayRect.origin.y, (int) displayRect.size.width,
// (int) displayRect.size.height);
}
public void keyTyped(char key)
{
// Do nothing
}
}