blob: c06402bb77b1d8064fc3e3e75a1573495a80acc1 [file] [log] [blame]
/*
* Copyright 2000-2012 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.designer.model;
import com.intellij.designer.designSurface.ScalableComponent;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.*;
/**
* @author Alexander Lobas
*/
public abstract class RadVisualComponent extends RadComponent {
private Component myNativeComponent;
private final Rectangle myBounds = new Rectangle();
@Override
public Rectangle getBounds() {
return myBounds;
}
@Override
public Rectangle getBounds(Component relativeTo) {
return fromModel(relativeTo, getBounds());
}
@Override
public Rectangle fromModel(@NotNull Component target, @NotNull Rectangle bounds) {
if (target != myNativeComponent && myNativeComponent instanceof ScalableComponent) {
ScalableComponent scalableComponent = (ScalableComponent)myNativeComponent;
double zoom = scalableComponent.getScale();
if (zoom != 1) {
bounds = new Rectangle(bounds);
bounds.x *= zoom;
bounds.y *= zoom;
bounds.width *= zoom;
bounds.height *= zoom;
}
}
return myNativeComponent == target
? new Rectangle(bounds) :
SwingUtilities.convertRectangle(myNativeComponent, bounds, target);
}
@Override
public Rectangle toModel(@NotNull Component source, @NotNull Rectangle rectangle) {
Rectangle bounds = myNativeComponent == source
? new Rectangle(rectangle) : SwingUtilities.convertRectangle(source, rectangle, myNativeComponent);
if (myNativeComponent != source && myNativeComponent instanceof ScalableComponent) {
ScalableComponent scalableComponent = (ScalableComponent)myNativeComponent;
double zoom = scalableComponent.getScale();
if (zoom != 1) {
bounds = new Rectangle(bounds);
bounds.x /= zoom;
bounds.y /= zoom;
bounds.width /= zoom;
bounds.height /= zoom;
}
}
return bounds;
}
@Override
public Point fromModel(@NotNull Component target, @NotNull Point point) {
if (target != myNativeComponent && myNativeComponent instanceof ScalableComponent) {
ScalableComponent scalableComponent = (ScalableComponent)myNativeComponent;
double zoom = scalableComponent.getScale();
if (zoom != 1) {
point = new Point(point);
point.x *= zoom;
point.y *= zoom;
}
}
return myNativeComponent == target
? new Point(point) :
SwingUtilities.convertPoint(myNativeComponent, point, target);
}
@Override
public Point toModel(@NotNull Component source, @NotNull Point point) {
Point p = myNativeComponent == source
? new Point(point) : SwingUtilities.convertPoint(source, point, myNativeComponent);
if (myNativeComponent != source && myNativeComponent instanceof ScalableComponent) {
ScalableComponent scalableComponent = (ScalableComponent)myNativeComponent;
double zoom = scalableComponent.getScale();
if (zoom != 1) {
p = new Point(p);
p.x /= zoom;
p.y /= zoom;
}
}
return p;
}
@Override
public Dimension fromModel(@NotNull Component target, @NotNull Dimension size) {
size = new Dimension(size);
if (target != myNativeComponent && myNativeComponent instanceof ScalableComponent) {
ScalableComponent scalableComponent = (ScalableComponent)myNativeComponent;
double zoom = scalableComponent.getScale();
if (zoom != 1) {
size.width *= zoom;
size.height *= zoom;
}
}
return size;
}
@Override
public Dimension toModel(@NotNull Component source, @NotNull Dimension size) {
size = new Dimension(size);
if (myNativeComponent != source && myNativeComponent instanceof ScalableComponent) {
ScalableComponent scalableComponent = (ScalableComponent)myNativeComponent;
double zoom = scalableComponent.getScale();
if (zoom != 1) {
size.width /= zoom;
size.height /= zoom;
}
}
return size;
}
public void setBounds(int x, int y, int width, int height) {
myBounds.setBounds(x, y, width, height);
}
@Override
public Point convertPoint(Component relativeFrom, int x, int y) {
Point p = myNativeComponent == relativeFrom ? new Point(x, y) : SwingUtilities.convertPoint(relativeFrom, x, y, myNativeComponent);
if (myNativeComponent != relativeFrom && myNativeComponent instanceof ScalableComponent) {
ScalableComponent scalableComponent = (ScalableComponent)myNativeComponent;
double zoom = scalableComponent.getScale();
if (zoom != 1) {
p.x /= zoom;
p.y /= zoom;
}
}
return p;
}
public Component getNativeComponent() {
return myNativeComponent;
}
public void setNativeComponent(Component nativeComponent) {
myNativeComponent = nativeComponent;
}
}