📄 titlebar.java
字号:
{
timerTask.cancel();
timerTask = null;
}
long now = System.currentTimeMillis();
if(lastUpdate + UPDATE_DELAY < now)
{
performMove(event);
lastUpdate = now;
}
else
{
timerTask = new TimerTask()
{
public void run()
{
final TimerTask executingTask = this;
event.display.asyncExec(new Runnable()
{
public void run()
{
if(executingTask != timerTask) return;
performMove(event);
}
});
}
};
timer.schedule(timerTask, UPDATE_DELAY);
}
}
}
});
addListener(SWT.MouseUp, new Listener()
{
public void handleEvent(Event event)
{
if(ishell.getMaximized()) return;
if(image == null || event.x >= LEFT_PADDING + IMAGE_SIZE)
{
if(timerTask != null)
{
timerTask.cancel();
timerTask = null;
}
if(!cancelled && (event.stateMask & SWT.BUTTON1) != 0)
{
performMove(event);
}
}
}
});
final Listener activateListener = new Listener()
{
public void handleEvent(Event event)
{
redraw();
}
};
final Listener deactivateListener = new Listener()
{
public void handleEvent(Event event)
{
redraw();
}
};
shell.addListener(SWT.Activate, activateListener);
shell.addListener(SWT.Deactivate, deactivateListener);
addListener(SWT.Dispose, new Listener()
{
public void handleEvent(Event event)
{
timer.cancel();
shell.removeListener(SWT.Activate, activateListener);
shell.removeListener(SWT.Deactivate, deactivateListener);
closeImage.dispose();
maximizeImage.dispose();
restoreImage.dispose();
minimizeImage.dispose();
defaultPopup.dispose();
}
});
}
private void performMove(Event event)
{
Point p = ishell.getLocation();
int newX = p.x + event.x - mouseDownOffsetX;
int newY = p.y + event.y - mouseDownOffsetY;
// Make sure that the minimum grab area stays visible
Rectangle deskCA = desktop.getClientArea();
Rectangle bounds = getBounds();
newX = Math.min(Math.max(newX, deskCA.x-bounds.x-bounds.width+MINIMUM_GRAB_AREA), deskCA.x-bounds.x+deskCA.width-minGrabSize.x);
newY = Math.min(Math.max(newY, deskCA.y-bounds.y-bounds.height+MINIMUM_GRAB_AREA), deskCA.y-bounds.y+deskCA.height-MINIMUM_GRAB_AREA);
if(newX != p.x || newY != p.y) ishell.setLocation(newX, newY);
}
public Point getMinGrabSize()
{
return minGrabSize;
}
public Point computeSize(int wHint, int hHint, boolean changed)
{
checkWidget();
if(wHint == SWT.DEFAULT) wHint = 50;
if(hHint == SWT.DEFAULT)
{
GC gc = new GC(this);
hHint = gc.getFontMetrics().getHeight();
hHint = Math.max(hHint, styleTool ? TOOL_SIZE : IMAGE_SIZE);
hHint += TOP_PADDING + BOTTOM_PADDING;
gc.dispose();
}
return new Point(wHint, hHint);
}
private static int checkStyle(int style)
{
//int mask = SWT.SHADOW_IN | SWT.FLAT;
//style &= mask;
style = SWT.NO_FOCUS;
return style;
}
public boolean setFocus()
{
checkWidget();
return false;
}
public boolean isReparentable ()
{
checkWidget();
return false;
}
public void setText(String text)
{
checkWidget();
this.text = text;
redraw();
}
public String getText() { return text; }
public void setImage(Image image)
{
checkWidget();
if(styleTool) return;
this.image = image;
minGrabSize.x = MINIMUM_GRAB_AREA;
if(image != null) minGrabSize.x += LEFT_PADDING + IMAGE_SIZE;
redraw();
}
public Image getImage() { return image; }
private Font createTitleFont(Font f, boolean tool)
{
FontData[] fds = f.getFontData();
for(FontData fd: fds)
{
fd.setStyle(fd.getStyle() | SWT.BOLD);
if(tool) fd.setHeight((int)(fd.getHeight()*0.9));
}
return new Font(getDisplay(), fds);
}
private void instrumentDefaultPopup(boolean onImage)
{
restoreItem.setEnabled(styleMax && ishell.getMaximized());
maximizeItem.setEnabled(styleMax && !ishell.getMaximized());
MenuItem def = null;
if(onImage)
{
if(styleClose) def = closeItem;
}
else if(styleMax)
{
def = ishell.getMaximized() ? restoreItem : maximizeItem;
}
defaultPopup.setDefaultItem(def);
}
private static final int IMAGE_TYPE_CLOSE = 1;
private static final int IMAGE_TYPE_MAXIMIZE = 2;
private static final int IMAGE_TYPE_RESTORE = 3;
private static final int IMAGE_TYPE_MINIMIZE = 4;
private Image createMenuImage(int type, int height)
{
final Point size = new Point(height, height);
final int imgWidth = height + height/2;
final Color fg = getForeground();
final Color white = getDisplay().getSystemColor(SWT.COLOR_WHITE);
final RGB blackRGB = new RGB(0,0,0);
ImageData id = new ImageData(imgWidth, size.y, 1, new PaletteData(new RGB[] { blackRGB, fg.getRGB() }));
ImageData maskid = new ImageData(imgWidth, size.y, 1, new PaletteData(new RGB[] { blackRGB, white.getRGB() }));
Image img = new Image(getDisplay(), id);
GC gc = new GC(img);
gc.setForeground(fg);
drawMenuImage(gc, size, type);
gc.dispose();
Image maskimg = new Image(getDisplay(), maskid);
gc = new GC(maskimg);
gc.setForeground(white);
drawMenuImage(gc, size, type);
gc.dispose();
Image transp = new Image(getDisplay(), img.getImageData(), maskimg.getImageData());
img.dispose();
maskimg.dispose();
return transp;
}
private void drawMenuImage(GC gc, Point size, int type)
{
switch(type)
{
case IMAGE_TYPE_CLOSE:
gc.drawLine(1, 1, size.x-2, size.y-2);
gc.drawLine(2, 1, size.x-2, size.y-3);
gc.drawLine(1, 2, size.x-3, size.y-2);
gc.drawLine(1, size.y-2, size.x-2, 1);
gc.drawLine(1, size.y-3, size.x-3, 1);
gc.drawLine(2, size.y-2, size.x-2, 2);
break;
case IMAGE_TYPE_RESTORE:
gc.drawRectangle(0, 4, size.x-4, size.y-6);
gc.drawLine(1, 5, size.x-5, 5);
gc.drawLine(2, 1, size.x-2, 1);
gc.drawLine(2, 2, size.x-2, 2);
gc.drawPoint(2, 3);
gc.drawLine(size.x-2, 3, size.x-2, size.y-5);
gc.drawPoint(size.x-3, size.y-5);
break;
case IMAGE_TYPE_MAXIMIZE:
gc.drawRectangle(0, 0, size.x-2, size.y-2);
gc.drawLine(1, 1, size.x-3, 1);
break;
case IMAGE_TYPE_MINIMIZE:
gc.drawLine(1, size.y-2, size.x-4, size.y-2);
gc.drawLine(1, size.y-3, size.x-4, size.y-3);
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -