blob: 4a133d5870d785fea484b4cda4f5682d3b6d6858 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2008 IBM Corporation and Others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Takashi ITOH - initial API and implementation
*******************************************************************************/
package org.eclipse.actf.util.internal.win32;
import org.eclipse.actf.util.win32.WindowUtil;
import org.eclipse.swt.graphics.Rectangle;
/**
* Utility class to show rectangle using OvelayWindow
*/
public class AccessibleHilighter {
private static Thread lastThread = null;
private static final int COLOR_YELLOW = 0x00FFFF;
private static final int COLOR_GREEN = 0x00FF00;
private static final int[][] FLASHING_COLORS = { { COLOR_YELLOW, 250 },
{ COLOR_GREEN, 250 }, { COLOR_YELLOW, 250 }, { COLOR_GREEN, 250 },
{ COLOR_YELLOW, 250 }, { COLOR_GREEN, 250 }, { COLOR_YELLOW, 1000 } };
/**
* Flash rectangle without using OverlayWindow.
*
* Note: This function may leave garbages on the screen.
*
* @param rect
*/
public static void flashRectangle(final Rectangle rect) {
if (null != lastThread) {
lastThread.interrupt();
}
if (null != rect) {
lastThread = new Thread(new Runnable() {
public void run() {
int hwndDraw = WindowUtil.GetDesktopWindow();
try {
for (int i = 0; i < FLASHING_COLORS.length; i++) {
DrawUtil.drawRectangle(hwndDraw, rect,
FLASHING_COLORS[i][0]);
Thread.sleep(FLASHING_COLORS[i][1]);
}
} catch (InterruptedException e) {
}
DrawUtil.redrawRectangle(hwndDraw, rect);
if (lastThread == Thread.currentThread()) {
lastThread = null;
}
}
});
lastThread.start();
}
}
}