📄 mycanvas.java
字号:
package com.catking.middle;
import com.catking.buttom.*;
import com.catking.left.*;
import com.catking.mainFrm.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.*;
public class MyCanvas extends Composite
implements DrawConstants {
private Cursor currentCur;
private Shell shell;
private ButtonPane bp;
private ColorPane cp;
private Point originP;
private Image img;
private boolean isDraging = false;
private static final int OFFSET_X = 13;
private static final int OFFSET_Y = 22;
private static final int LEFT_RIGHT = 4;
private static final int RIGHT_BUTTOM = 5;
private static final int UP_DOWN = 6;
public MyCanvas(Shell shell, ButtonPane bp, ColorPane cp){
super(shell, SWT.BORDER);
this.shell = shell;
this.bp = bp;
this.cp = cp;
this.setSize(500, 500);
this.img = new Image(
Display.getDefault(), this.getSize().x, this.getSize().y);
this.changeCursor(PEN);
this.setForeground(
Display.getCurrent().getSystemColor(SWT.COLOR_BLACK));
hookEvent();
}
/*
private void buildGUI(){
//Canvas 的控制点
WhiteSquare square = new WhiteSquare(comp);
square.setLocation(0, 0);
canvas = new MyCanvas(comp, bp, cp);
rect = canvas.getBounds();
canvas.setLocation(rect.width, 0);
square = new WhiteSquare(shell);
data = new FormData(GAP, GAP);
data.top = new FormAttachment(0, 0);
data.left = new FormAttachment(canvas, 0, SWT.CENTER);
square.setLayoutData(data);
square = new WhiteSquare(shell);
data = new FormData(GAP, GAP);
data.top = new FormAttachment(0, 0);
data.left = new FormAttachment(canvas, 0);
square.setLayoutData(data);
square = new WhiteSquare(shell);
data = new FormData(GAP, GAP);
data.left = new FormAttachment(bp, 0);
data.top = new FormAttachment(canvas, 0, SWT.CENTER);
square.setLayoutData(data);
square = new WhiteSquare(shell);
data = new FormData(GAP, GAP);
data.left = new FormAttachment(bp, 0);
data.top = new FormAttachment(canvas, 0);
square.setLayoutData(data);
ResizeSquare rs = new ResizeSquare(shell, UP_DOWN, canvas);
data = new FormData(GAP, GAP);
data.left = new FormAttachment(canvas, 0, SWT.CENTER);
data.top = new FormAttachment(canvas,0);
rs.setLayoutData(data);
rs = new ResizeSquare(shell, RIGHT_BUTTOM, canvas);
data = new FormData(GAP, GAP);
data.left = new FormAttachment(canvas, 0);
data.top = new FormAttachment(canvas, 0);
rs.setLayoutData(data);
rs = new ResizeSquare(shell, LEFT_RIGHT, canvas);
data = new FormData(GAP, GAP);
data.left = new FormAttachment(canvas, 0);
data.top = new FormAttachment(canvas, 0, SWT.CENTER);
rs.setLayoutData(data);
}*/
private void hookEvent(){
//resize
this.addControlListener(new ControlAdapter() {
public void controlResized(ControlEvent e) {
Image img = new Image(
Display.getDefault(),
MyCanvas.this.getSize().x,
MyCanvas.this.getSize().y);
GC gc = new GC(img);
gc.drawImage(MyCanvas.this.img, 0, 0);
gc.dispose();
MyCanvas.this.img.dispose();
MyCanvas.this.img = img;
}
});
//mouse move
this.addMouseMoveListener(new MouseMoveListener(){
public void mouseMove(MouseEvent e) {
shell.setText("未命名-画图 "+e.x+","+e.y);
if(isDraging){
if(bp.getAction() == PEN)
paintDoodle(e);
else if(bp.getAction() == LINE)
paintLine(e.x, e.y);
}
}
});
this.addMouseListener(new MouseAdapter(){
public void mouseDown(MouseEvent e) {
originP = new Point(e.x + OFFSET_X, e.y + OFFSET_Y);
}
public void mouseUp(MouseEvent e) {
isDraging = false;
if(bp.getAction() == LINE)
paintFinalLine(new Point(e.x, e.y));
}
});
this.addMouseTrackListener(new MouseTrackAdapter(){
public void mouseEnter(MouseEvent e) {
switch(bp.getAction()){
case PEN:case LINE:case FILL:
changeCursor(bp.getAction());
break;
case EXTRACT:case SPRINKLE:case TEXT:
case RASE:case MAG:case BRUSH: break;
default:
changeCursor(LINE);
break;
}
}
});
//鼠标在拖动过程中
this.addDragDetectListener(new DragDetectListener(){
public void dragDetected(DragDetectEvent e) {
isDraging = true;
}
});
this.addPaintListener(new PaintListener(){
public void paintControl(PaintEvent e) {
e.gc.drawImage(img, 0, 0);
}
});
}
private void paintFinalLine(Point p){
GC gc = new GC(img);
gc.setForeground(cp.getCurrentColor());
gc.drawLine(originP.x, originP.y, p.x + OFFSET_X, p.y + OFFSET_Y);
gc.dispose();
this.redraw(originP.x, originP.y, 50, 50, true);
}
private void paintLine(int x, int y){
/*GC gc = new GC(img);
gc.setForeground(cp.getCurrentColor());
gc.drawLine(originP.x, originP.y, x + OFFSET_X, y + OFFSET_Y);
gc.dispose();
this.redraw();*/
}
private void paintDoodle(MouseEvent e){
GC gc = new GC(img);
gc.setForeground(cp.getCurrentColor());
gc.drawLine(originP.x, originP.y, e.x + OFFSET_X, e.y + OFFSET_Y);
gc.dispose();
this.redraw(originP.x, originP.y, 50, 50, true);
this.update();
originP.x = e.x + OFFSET_X;
originP.y = e.y + OFFSET_Y;
}
public void changeCursor(int style){
this.currentCur = SourceManager.curs[style];
this.setCursor(this.currentCur);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -