Showing the changes to java/pkg/awt/iFramePeer.java (1 of 18352 files). Show all
Unified · Split
| @@ -0,0 +1,527 @@ | |||
| 1 | package inferno.awt; | ||
| 2 | |||
| 3 | import java.awt.*; | ||
| 4 | import java.awt.event.*; | ||
| 5 | import java.awt.peer.*; | ||
| 6 | import java.awt.image.ImageProducer; | ||
| 7 | import java.awt.image.ImageObserver; | ||
| 8 | import java.awt.image.ColorModel; | ||
| 9 | import java.awt.image.DirectColorModel; | ||
| 10 | import java.util.*; | ||
| 11 | import inferno.awt.iGraphics; | ||
| 12 | |||
| 13 | public class iFramePeer implements FramePeer, DoubleBufferingPeer { | ||
| 14 | private Object pCanvas; // Set inside create() used by natives | ||
| 15 | |||
| 16 | // set inside create(), used by natives, to avoid some clutter in | ||
| 17 | // escaping the Limbo type system. | ||
| 18 | private Object thisAsJObject; | ||
| 19 | |||
| 20 | private Frame target; | ||
| 21 | |||
| 22 | private int leftInset=0; // How much canvas is inset from frame | ||
| 23 | private int rightInset=0; | ||
| 24 | private int topInset=0; | ||
| 25 | private int bottomInset=0; | ||
| 26 | private int left; // x position of left of frame | ||
| 27 | private int top; // y position of top of frame | ||
| 28 | |||
| 29 | private Point oldMousePoint; | ||
| 30 | private boolean buttonState[]; | ||
| 31 | |||
| 32 | private int resizable = 1; | ||
| 33 | |||
| 34 | public iFramePeer(Frame target) { | ||
| 35 | this.target = target; | ||
| 36 | oldMousePoint=new Point(-1,-1); | ||
| 37 | buttonState=new boolean[3]; | ||
| 38 | for (int i=0;i<3;i++) buttonState[i]=false; //up | ||
| 39 | // create(this); | ||
| 40 | if (target.getTitle() != null) { | ||
| 41 | setTitle(target.getTitle()); | ||
| 42 | } | ||
| 43 | Font f = target.getFont(); | ||
| 44 | if (f == null) { | ||
| 45 | f = new Font("Dialog", Font.PLAIN, 12); | ||
| 46 | target.setFont(f); | ||
| 47 | setFont(f); | ||
| 48 | } | ||
| 49 | Color c = target.getBackground(); | ||
| 50 | if (c == null) { | ||
| 51 | c = SystemColor.window; | ||
| 52 | target.setBackground(c); | ||
| 53 | setBackground(c); | ||
| 54 | } | ||
| 55 | c = target.getForeground(); | ||
| 56 | if (c == null) { | ||
| 57 | target.setForeground(Color.black); | ||
| 58 | setForeground(Color.black); | ||
| 59 | } | ||
| 60 | if (!target.isResizable()) | ||
| 61 | this.resizable = 0; | ||
| 62 | |||
| 63 | create(this); | ||
| 64 | |||
| 65 | } | ||
| 66 | |||
| 67 | /* implementation of java.awt.peer.DoubleBufferingPeer */ | ||
| 68 | public boolean isDoubleBuffered() { | ||
| 69 | return true; | ||
| 70 | } | ||
| 71 | |||
| 72 | private native Object getRefImage(); // Returns dev/draw image of canvas | ||
| 73 | |||
| 74 | private native Object getRefOffScreenImage(); // Returns off-screen buffer image | ||
| 75 | |||
| 76 | private native void pReshape(int x, int y, int width, int height); | ||
| 77 | |||
| 78 | private native void pHide(); // Hide frame | ||
| 79 | |||
| 80 | private native void pShow(iFramePeer fp); // Show frame | ||
| 81 | |||
| 82 | private native int getXYLoc(int coord); // get x or y value of the global position | ||
| 83 | |||
| 84 | // Create frame putting canvas in pcanvas | ||
| 85 | private native void create(iFramePeer me); | ||
| 86 | |||
| 87 | public native void pDispose(); // Destroy frame | ||
| 88 | public native void setCursor(int cursorType); // Set cursor | ||
| 89 | public native void setTitle(String title); // Set title of frame | ||
| 90 | public native void toFront(); // Move frame to front | ||
| 91 | public native void toBack(); // Move frame to back | ||
| 92 | |||
| 93 | |||
| 94 | /* New 1.1 API */ | ||
| 95 | public Point getLocationOnScreen() // Return position on screen | ||
| 96 | { | ||
| 97 | Point p = new Point(); | ||
| 98 | p.x = getXYLoc(0); | ||
| 99 | p.y = getXYLoc(1); | ||
| 100 | return p; | ||
| 101 | } | ||
| 102 | |||
| 103 | public void recalculate() | ||
| 104 | { | ||
| 105 | MenuBar mb=target.getMenuBar(); | ||
| 106 | if (mb!=null) | ||
| 107 | { | ||
| 108 | iMenuBarPeer ip=(iMenuBarPeer)mb.getPeer(); | ||
| 109 | |||
| 110 | if (ip!=null) | ||
| 111 | { | ||
| 112 | ip.recalculate(); | ||
| 113 | } | ||
| 114 | } | ||
| 115 | } | ||
| 116 | |||
| 117 | public void setCursor(Cursor c) | ||
| 118 | { | ||
| 119 | if (c!=null) | ||
| 120 | setCursor(c.getType()); | ||
| 121 | } | ||
| 122 | |||
| 123 | public void setResizable(boolean resizable) | ||
| 124 | { | ||
| 125 | System.out.println("java: setResizable() get called" + resizable); | ||
| 126 | if(!resizable) | ||
| 127 | this.resizable = 0; | ||
| 128 | } | ||
| 129 | |||
| 130 | public void setMenuBar(MenuBar mb) | ||
| 131 | { | ||
| 132 | recalculate(); | ||
| 133 | } | ||
| 134 | |||
| 135 | public void setIconImage(Image im) | ||
| 136 | { | ||
| 137 | } | ||
| 138 | |||
| 139 | public Insets getInsets() | ||
| 140 | { | ||
| 141 | Insets i=new Insets(topInset,leftInset,bottomInset,rightInset); | ||
| 142 | |||
| 143 | MenuBar mb=target.getMenuBar(); | ||
| 144 | |||
| 145 | if (mb!=null) | ||
| 146 | { | ||
| 147 | iMenuBarPeer peer=(iMenuBarPeer)mb.getPeer(); | ||
| 148 | |||
| 149 | if (peer!=null) | ||
| 150 | { | ||
| 151 | i=(Insets)i.clone(); //Get new copy | ||
| 152 | |||
| 153 | i.top+=peer.getHeight(); | ||
| 154 | } | ||
| 155 | |||
| 156 | } | ||
| 157 | |||
| 158 | return i; | ||
| 159 | } | ||
| 160 | |||
| 161 | public Insets insets() | ||
| 162 | { | ||
| 163 | return getInsets(); | ||
| 164 | } | ||
| 165 | |||
| 166 | public void endValidate() | ||
| 167 | { | ||
| 168 | |||
| 169 | } | ||
| 170 | |||
| 171 | public void beginValidate() | ||
| 172 | { | ||
| 173 | |||
| 174 | } | ||
| 175 | |||
| 176 | public void setBounds(int x, int y, int width, int height) { | ||
| 177 | pReshape(x, y, width, height); | ||
| 178 | } | ||
| 179 | |||
| 180 | public void reshape(int x, int y, int width, int height) { | ||
| 181 | pReshape(x, y, width, height); | ||
| 182 | } | ||
| 183 | |||
| 184 | |||
| 185 | public void dispose() | ||
| 186 | { | ||
| 187 | pDispose(); | ||
| 188 | pCanvas=null; | ||
| 189 | } | ||
| 190 | |||
| 191 | public void disable() | ||
| 192 | { | ||
| 193 | setEnabled(false); | ||
| 194 | } | ||
| 195 | |||
| 196 | public void enable() | ||
| 197 | { | ||
| 198 | setEnabled(false); | ||
| 199 | } | ||
| 200 | |||
| 201 | public void setEnabled(boolean b) | ||
| 202 | { | ||
| 203 | |||
| 204 | } | ||
| 205 | |||
| 206 | public void hide() | ||
| 207 | { | ||
| 208 | setVisible(false); | ||
| 209 | } | ||
| 210 | |||
| 211 | public void show() | ||
| 212 | { | ||
| 213 | setVisible(true); | ||
| 214 | } | ||
| 215 | |||
| 216 | public void setVisible(boolean b) | ||
| 217 | { | ||
| 218 | if (b) | ||
| 219 | pShow(this); | ||
| 220 | else | ||
| 221 | pHide(); | ||
| 222 | } | ||
| 223 | |||
| 224 | public Dimension getMinimumSize() { | ||
| 225 | return target.getSize(); | ||
| 226 | } | ||
| 227 | |||
| 228 | public Dimension getPreferredSize() { | ||
| 229 | return getMinimumSize(); | ||
| 230 | } | ||
| 231 | |||
| 232 | public Dimension minimumSize() { | ||
| 233 | return getMinimumSize(); | ||
| 234 | } | ||
| 235 | |||
| 236 | public Dimension preferredSize() { | ||
| 237 | return getPreferredSize(); | ||
| 238 | } | ||
| 239 | |||
| 240 | |||
| 241 | public int checkImage(Image img, int w, int h, ImageObserver o) { | ||
| 242 | return 0; | ||
| 243 | } | ||
| 244 | |||
| 245 | public FontMetrics getFontMetrics(Font font) { | ||
| 246 | return iFontMetrics.getFontMetrics(font); | ||
| 247 | } | ||
| 248 | |||
| 249 | public boolean prepareImage(Image img, int w, int h, ImageObserver o) { | ||
| 250 | return false; | ||
| 251 | } | ||
| 252 | |||
| 253 | |||
| 254 | public Image createImage(ImageProducer producer) { | ||
| 255 | return null/*new Win32Image(producer)*/; | ||
| 256 | } | ||
| 257 | public Image createImage(int width, int height) { | ||
| 258 | return null/*new Win32Image(target, width, height)*/; | ||
| 259 | } | ||
| 260 | |||
| 261 | public boolean isFocusTraversable() { | ||
| 262 | return false; | ||
| 263 | } | ||
| 264 | |||
| 265 | public void requestFocus() | ||
| 266 | { | ||
| 267 | } | ||
| 268 | |||
| 269 | public void nextFocus() | ||
| 270 | { | ||
| 271 | } | ||
| 272 | |||
| 273 | public void setFont(Font f) | ||
| 274 | { | ||
| 275 | |||
| 276 | } | ||
| 277 | |||
| 278 | public Font getFont() | ||
| 279 | { | ||
| 280 | return null; | ||
| 281 | } | ||
| 282 | |||
| 283 | public void setBackground(Color c) | ||
| 284 | { | ||
| 285 | |||
| 286 | } | ||
| 287 | |||
| 288 | public void setForeground(Color c) | ||
| 289 | { | ||
| 290 | |||
| 291 | } | ||
| 292 | |||
| 293 | public Graphics getGraphics() | ||
| 294 | { | ||
| 295 | if (pCanvas==null) { | ||
| 296 | System.out.println("iFramePeer.getGraphics(): pCanvas == null!"); // jfs - remove | ||
| 297 | return null; | ||
| 298 | } | ||
| 299 | Rectangle bounds = target.getBounds(); | ||
| 300 | Rectangle clip = new Rectangle(bounds.x+leftInset, | ||
| 301 | bounds.y+topInset, | ||
| 302 | bounds.width-leftInset-rightInset, | ||
| 303 | bounds.height-topInset-bottomInset); | ||
| 304 | Graphics g=new iGraphics(getRefImage(),getRefOffScreenImage(), clip, target); | ||
| 305 | g.translate(bounds.x,bounds.y); // bounds have already been set - lg | ||
| 306 | return g; | ||
| 307 | } | ||
| 308 | |||
| 309 | public java.awt.Toolkit getToolkit() { | ||
| 310 | return Toolkit.getDefaultToolkit(); | ||
| 311 | } | ||
| 312 | |||
| 313 | public ColorModel getColorModel() { | ||
| 314 | return iToolkit.getStaticColorModel(); | ||
| 315 | } | ||
| 316 | |||
| 317 | public void handleEvent(AWTEvent e) | ||
| 318 | { | ||
| 319 | |||
| 320 | } | ||
| 321 | |||
| 322 | public void print(Graphics g) | ||
| 323 | { | ||
| 324 | } | ||
| 325 | |||
| 326 | public void paint(Graphics g) | ||
| 327 | { | ||
| 328 | g.setColor(target.getForeground()); | ||
| 329 | g.setFont(target.getFont()); | ||
| 330 | MenuBar mb=target.getMenuBar(); | ||
| 331 | if (mb!=null) | ||
| 332 | { | ||
| 333 | iMenuBarPeer ip=(iMenuBarPeer)mb.getPeer(); | ||
| 334 | |||
| 335 | if (ip!=null) | ||
| 336 | { | ||
| 337 | ip.paint(g); | ||
| 338 | } | ||
| 339 | } | ||
| 340 | target.paint(g); | ||
| 341 | } | ||
| 342 | |||
| 343 | |||
| 344 | public void repaint(long tm, int x, int y, int width, int height) { | ||
| 345 | |||
| 346 | iToolkit.postEvent(new PaintEvent((Component)target, PaintEvent.UPDATE, | ||
| 347 | new Rectangle(x, y, width, height))); | ||
| 348 | |||
| 349 | } | ||
| 350 | |||
| 351 | private void handleKeyEvents(int ch) | ||
| 352 | { | ||
| 353 | char keyChar = (char)ch; | ||
| 354 | boolean control = ch >= 0 && ch <= 31; | ||
| 355 | boolean lowercase = ch >= (int)'a' && ch <= (int)'z'; | ||
| 356 | boolean uppercase = ch >= (int)'A' && ch <= (int)'Z'; | ||
| 357 | int modifiers = control?InputEvent.CTRL_MASK: | ||
| 358 | uppercase?InputEvent.SHIFT_MASK:0; | ||
| 359 | int keyCode = control?ch+64:lowercase?ch-32:ch; | ||
| 360 | |||
| 361 | // constructing a Date is slow, System.currentTimeMillis(), | ||
| 362 | // is faster, but it's implementation opens #c/time and | ||
| 363 | // converts a string to a big. Fastest still and probably | ||
| 364 | // with sufficient resolution would be natively time stamping | ||
| 365 | // events with sys->millisec(). -jfs | ||
| 366 | //// Date d = new Date(); | ||
| 367 | //// long when = d.getTime(); | ||
| 368 | long when = System.currentTimeMillis(); | ||
| 369 | |||
| 370 | |||
| 371 | iToolkit.postEvent(new KeyEvent(target,KeyEvent.KEY_PRESSED, | ||
| 372 | when,modifiers,keyCode,keyChar)); | ||
| 373 | |||
| 374 | // synthesize events that we don't get from /dev/keyboard via | ||
| 375 | // Inferno's Tk (this is some fast typist!) | ||
| 376 | /* | ||
| 377 | iToolkit.postEvent(new KeyEvent(target,KeyEvent.KEY_TYPED, | ||
| 378 | when+1,modifiers,keyCode,keyChar)); | ||
| 379 | iToolkit.postEvent(new KeyEvent(target,KeyEvent.KEY_RELEASED, | ||
| 380 | when+2,modifiers,keyCode,keyChar)); | ||
| 381 | */ | ||
| 382 | } | ||
| 383 | |||
| 384 | private void handleMouseEvents(int m,int button,int x,int y) | ||
| 385 | { | ||
| 386 | char mode=(char)m; | ||
| 387 | // System.out.println("Mouse event "+mode+" "+button+" "+x+" "+y); | ||
| 388 | switch(mode) | ||
| 389 | { | ||
| 390 | case 'd': | ||
| 391 | case 'r': | ||
| 392 | case 'm': | ||
| 393 | case 'p': | ||
| 394 | Rectangle bounds = target.getBounds(); | ||
| 395 | int xx=x-bounds.x-leftInset; | ||
| 396 | int yy=y-bounds.y; // -topInset; | ||
| 397 | |||
| 398 | Point mousePoint=new Point(xx,yy); | ||
| 399 | long when = System.currentTimeMillis(); | ||
| 400 | int modifier; | ||
| 401 | |||
| 402 | switch(button) | ||
| 403 | { | ||
| 404 | case 1: | ||
| 405 | modifier=InputEvent.BUTTON1_MASK; | ||
| 406 | break; | ||
| 407 | |||
| 408 | case 2: | ||
| 409 | modifier=InputEvent.BUTTON2_MASK; | ||
| 410 | break; | ||
| 411 | |||
| 412 | case 3: | ||
| 413 | modifier=InputEvent.BUTTON3_MASK; | ||
| 414 | break; | ||
| 415 | |||
| 416 | default: | ||
| 417 | modifier=0; | ||
| 418 | } | ||
| 419 | |||
| 420 | switch(mode) | ||
| 421 | { | ||
| 422 | case 'p': // Pressed | ||
| 423 | case 'd': // Double click | ||
| 424 | { | ||
| 425 | if (button>0 && button<=3 && buttonState[button-1]==false) | ||
| 426 | { | ||
| 427 | oldMousePoint=mousePoint; | ||
| 428 | buttonState[button-1]=true; | ||
| 429 | iToolkit.postEvent(new MouseEvent(target,MouseEvent.MOUSE_PRESSED, | ||
| 430 | when,modifier,xx,yy,1,false)); | ||
| 431 | |||
| 432 | } | ||
| 433 | break; | ||
| 434 | } | ||
| 435 | case 'r': // Released | ||
| 436 | { | ||
| 437 | if (button>0 && button<=3 && buttonState[button-1]==true) | ||
| 438 | { | ||
| 439 | buttonState[button-1]=false; | ||
| 440 | iToolkit.postEvent(new MouseEvent(target,MouseEvent.MOUSE_RELEASED, | ||
| 441 | when,modifier,xx,yy,1,false)); | ||
| 442 | if (mousePoint.equals(oldMousePoint)) | ||
| 443 | { | ||
| 444 | iToolkit.postEvent(new MouseEvent(target,MouseEvent.MOUSE_CLICKED, | ||
| 445 | when,modifier,xx,yy,1,button==2)); | ||
| 446 | } | ||
| 447 | } | ||
| 448 | break; | ||
| 449 | } | ||
| 450 | case 'm': // Moved | ||
| 451 | { | ||
| 452 | modifier=0; | ||
| 453 | if (buttonState[0]) modifier|=InputEvent.BUTTON1_MASK; | ||
| 454 | if (buttonState[1]) modifier|=InputEvent.BUTTON2_MASK; | ||
| 455 | if (buttonState[2]) modifier|=InputEvent.BUTTON3_MASK; | ||
| 456 | iToolkit.postEvent(new MouseEvent(target, | ||
| 457 | modifier==0?MouseEvent.MOUSE_MOVED:MouseEvent.MOUSE_DRAGGED, | ||
| 458 | when,modifier,xx,yy,1,false)); | ||
| 459 | |||
| 460 | break; | ||
| 461 | } | ||
| 462 | default: | ||
| 463 | // System.out.println("focusEvent:" + mouseString); | ||
| 464 | } | ||
| 465 | break; | ||
| 466 | } | ||
| 467 | |||
| 468 | // System.out.println("mouseString "+mouseString); | ||
| 469 | } | ||
| 470 | |||
| 471 | private void moveSize(int x, int y, int width, int height) | ||
| 472 | { | ||
| 473 | Rectangle old = target.getBounds(); | ||
| 474 | Rectangle n = new Rectangle(x, y, width, height); | ||
| 475 | if (!n.equals(old)){ | ||
| 476 | target.setBounds(x, y, width, height); | ||
| 477 | target.validate(); | ||
| 478 | target.repaint(); | ||
| 479 | } | ||
| 480 | } | ||
| 481 | |||
| 482 | private void paintTarget(int x, int y, int width, int height) | ||
| 483 | { | ||
| 484 | target.setBounds(x, y, width, height); | ||
| 485 | target.validate(); | ||
| 486 | target.repaint(); | ||
| 487 | } | ||
| 488 | |||
| 489 | // | ||
| 490 | // Callbacks from native for Window Events | ||
| 491 | // | ||
| 492 | private void handleActivated() { | ||
| 493 | iToolkit.postEvent(new WindowEvent(target, | ||
| 494 | WindowEvent.WINDOW_ACTIVATED)); | ||
| 495 | iToolkit.postEvent(new FocusEvent(target, | ||
| 496 | FocusEvent.FOCUS_GAINED, false)); | ||
| 497 | } | ||
| 498 | private void handleDeactivated() { | ||
| 499 | iToolkit.postEvent(new WindowEvent(target, | ||
| 500 | WindowEvent.WINDOW_DEACTIVATED)); | ||
| 501 | iToolkit.postEvent(new FocusEvent(target, | ||
| 502 | FocusEvent.FOCUS_LOST, true)); | ||
| 503 | } | ||
| 504 | private void handleClosing() { | ||
| 505 | //System.out.println("iFramePeer.handleClosing():"); | ||
| 506 | // Java Frame can then call System.exit() to shutdown the VM | ||
| 507 | // if it so desires | ||
| 508 | iToolkit.postEvent(new WindowEvent(target, | ||
| 509 | WindowEvent.WINDOW_CLOSING)); | ||
| 510 | } | ||
| 511 | private void handleIconified() { | ||
| 512 | //System.out.println("iFramePeer.handleIconified():"); | ||
| 513 | iToolkit.postEvent(new WindowEvent(target, | ||
| 514 | WindowEvent.WINDOW_ICONIFIED)); | ||
| 515 | |||
| 516 | } | ||
| 517 | private void handleDeIconified() { | ||
| 518 | // System.out.println("iFramePeer.handleDeiconified():"); | ||
| 519 | iToolkit.postEvent(new WindowEvent(target, | ||
| 520 | WindowEvent.WINDOW_DEICONIFIED)); | ||
| 521 | |||
| 522 | // may need to make Cursors visible as well??? - jfs | ||
| 523 | // target.repaint(); | ||
| 524 | } | ||
| 525 | } | ||
| 526 | |||
| 527 | |||