Showing the changes to java/pkg/awt/iWindowPeer.java (1 of 18352 files). Show all
Unified · Split
| @@ -0,0 +1,411 @@ | ||
| 1 | +/* | |
| 2 | + * %W% - %E% | |
| 3 | + */ | |
| 4 | + | |
| 5 | +package inferno.awt; | |
| 6 | + | |
| 7 | +import java.awt.*; | |
| 8 | +import java.awt.event.*; | |
| 9 | +import java.awt.peer.*; | |
| 10 | +import java.awt.image.ImageProducer; | |
| 11 | +import java.awt.image.ImageObserver; | |
| 12 | +import java.awt.image.ColorModel; | |
| 13 | +import java.awt.image.DirectColorModel; | |
| 14 | +import java.util.*; | |
| 15 | +import inferno.awt.iGraphics; | |
| 16 | + | |
| 17 | +public class iWindowPeer implements WindowPeer, DoubleBufferingPeer { | |
| 18 | + Object pCanvas; // Set inside create() | |
| 19 | + Window target; | |
| 20 | + int leftInset=0; // How much canvas is inset from window | |
| 21 | + int rightInset=0; | |
| 22 | + int topInset=0; | |
| 23 | + int bottomInset=0; | |
| 24 | + int left; // x position of left of window | |
| 25 | + int top; // y position of top of window | |
| 26 | + | |
| 27 | + private Point oldMousePoint; | |
| 28 | + private boolean buttonState[]; | |
| 29 | + | |
| 30 | + public iWindowPeer(Window target) { | |
| 31 | + this.target = target; | |
| 32 | + oldMousePoint=new Point(-1,-1); | |
| 33 | + buttonState=new boolean[3]; | |
| 34 | + for (int i=0;i<3;i++) buttonState[i]=false; //up | |
| 35 | + create(this); | |
| 36 | + Font f = target.getFont(); | |
| 37 | + if (f == null) { | |
| 38 | + f = new Font("Dialog", Font.PLAIN, 12); | |
| 39 | + target.setFont(f); | |
| 40 | + setFont(f); | |
| 41 | + } | |
| 42 | + Color c = target.getBackground(); | |
| 43 | + if (c == null) { | |
| 44 | + c = SystemColor.window; | |
| 45 | + target.setBackground(c); | |
| 46 | + setBackground(c); | |
| 47 | + } | |
| 48 | + c = target.getForeground(); | |
| 49 | + if (c == null) { | |
| 50 | + target.setForeground(Color.black); | |
| 51 | + setForeground(Color.black); | |
| 52 | + } | |
| 53 | + | |
| 54 | + } | |
| 55 | + | |
| 56 | + /* implementation of java.awt.peer.DoubleBufferingPeer */ | |
| 57 | + public boolean isDoubleBuffered() { | |
| 58 | + return true; | |
| 59 | + } | |
| 60 | + | |
| 61 | + native Object getRefImage(); // Returns $Draw->Image of canvas | |
| 62 | + native Object getRefOffScreenImage(); // Returns off-screen buffer image | |
| 63 | + | |
| 64 | + native void pReshape(int x, int y, int width, int height); | |
| 65 | + | |
| 66 | + native void pHide(); // Hide window | |
| 67 | + | |
| 68 | + native void pShow(iWindowPeer fp); // Show window | |
| 69 | + | |
| 70 | + native int getXYLoc(int coord); // get x or y value of the global position | |
| 71 | + | |
| 72 | + public native void create(iWindowPeer fp); // Create window putting canvas in pcanvas | |
| 73 | + | |
| 74 | + public native void pDispose(); // Destroy window | |
| 75 | + | |
| 76 | + public native void setCursor(int cursorType); // Set cursor | |
| 77 | + | |
| 78 | + | |
| 79 | + /* New 1.1 API */ | |
| 80 | + public Point getLocationOnScreen() // Return position on screen | |
| 81 | + { | |
| 82 | + Point p = new Point(); | |
| 83 | + p.x = getXYLoc(0); | |
| 84 | + p.y = getXYLoc(1); | |
| 85 | + return p; | |
| 86 | + } | |
| 87 | + | |
| 88 | + public void setCursor(Cursor c) | |
| 89 | + { | |
| 90 | + if (c!=null) | |
| 91 | + setCursor(c.getType()); | |
| 92 | + } | |
| 93 | + | |
| 94 | + public native void toFront(); // Move window to front | |
| 95 | + | |
| 96 | + public native void toBack(); // Move window to back | |
| 97 | + | |
| 98 | + public Insets getInsets() | |
| 99 | + { | |
| 100 | + Insets i=new Insets(topInset,leftInset,bottomInset,rightInset); | |
| 101 | + return i; | |
| 102 | + } | |
| 103 | + | |
| 104 | + public Insets insets() | |
| 105 | + { | |
| 106 | + return getInsets(); | |
| 107 | + } | |
| 108 | + | |
| 109 | + public void endValidate() | |
| 110 | + { | |
| 111 | + | |
| 112 | + } | |
| 113 | + | |
| 114 | + public void beginValidate() | |
| 115 | + { | |
| 116 | + | |
| 117 | + } | |
| 118 | + | |
| 119 | + public void setBounds(int x, int y, int width, int height) { | |
| 120 | + pReshape(x, y, width, height); | |
| 121 | + } | |
| 122 | + | |
| 123 | + public void reshape(int x, int y, int width, int height) { | |
| 124 | + pReshape(x, y, width, height); | |
| 125 | + } | |
| 126 | + | |
| 127 | + | |
| 128 | + public void dispose() | |
| 129 | + { | |
| 130 | + pDispose(); | |
| 131 | + pCanvas=null; | |
| 132 | + } | |
| 133 | + | |
| 134 | + public void disable() | |
| 135 | + { | |
| 136 | + setEnabled(false); | |
| 137 | + } | |
| 138 | + | |
| 139 | + public void enable() | |
| 140 | + { | |
| 141 | + setEnabled(false); | |
| 142 | + } | |
| 143 | + | |
| 144 | + public void setEnabled(boolean b) | |
| 145 | + { | |
| 146 | + | |
| 147 | + } | |
| 148 | + | |
| 149 | + public void hide() | |
| 150 | + { | |
| 151 | + setVisible(false); | |
| 152 | + } | |
| 153 | + | |
| 154 | + public void show() | |
| 155 | + { | |
| 156 | + setVisible(true); | |
| 157 | + } | |
| 158 | + | |
| 159 | + public void setVisible(boolean b) | |
| 160 | + { | |
| 161 | + if (b) | |
| 162 | + pShow(this); | |
| 163 | + else | |
| 164 | + pHide(); | |
| 165 | + } | |
| 166 | + | |
| 167 | + public Dimension getMinimumSize() { | |
| 168 | + return target.getSize(); | |
| 169 | + } | |
| 170 | + | |
| 171 | + public Dimension getPreferredSize() { | |
| 172 | + return getMinimumSize(); | |
| 173 | + } | |
| 174 | + | |
| 175 | + public Dimension minimumSize() { | |
| 176 | + return getMinimumSize(); | |
| 177 | + } | |
| 178 | + | |
| 179 | + public Dimension preferredSize() { | |
| 180 | + return getPreferredSize(); | |
| 181 | + } | |
| 182 | + | |
| 183 | + | |
| 184 | + public int checkImage(Image img, int w, int h, ImageObserver o) { | |
| 185 | + return 0; | |
| 186 | + } | |
| 187 | + | |
| 188 | + public FontMetrics getFontMetrics(Font font) { | |
| 189 | + return iFontMetrics.getFontMetrics(font); | |
| 190 | + } | |
| 191 | + | |
| 192 | + public boolean prepareImage(Image img, int w, int h, ImageObserver o) { | |
| 193 | + return false; | |
| 194 | + } | |
| 195 | + | |
| 196 | + | |
| 197 | + public Image createImage(ImageProducer producer) { | |
| 198 | + return null/*new Win32Image(producer)*/; | |
| 199 | + } | |
| 200 | + public Image createImage(int width, int height) { | |
| 201 | + return null/*new Win32Image(target, width, height)*/; | |
| 202 | + } | |
| 203 | + | |
| 204 | + public boolean isFocusTraversable() { | |
| 205 | + return false; | |
| 206 | + } | |
| 207 | + | |
| 208 | + public void requestFocus() | |
| 209 | + { | |
| 210 | + } | |
| 211 | + | |
| 212 | + public void nextFocus() | |
| 213 | + { | |
| 214 | + } | |
| 215 | + | |
| 216 | + public void setFont(Font f) | |
| 217 | + { | |
| 218 | + | |
| 219 | + } | |
| 220 | + | |
| 221 | + public Font getFont() | |
| 222 | + { | |
| 223 | + return null; | |
| 224 | + } | |
| 225 | + | |
| 226 | + public void setBackground(Color c) | |
| 227 | + { | |
| 228 | + | |
| 229 | + } | |
| 230 | + | |
| 231 | + public void setForeground(Color c) | |
| 232 | + { | |
| 233 | + | |
| 234 | + } | |
| 235 | + | |
| 236 | + public Graphics getGraphics() | |
| 237 | + { | |
| 238 | + if (pCanvas == null) { | |
| 239 | + System.out.println("iWindowPeer:getGraphics()s: pCanvas == null, continuing!"); // jfs -remove | |
| 240 | + return null; | |
| 241 | + } | |
| 242 | + Rectangle bounds = target.getBounds(); | |
| 243 | + Rectangle clip = new Rectangle(bounds.x+leftInset, | |
| 244 | + bounds.y+topInset, | |
| 245 | + bounds.width-leftInset-rightInset, | |
| 246 | + bounds.height-topInset-bottomInset); | |
| 247 | + Graphics g=new iGraphics(getRefImage(),getRefOffScreenImage(), clip, | |
| 248 | +target); | |
| 249 | + g.translate(bounds.x,bounds.y); | |
| 250 | + return g; | |
| 251 | + } | |
| 252 | + | |
| 253 | + public java.awt.Toolkit getToolkit() { | |
| 254 | + // XXX: bogus | |
| 255 | + return Toolkit.getDefaultToolkit(); | |
| 256 | + } | |
| 257 | + | |
| 258 | + public ColorModel getColorModel() { | |
| 259 | + return iToolkit.getStaticColorModel(); | |
| 260 | + } | |
| 261 | + | |
| 262 | + public void handleEvent(AWTEvent e) | |
| 263 | + { | |
| 264 | + | |
| 265 | + } | |
| 266 | + | |
| 267 | + public void print(Graphics g) | |
| 268 | + { | |
| 269 | + } | |
| 270 | + | |
| 271 | + public void paint(Graphics g) | |
| 272 | + { | |
| 273 | + g.setColor(target.getForeground()); | |
| 274 | + g.setFont(target.getFont()); | |
| 275 | + target.paint(g); | |
| 276 | + } | |
| 277 | + | |
| 278 | + | |
| 279 | + public void repaint(long tm, int x, int y, int width, int height) { | |
| 280 | + iToolkit.postEvent(new PaintEvent((Component)target, PaintEvent.UPDATE, | |
| 281 | + new Rectangle(x, y, width, height))); | |
| 282 | + | |
| 283 | + } | |
| 284 | + | |
| 285 | + public void handleKeyEvents(int ch) | |
| 286 | + { | |
| 287 | + char keyChar = (char)ch; | |
| 288 | + boolean control = ch >= 0 && ch <= 31; | |
| 289 | + boolean lowercase = ch >= (int)'a' && ch <= (int)'z'; | |
| 290 | + boolean uppercase = ch >= (int)'A' && ch <= (int)'Z'; | |
| 291 | + int modifiers = control?InputEvent.CTRL_MASK: | |
| 292 | + uppercase?InputEvent.SHIFT_MASK:0; | |
| 293 | + int keyCode = control?ch+64:lowercase?ch-32:ch; | |
| 294 | + Date d = new Date(); | |
| 295 | + long when = d.getTime(); | |
| 296 | + | |
| 297 | + iToolkit.postEvent(new KeyEvent(target,KeyEvent.KEY_PRESSED, | |
| 298 | + when,modifiers,keyCode,keyChar)); | |
| 299 | + | |
| 300 | + } | |
| 301 | + | |
| 302 | +private void handleMouseEvents(int m,int button,int x,int y) | |
| 303 | +{ | |
| 304 | + char mode=(char)m; | |
| 305 | + // System.out.println("Mouse event "+mode+" "+button+" "+x+" "+y); | |
| 306 | + switch(mode) | |
| 307 | + { | |
| 308 | + case 'd': | |
| 309 | + case 'r': | |
| 310 | + case 'm': | |
| 311 | + case 'p': | |
| 312 | + Rectangle bounds = target.getBounds(); | |
| 313 | + int xx=x-bounds.x-leftInset; | |
| 314 | + int yy=y-bounds.y; // -topInset; | |
| 315 | + | |
| 316 | + Point mousePoint=new Point(xx,yy); | |
| 317 | + //Date d = new Date(); | |
| 318 | + //long when = d.getTime(); | |
| 319 | + long when=0; | |
| 320 | + int modifier; | |
| 321 | + | |
| 322 | + switch(button) | |
| 323 | + { | |
| 324 | + case 1: | |
| 325 | + modifier=InputEvent.BUTTON1_MASK; | |
| 326 | + break; | |
| 327 | + | |
| 328 | + case 2: | |
| 329 | + modifier=InputEvent.BUTTON2_MASK; | |
| 330 | + break; | |
| 331 | + | |
| 332 | + case 3: | |
| 333 | + modifier=InputEvent.BUTTON3_MASK; | |
| 334 | + break; | |
| 335 | + | |
| 336 | + default: | |
| 337 | + modifier=0; | |
| 338 | + } | |
| 339 | + | |
| 340 | + switch(mode) | |
| 341 | + { | |
| 342 | + case 'p': // Pressed | |
| 343 | + case 'd': // Double click | |
| 344 | + { | |
| 345 | + if (button>0 && button<=3 && buttonState[button-1]==false) | |
| 346 | + { | |
| 347 | + oldMousePoint=mousePoint; | |
| 348 | + buttonState[button-1]=true; | |
| 349 | + iToolkit.postEvent(new MouseEvent(target,MouseEvent.MOUSE_PRESSED, | |
| 350 | + when,modifier,xx,yy,1,false)); | |
| 351 | + | |
| 352 | + } | |
| 353 | + break; | |
| 354 | + } | |
| 355 | + case 'r': // Released | |
| 356 | + { | |
| 357 | + if (button>0 && button<=3 && buttonState[button-1]==true) | |
| 358 | + { | |
| 359 | + buttonState[button-1]=false; | |
| 360 | + iToolkit.postEvent(new MouseEvent(target,MouseEvent.MOUSE_RELEASED, | |
| 361 | + when,modifier,xx,yy,1,false)); | |
| 362 | + if (mousePoint.equals(oldMousePoint)) | |
| 363 | + { | |
| 364 | + iToolkit.postEvent(new MouseEvent(target,MouseEvent.MOUSE_CLICKED, | |
| 365 | + when,modifier,xx,yy,1,button==2)); | |
| 366 | + } | |
| 367 | + } | |
| 368 | + break; | |
| 369 | + } | |
| 370 | + case 'm': // Moved | |
| 371 | + { | |
| 372 | + modifier=0; | |
| 373 | + if (buttonState[0]) modifier|=InputEvent.BUTTON1_MASK; | |
| 374 | + if (buttonState[1]) modifier|=InputEvent.BUTTON2_MASK; | |
| 375 | + if (buttonState[2]) modifier|=InputEvent.BUTTON3_MASK; | |
| 376 | + iToolkit.postEvent(new MouseEvent(target, | |
| 377 | + modifier==0?MouseEvent.MOUSE_MOVED:MouseEvent.MOUSE_DRAGGED, | |
| 378 | + when,modifier,xx,yy,1,false)); | |
| 379 | + | |
| 380 | + break; | |
| 381 | + } | |
| 382 | + default: | |
| 383 | + // System.out.println("MouseString: " + mouseString); | |
| 384 | + } | |
| 385 | + break; | |
| 386 | + } | |
| 387 | +} | |
| 388 | + | |
| 389 | + private void movesize(int x, int y, int width, int height) | |
| 390 | + { | |
| 391 | + Rectangle old = target.getBounds(); | |
| 392 | + Rectangle n = new Rectangle(x, y, width, height); | |
| 393 | + if (!n.equals(old)){ | |
| 394 | + target.setBounds(x, y, width, height); | |
| 395 | + target.repaint(); | |
| 396 | + } | |
| 397 | + } | |
| 398 | + | |
| 399 | + public void handleFocusGained() | |
| 400 | + { | |
| 401 | + | |
| 402 | + } | |
| 403 | +} | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |