org.sikuli.guide.SxAnchor Maven / Gradle / Ivy
/*
* Copyright (c) 2010-2016, Sikuli.org, sikulix.com
* Released under the MIT License.
*
*/
/**
*
*/
package org.sikuli.guide;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import org.sikuli.script.Pattern;
import org.sikuli.script.Region;
public class SxAnchor extends Visual {
Region region;
ArrayList listeners = new ArrayList();
private boolean animateAnchoring = false;
Pattern pattern = null;
Tracker tracker = null;
public SxAnchor() {
super();
setForeground(Color.black);
}
public SxAnchor(Pattern pattern) {
super();
this.pattern = pattern;
setTracker(pattern);
}
public SxAnchor(Region region) {
super();
if (region != null) {
this.region = region;
setActualBounds(region.getRect());
}
setForeground(Color.black);
}
public Pattern getPattern() {
return pattern;
}
public void setAnimateAnchoring(boolean animateAnchoring) {
this.animateAnchoring = animateAnchoring;
}
public boolean isAnimateAnchoring() {
return animateAnchoring;
}
public interface AnchorListener {
public void anchored();
public void found(SxAnchor source);
// public class AnchorAdapter implements AnchorListener {
// public void anchored(){};
// public void found(){};
// }
}
public void addListener(AnchorListener listener) {
listeners.add(listener);
}
public void found(Rectangle bounds) {
for (AnchorListener listener : listeners) {
listener.found(this);
}
if (isAnimateAnchoring()) {
Point center = new Point();
center.x = (int) (bounds.x + bounds.width / 2);
center.y = (int) (bounds.y + bounds.height / 2);
moveTo(center, new AnimationListener() {
public void animationCompleted() {
anchored();
}
});
} else {
setActualLocation(bounds.x, bounds.y);
anchored();
}
}
public void anchored() {
for (AnchorListener listener : listeners) {
listener.anchored();
}
// this implements the default behavior for fadein entrance when
// the anchor pattern is found and anchored for the first time
addFadeinAnimation();
startAnimation();
}
public void setTracker(Pattern pattern) {
setOpacity(0f);
tracker = new Tracker(pattern);
BufferedImage img;
try {
img = pattern.getBImage();
setActualSize(img.getWidth(), img.getHeight());
tracker.setAnchor(this);
} catch (Exception e) {
e.printStackTrace();
}
}
public void startTracking() {
if (tracker != null) {
//Debug.info("[SxAnchor] start tracking");
tracker.start();
}
}
public void stopTracking() {
if (tracker != null) {
tracker.stopTracking();
}
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
//
/* if (editable) {
* if (true) {
* Rectangle r = getActualBounds();
* g2d.setColor(getForeground());
* g2d.drawRect(0, 0, r.width - 1, r.height - 1);
* g2d.setColor(Color.white);
* g2d.drawRect(1, 1, r.width - 3, r.height - 3);
* g2d.setColor(getForeground());
* g2d.drawRect(2, 2, r.width - 5, r.height - 5);
* g2d.setColor(Color.white);
* g2d.drawRect(3, 3, r.width - 7, r.height - 7);
* } else {
* Rectangle r = getActualBounds();
* g2d.setColor(Color.red);
* g2d.setStroke(new BasicStroke(3f));
* g2d.drawRect(1, 1, r.width - 3, r.height - 3);
* }
* }*/
//
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy