private volatile boolean stopRequest;
private Runnable runnable;
+ private int intervalWait;
public PollFBThread(int lcdWidth, int lcdHeight) {
this.display = Display.getDefault();
this.imageData = new ImageData(lcdWidth, lcdHeight, COLOR_DEPTH, paletteData);
this.framebuffer = new Image(Display.getDefault(), imageData);
+ setWaitIntervalTime(30);
+
this.runnable = new Runnable() {
@Override
public void run() {
// logger.info("update display framebuffer");
- if(lcdCanvas.isDisposed() == false) {
+ if (lcdCanvas.isDisposed() == false) {
lcdCanvas.redraw();
}
}
};
}
+ public synchronized void setWaitIntervalTime(int ms) {
+ intervalWait = ms;
+ }
+
+ public synchronized int getWaitIntervalTime() {
+ return intervalWait;
+ }
+
@Override
public void run() {
stopRequest = false;
+ Image temp;
+
while (!stopRequest) {
- synchronized (this) {
+ synchronized(this) {
try {
- this.wait(30); /* 30ms */
+ this.wait(intervalWait); /* ms */
} catch (InterruptedException e) {
e.printStackTrace();
break;
imageData.setPixels(0, i, lcdWidth, array, i * lcdWidth);
}
- Image temp = framebuffer;
+ temp = framebuffer;
framebuffer = new Image(display, imageData);
temp.dispose();
public void stopRequest() {
stopRequest = true;
+
+ synchronized(pollThread) {
+ pollThread.notify();
+ }
}
}
super.finger.setMultiTouchEnable(0);
super.finger.clearFingerSlot();
super.finger.cleanup_multiTouchState();
-
+
super.skinFinalize();
}
int x = lcdCanvas.getSize().x;
int y = lcdCanvas.getSize().y;
+
+ if (pollThread.getWaitIntervalTime() == 0) {
+ logger.info("draw black screen");
+
+ e.gc.drawRectangle(-1, -1, x + 1, y + 1);
+ return;
+ }
+
if (currentState.getCurrentAngle() == 0) { /* portrait */
e.gc.drawImage(pollThread.framebuffer,
0, 0, pollThread.lcdWidth, pollThread.lcdHeight,
0, 0, x, y);
-
+
if (finger.getMultiTouchEnable() == 1) {
finger.rearrangeFingerPoints(currentState.getCurrentResolutionWidth(),
currentState.getCurrentResolutionHeight(),
currentState.getCurrentScale(),
currentState.getCurrentRotationId());
}
- finger.drawImage(e, currentState.getCurrentAngle());
+
+ finger.drawImage(e, currentState.getCurrentAngle());
return;
}
y = temp;
transform.translate(x * -1, 0);
}
-
- //draw finger image
- //for when rotate while use multi touch
+
+ /* draw finger image for when rotate while use multitouch */
if (finger.getMultiTouchEnable() == 1) {
finger.rearrangeFingerPoints(currentState.getCurrentResolutionWidth(),
currentState.getCurrentResolutionHeight(),
currentState.getCurrentScale(),
currentState.getCurrentRotationId());
- }
+ }
//save current transform as "oldtransform"
e.gc.getTransform(oldtransform);
//set to new transfrom
0, 0, x, y);
//back to old transform
e.gc.setTransform(oldtransform);
-
+
transform.dispose();
finger.drawImage(e, currentState.getCurrentAngle());
}
}
@Override
+ public void displayOn() {
+ logger.info("display on");
+
+ if (pollThread.isAlive()) {
+ pollThread.setWaitIntervalTime(30);
+
+ synchronized(pollThread) {
+ pollThread.notify();
+ }
+ }
+ }
+
+ @Override
+ public void displayOff() {
+ logger.info("display off");
+
+ if (pollThread.isAlive()) {
+ pollThread.setWaitIntervalTime(0);
+
+ shell.getDisplay().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ lcdCanvas.redraw();
+ }
+ });
+ }
+ }
+
+ @Override
protected void openScreenShotWindow() {
if (screenShotDialog != null) {
logger.info("screenshot window was already opened");