1 /* 2 * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package javafx.scene.layout; 27 28 import javafx.geometry.HPos; 29 import javafx.geometry.Insets; 30 import javafx.geometry.Orientation; 31 import javafx.geometry.VPos; 32 import javafx.scene.image.Image; 33 import javafx.scene.image.ImageForTesting; 34 import javafx.scene.image.WritableImage; 35 import javafx.scene.paint.Color; 36 import javafx.scene.shape.ClosePath; 37 import javafx.scene.shape.LineTo; 38 import javafx.scene.shape.MoveTo; 39 import javafx.scene.shape.Path; 40 import java.util.concurrent.atomic.AtomicBoolean; 41 import com.sun.javafx.scene.DirtyBits; 42 import com.sun.javafx.sg.prism.NGRegion; 43 import org.junit.Test; 44 import static org.junit.Assert.assertEquals; 45 import static org.junit.Assert.assertFalse; 46 import static org.junit.Assert.assertTrue; 47 import static org.junit.Assert.fail; 48 49 /** 50 * 51 */ 52 public class RegionTest { 53 54 @Test public void testPaddingEmptyByDefault() { 55 Region region = new Region(); 56 57 assertEquals(Insets.EMPTY, region.getPadding()); 58 } 59 60 @Test public void testPaddingCannotBeSetToNull() { 61 Region region = new Region(); 62 63 try { 64 region.setPadding(null); 65 fail("NullPointerException expected if padding set to null."); 66 } catch (Exception e) { 67 // expected 68 } 69 70 try { 71 region.paddingProperty().set(null); 72 fail("NullPointerException expected if padding set to null."); 73 } catch (Exception e) { 74 // expected 75 } 76 } 77 78 @Test public void testInsetsEqualsPaddingByDefault() { 79 Region region = new Region(); 80 81 assertEquals(region.getInsets(), region.getPadding()); 82 } 83 84 @Test public void testBoundedSizeReturnsPrefWhenPrefBetweenMinAndMax() { 85 assertEquals(200, Region.boundedSize(100, 200, 300), 0); 86 } 87 88 @Test public void testBoundedSizeReturnsMinWhenMinGreaterThanPrefButLessThanMax() { 89 assertEquals(200, Region.boundedSize(200, 100, 300), 0); 90 } 91 92 @Test public void testBoundedSizeReturnsMinWhenMinGreaterThanPrefAndMax() { 93 assertEquals(300, Region.boundedSize(300, 100, 200), 0); 94 } 95 96 @Test public void testBoundedSizeReturnsMaxWhenMaxLessThanPrefButGreaterThanMin() { 97 assertEquals(200, Region.boundedSize(100, 300, 200), 0); 98 } 99 100 @Test public void testBoundedSizeReturnsMinWhenMaxLessThanPrefAndMin() { 101 assertEquals(200, Region.boundedSize(200, 300, 100), 0); 102 } 103 104 @Test public void testBoundedSizeReturnsMinWhenMaxLessThanPrefAndMinAndPrefLessThanMin() { 105 assertEquals(300, Region.boundedSize(300, 200, 100), 0); 106 } 107 108 @Test public void testMinWidthOverride() { 109 Region region = new MockRegion(10,20, 100,200, 500,600); 110 assertEquals(10, region.minWidth(-1), 1e-100); 111 region.setMinWidth(25.0); 112 assertEquals(25, region.getMinWidth(), 1e-100); 113 assertEquals(25, region.minWidth(-1), 1e-100); 114 } 115 116 @Test public void testMinWidthOverrideThenRestoreComputedSize() { 117 Region region = new MockRegion(10,20, 100,200, 500,600); 118 region.setMinWidth(75.0); 119 region.setMinWidth(Region.USE_COMPUTED_SIZE); // reset 120 assertEquals(Region.USE_COMPUTED_SIZE, region.getMinWidth(), 1e-100); 121 assertEquals(10, region.minWidth(-1), 1e-100); 122 } 123 124 @Test public void testMinWidthNaNTreatedAsZero() { 125 Region region = new Region(); 126 region.setMinWidth(Double.NaN); 127 assertEquals(0, region.minWidth(-1), 0); 128 assertEquals(0, region.minWidth(5), 0); 129 } 130 131 @Test public void testMinWidthNegativeTreatedAsZero() { 132 Region region = new Region(); 133 region.setMinWidth(-10); 134 assertEquals(0, region.minWidth(-1), 0); 135 assertEquals(0, region.minWidth(5), 0); 136 } 137 138 @Test public void testMinHeightOverride() { 139 Region region = new MockRegion(10,20, 100,200, 500,600); 140 assertEquals(20, region.minHeight(-1), 1e-100); 141 region.setMinHeight(30.0); 142 assertEquals(30, region.getMinHeight(), 1e-100); 143 assertEquals(30, region.minHeight(-1), 1e-100); 144 } 145 146 @Test public void testMinHeightOverrideThenRestoreComputedSize() { 147 Region region = new MockRegion(10,20, 100,200, 500,600); 148 region.setMinHeight(75.0); 149 region.setMinHeight(Region.USE_COMPUTED_SIZE); // reset 150 assertEquals(Region.USE_COMPUTED_SIZE, region.getMinHeight(), 1e-100); 151 assertEquals(20, region.minHeight(-1), 1e-100); 152 } 153 154 @Test public void testMinHeightNaNTreatedAsZero() { 155 Region region = new Region(); 156 region.setMinHeight(Double.NaN); 157 assertEquals(0, region.minHeight(-1), 0); 158 assertEquals(0, region.minHeight(5), 0); 159 } 160 161 @Test public void testMinHeightNegativeTreatedAsZero() { 162 Region region = new Region(); 163 region.setMinHeight(-10); 164 assertEquals(0, region.minHeight(-1), 0); 165 assertEquals(0, region.minHeight(5), 0); 166 } 167 168 @Test public void testMinWidthOverrideSetToPref() { 169 Region region = new MockRegion(10,20, 100,200, 500,600); 170 assertEquals(10, region.minWidth(-1), 1e-100); 171 region.setMinWidth(Region.USE_PREF_SIZE); 172 assertEquals(Region.USE_PREF_SIZE, region.getMinWidth(), 1e-100); 173 assertEquals(100, region.minWidth(-1), 1e-100); 174 } 175 176 @Test public void testMinHeightOverrideSetToPref() { 177 Region region = new MockRegion(10,20, 100,200, 500,600); 178 assertEquals(20, region.minHeight(-1), 1e-100); 179 region.setMinHeight(Region.USE_PREF_SIZE); 180 assertEquals(Region.USE_PREF_SIZE, region.getMinHeight(), 1e-100); 181 assertEquals(200, region.minHeight(-1), 1e-100); 182 } 183 184 @Test public void testPrefWidthOverride() { 185 Region region = new MockRegion(10,20, 100,200, 500,600); 186 assertEquals(100, region.prefWidth(-1), 1e-100); 187 region.setPrefWidth(150.0); 188 assertEquals(150, region.getPrefWidth(), 1e-100); 189 assertEquals(150, region.prefWidth(-1), 1e-100); 190 } 191 192 @Test public void testPrefWidthOverrideThenRestoreComputedSize() { 193 Region region = new MockRegion(10,20, 100,200, 500,600); 194 region.setPrefWidth(150.0); 195 region.setPrefWidth(Region.USE_COMPUTED_SIZE); // reset 196 assertEquals(Region.USE_COMPUTED_SIZE, region.getPrefWidth(), 1e-100); 197 assertEquals(100, region.prefWidth(-1), 1e-100); 198 } 199 200 @Test public void testPrefWidthNaNTreatedAsZero() { 201 Region region = new Region(); 202 region.setPrefWidth(Double.NaN); 203 assertEquals(0, region.prefWidth(-1), 0); 204 assertEquals(0, region.prefWidth(5), 0); 205 } 206 207 @Test public void testPrefWidthNegativeTreatedAsZero() { 208 Region region = new Region(); 209 region.setPrefWidth(-10); 210 assertEquals(0, region.prefWidth(-1), 0); 211 assertEquals(0, region.prefWidth(5), 0); 212 } 213 214 @Test public void testPrefHeightOverride() { 215 Region region = new MockRegion(10,20, 100,200, 500,600); 216 assertEquals(200, region.prefHeight(-1), 1e-100); 217 region.setPrefHeight(300.0); 218 assertEquals(300, region.getPrefHeight(), 1e-100); 219 assertEquals(300, region.prefHeight(-1), 1e-100); 220 } 221 222 @Test public void testPrefHeightOverrideThenRestoreComputedSize() { 223 Region region = new MockRegion(10,20, 100,200, 500,600); 224 region.setPrefHeight(250); 225 region.setPrefHeight(Region.USE_COMPUTED_SIZE); // reset 226 assertEquals(Region.USE_COMPUTED_SIZE, region.getPrefHeight(), 1e-100); 227 assertEquals(200, region.prefHeight(-1), 1e-100); 228 } 229 230 @Test public void testPrefHeightNaNTreatedAsZero() { 231 Region region = new Region(); 232 region.setPrefHeight(Double.NaN); 233 assertEquals(0, region.prefHeight(-1), 0); 234 assertEquals(0, region.prefHeight(5), 0); 235 } 236 237 @Test public void testPrefHeightNegativeTreatedAsZero() { 238 Region region = new Region(); 239 region.setPrefHeight(-10); 240 assertEquals(0, region.prefHeight(-1), 0); 241 assertEquals(0, region.prefHeight(5), 0); 242 } 243 244 @Test public void testMaxWidthOverride() { 245 Region region = new MockRegion(10,20, 100,200, 500,600); 246 assertEquals(500, region.maxWidth(-1), 1e-100); 247 region.setMaxWidth(550); 248 assertEquals(550, region.getMaxWidth(), 1e-100); 249 assertEquals(550, region.maxWidth(-1), 1e-100); 250 } 251 252 @Test public void testMaxWidthOverrideThenRestoreComputedSize() { 253 Region region = new MockRegion(10,20, 100,200, 500,600); 254 region.setMaxWidth(1000); 255 region.setMaxWidth(Region.USE_COMPUTED_SIZE); // reset 256 assertEquals(Region.USE_COMPUTED_SIZE, region.getMaxWidth(), 1e-100); 257 assertEquals(500, region.maxWidth(-1), 1e-100); 258 } 259 260 @Test public void testMaxWidthNaNTreatedAsZero() { 261 Region region = new Region(); 262 region.setMaxWidth(Double.NaN); 263 assertEquals(0, region.maxWidth(-1), 0); 264 assertEquals(0, region.maxWidth(5), 0); 265 } 266 267 @Test public void testMaxWidthNegativeTreatedAsZero() { 268 Region region = new Region(); 269 region.setMaxWidth(-10); 270 assertEquals(0, region.maxWidth(-1), 0); 271 assertEquals(0, region.maxWidth(5), 0); 272 } 273 274 @Test public void testMaxHeightOverride() { 275 Region region = new MockRegion(10,20, 100,200, 500,600); 276 assertEquals(600, region.maxHeight(-1), 1e-100); 277 region.setMaxHeight(650); 278 assertEquals(650, region.getMaxHeight(), 1e-100); 279 assertEquals(650, region.maxHeight(-1), 1e-100); 280 } 281 282 @Test public void testMaxHeightOverrideThenRestoreComputedSize() { 283 Region region = new MockRegion(10,20, 100,200, 500,600); 284 region.setMaxHeight(800); 285 region.setMaxHeight(Region.USE_COMPUTED_SIZE); // reset 286 assertEquals(Region.USE_COMPUTED_SIZE, region.getMaxHeight(), 0); 287 assertEquals(600, region.maxHeight(-1), 1e-100); 288 } 289 290 @Test public void testMaxHeightNaNTreatedAsZero() { 291 Region region = new Region(); 292 region.setMaxHeight(Double.NaN); 293 assertEquals(0, region.maxHeight(-1), 0); 294 assertEquals(0, region.maxHeight(5), 0); 295 } 296 297 @Test public void testMaxHeightNegativeTreatedAsZero() { 298 Region region = new Region(); 299 region.setMaxHeight(-10); 300 assertEquals(0, region.maxHeight(-1), 0); 301 assertEquals(0, region.maxHeight(5), 0); 302 } 303 304 @Test public void testMaxWidthOverrideSetToPref() { 305 Region region = new MockRegion(10,20, 100,200, 500,600); 306 assertEquals(500, region.maxWidth(-1), 1e-100); 307 region.setMaxWidth(Region.USE_PREF_SIZE); 308 assertEquals(Region.USE_PREF_SIZE, region.getMaxWidth(), 0); 309 assertEquals(100, region.maxWidth(-1), 1e-100); 310 } 311 312 @Test public void testMaxHeightOverrideSetToPref() { 313 Region region = new MockRegion(10,20, 100,200, 500,600); 314 assertEquals(600, region.maxHeight(-1), 1e-100); 315 region.setMaxHeight(Region.USE_PREF_SIZE); 316 assertEquals(Region.USE_PREF_SIZE, region.getMaxHeight(), 0); 317 assertEquals(200, region.maxHeight(-1), 1e-100); 318 } 319 320 @Test public void testPositionInAreaForResizableForResizableTopLeft() { 321 Pane pane = new Pane(); // Region extension which makes children sequence public 322 323 MockResizable child = new MockResizable(10,20, 30,40, 50,60); 324 pane.getChildren().add(child); 325 326 child.autosize(); 327 pane.positionInArea(child, 10, 10, 100, 100, 0, HPos.LEFT, VPos.TOP); 328 329 assertEquals(30, child.getWidth(), 1e-100); 330 assertEquals(40, child.getHeight(), 1e-100); 331 assertEquals(10, child.getLayoutX(), 1e-100); 332 assertEquals(10, child.getLayoutY(), 1e-100); 333 } 334 335 @Test public void testPositionInAreaForResizableTopCenter() { 336 Pane pane = new Pane(); // Region extension which makes children sequence public 337 338 MockResizable child = new MockResizable(10,20, 30,40, 50,60); 339 pane.getChildren().add(child); 340 341 child.autosize(); 342 pane.positionInArea(child, 10, 10, 100, 100, 0, HPos.CENTER, VPos.TOP); 343 344 assertEquals(30, child.getWidth(), 1e-100); 345 assertEquals(40, child.getHeight(), 1e-100); 346 assertEquals(45, child.getLayoutX(), 1e-100); 347 assertEquals(10, child.getLayoutY(), 1e-100); 348 } 349 350 @Test public void testPositionInAreaForResizableTopRight() { 351 Pane pane = new Pane(); // Region extension which makes children sequence public 352 353 MockResizable child = new MockResizable(10,20, 30,40, 50,60); 354 pane.getChildren().add(child); 355 356 child.autosize(); 357 pane.positionInArea(child, 10, 10, 100, 100, 0, HPos.RIGHT, VPos.TOP); 358 359 assertEquals(30, child.getWidth(), 1e-100); 360 assertEquals(40, child.getHeight(), 1e-100); 361 assertEquals(80, child.getLayoutX(), 1e-100); 362 assertEquals(10, child.getLayoutY(), 1e-100); 363 } 364 365 @Test public void testPositionInAreaForResizableCenterLeft() { 366 Pane pane = new Pane(); // Region extension which makes children sequence public 367 368 MockResizable child = new MockResizable(10,20, 30,40, 50,60); 369 pane.getChildren().add(child); 370 371 child.autosize(); 372 pane.positionInArea(child, 10, 10, 100, 100, 0, HPos.LEFT, VPos.CENTER); 373 374 assertEquals(30, child.getWidth(), 1e-100); 375 assertEquals(40, child.getHeight(), 1e-100); 376 assertEquals(10, child.getLayoutX(), 1e-100); 377 assertEquals(40, child.getLayoutY(), 1e-100); 378 } 379 380 // // See RT-19282 381 // @Test public void testPositionInAreaForNONResizableCenterLeft() { 382 // Pane pane = new Pane(); // Region extension which makes children sequence public 383 // 384 // Rectangle child = new Rectangle(50.4, 50.4); 385 // pane.getChildren().add(child); 386 // 387 // pane.positionInArea(child, 10, 10, 100, 100, 0, HPos.LEFT, VPos.CENTER); 388 // 389 // assertEquals(10, child.getLayoutX(), .01); 390 // assertEquals(34.8, child.getLayoutY(), .01); 391 // } 392 393 394 @Test public void testPositionInAreaForResizableCenter() { 395 Pane pane = new Pane(); // Region extension which makes children sequence public 396 397 MockResizable child = new MockResizable(10,20, 30,40, 50,60); 398 pane.getChildren().add(child); 399 400 child.autosize(); 401 pane.positionInArea(child, 10, 10, 100, 100, 0, HPos.CENTER, VPos.CENTER); 402 403 assertEquals(30, child.getWidth(), 1e-100); 404 assertEquals(40, child.getHeight(), 1e-100); 405 assertEquals(45, child.getLayoutX(), 1e-100); 406 assertEquals(40, child.getLayoutY(), 1e-100); 407 } 408 409 // // See RT-19282 410 // @Test public void testPositionInAreaForNONResizableCenter() { 411 // Pane pane = new Pane(); // Region extension which makes children sequence public 412 // 413 // Rectangle child = new Rectangle(50.4, 50.4); 414 // pane.getChildren().add(child); 415 // 416 // pane.positionInArea(child, 10, 10, 100, 100, 0, HPos.CENTER, VPos.CENTER); 417 // 418 // assertEquals(34.8, child.getLayoutX(), .01); 419 // assertEquals(34.8, child.getLayoutY(), .01); 420 // } 421 422 @Test public void testPositionInAreaForResizableCenterRight() { 423 Pane pane = new Pane(); // Region extension which makes children sequence public 424 425 MockResizable child = new MockResizable(10,20, 30,40, 50,60); 426 pane.getChildren().add(child); 427 428 child.autosize(); 429 pane.positionInArea(child, 10, 10, 100, 100, 0, HPos.RIGHT, VPos.CENTER); 430 431 assertEquals(30, child.getWidth(), 1e-100); 432 assertEquals(40, child.getHeight(), 1e-100); 433 assertEquals(80, child.getLayoutX(), 1e-100); 434 assertEquals(40, child.getLayoutY(), 1e-100); 435 } 436 437 @Test public void testPositionInAreaForResizableBottomLeft() { 438 Pane pane = new Pane(); // Region extension which makes children sequence public 439 440 MockResizable child = new MockResizable(10,20, 30,40, 50,60); 441 pane.getChildren().add(child); 442 443 child.autosize(); 444 pane.positionInArea(child, 10, 10, 100, 100, 0, HPos.LEFT, VPos.BOTTOM); 445 446 assertEquals(30, child.getWidth(), 1e-100); 447 assertEquals(40, child.getHeight(), 1e-100); 448 assertEquals(10, child.getLayoutX(), 1e-100); 449 assertEquals(70, child.getLayoutY(), 1e-100); 450 } 451 452 // // See RT-19282 453 // @Test public void testPositionInAreaForNONResizableBottomLeft() { 454 // Pane pane = new Pane(); // Region extension which makes children sequence public 455 // 456 // Rectangle child = new Rectangle(50.4, 50.4); 457 // pane.getChildren().add(child); 458 // 459 // pane.positionInArea(child, 10, 10, 100, 100, 0, HPos.LEFT, VPos.BOTTOM); 460 // 461 // assertEquals(10, child.getLayoutX(), .01); 462 // assertEquals(59.6, child.getLayoutY(), .01); 463 // } 464 465 @Test public void testPositionInAreaForResizableBottomCenter() { 466 Pane pane = new Pane(); // Region extension which makes children sequence public 467 468 MockResizable child = new MockResizable(10,20, 30,40, 50,60); 469 pane.getChildren().add(child); 470 471 child.autosize(); 472 pane.positionInArea(child, 10, 10, 100, 100, 0, HPos.CENTER, VPos.BOTTOM); 473 474 assertEquals(30, child.getWidth(), 1e-100); 475 assertEquals(40, child.getHeight(), 1e-100); 476 assertEquals(45, child.getLayoutX(), 1e-100); 477 assertEquals(70, child.getLayoutY(), 1e-100); 478 } 479 480 // // See RT-19282 481 // @Test public void testPositionInAreaForNONResizableBottomCenter() { 482 // Pane pane = new Pane(); // Region extension which makes children sequence public 483 // 484 // Rectangle child = new Rectangle(50.4, 50.4); 485 // pane.getChildren().add(child); 486 // 487 // pane.positionInArea(child, 10, 10, 100, 100, 0, HPos.CENTER, VPos.BOTTOM); 488 // 489 // assertEquals(34.8, child.getLayoutX(), .01); 490 // assertEquals(59.6, child.getLayoutY(), .01); 491 // } 492 493 @Test public void testPositionInAreaForResizableBottomRight() { 494 Pane pane = new Pane(); // Region extension which makes children sequence public 495 496 MockResizable child = new MockResizable(10,20, 30,40, 50,60); 497 pane.getChildren().add(child); 498 499 child.autosize(); 500 pane.positionInArea(child, 10, 10, 100, 100, 0, HPos.RIGHT, VPos.BOTTOM); 501 502 assertEquals(30, child.getWidth(), 1e-100); 503 assertEquals(40, child.getHeight(), 1e-100); 504 assertEquals(80, child.getLayoutX(), 1e-100); 505 assertEquals(70, child.getLayoutY(), 1e-100); 506 } 507 508 // // See RT-19282 509 // @Test public void testPositionInAreaForNONResizableBottomRight() { 510 // Pane pane = new Pane(); // Region extension which makes children sequence public 511 // 512 // Rectangle child = new Rectangle(50.4, 50.4); 513 // pane.getChildren().add(child); 514 // 515 // pane.positionInArea(child, 10, 10, 100, 100, 0, HPos.RIGHT, VPos.BOTTOM); 516 // 517 // assertEquals(59.6, child.getLayoutX(), .01); 518 // assertEquals(59.6, child.getLayoutY(), .01); 519 // } 520 521 @Test public void testPositionInAreaForResizableBaselineLeft() { 522 Pane pane = new Pane(); // Region extension which makes children sequence public 523 524 MockResizable child = new MockResizable(10,20, 30,40, 50,60); //baseline = 30 525 pane.getChildren().add(child); 526 527 child.autosize(); 528 pane.positionInArea(child, 10, 10, 100, 100, 50, HPos.LEFT, VPos.BASELINE); 529 530 assertEquals(30, child.getWidth(), 1e-100); 531 assertEquals(40, child.getHeight(), 1e-100); 532 assertEquals(10, child.getLayoutX(), 1e-100); 533 assertEquals(30, child.getLayoutY(), 1e-100); 534 } 535 536 // // See RT-19282 537 // @Test public void testPositionInAreaForNONResizableBaselineLeft() { 538 // Pane pane = new Pane(); // Region extension which makes children sequence public 539 // 540 // Rectangle child = new Rectangle(50.4, 50.4); 541 // pane.getChildren().add(child); 542 // 543 // pane.positionInArea(child, 10, 10, 100, 100, 60, HPos.LEFT, VPos.BASELINE); 544 // 545 // assertEquals(10, child.getLayoutX(), .01); 546 // assertEquals(19.6, child.getLayoutY(), .01); 547 // } 548 549 @Test public void testPositionInAreaForResizableBaselineCenter() { 550 Pane pane = new Pane(); // Region extension which makes children sequence public 551 552 MockResizable child = new MockResizable(10,20, 30,40, 50,60); //baseline = 30 553 pane.getChildren().add(child); 554 555 child.autosize(); 556 pane.positionInArea(child, 10, 10, 100, 100, 50, HPos.CENTER, VPos.BASELINE); 557 558 assertEquals(30, child.getWidth(), 1e-100); 559 assertEquals(40, child.getHeight(), 1e-100); 560 assertEquals(45, child.getLayoutX(), 1e-100); 561 assertEquals(30, child.getLayoutY(), 1e-100); 562 } 563 564 // // See RT-19282 565 // @Test public void testPositionInAreaForNONResizableBaselineCenter() { 566 // Pane pane = new Pane(); // Region extension which makes children sequence public 567 // 568 // Rectangle child = new Rectangle(50.4, 50.4); 569 // pane.getChildren().add(child); 570 // 571 // pane.positionInArea(child, 10, 10, 100, 100, 60, HPos.CENTER, VPos.BASELINE); 572 // 573 // assertEquals(34.8, child.getLayoutX(), .01); 574 // assertEquals(19.6, child.getLayoutY(), .01); 575 // } 576 577 @Test public void testPositionInAreaForResizableBaselineRight() { 578 Pane pane = new Pane(); // Region extension which makes children sequence public 579 580 MockResizable child = new MockResizable(10,20, 30,40, 50,60); //baseline = 30 581 pane.getChildren().add(child); 582 583 child.autosize(); 584 pane.positionInArea(child, 10, 10, 100, 100, 50, HPos.RIGHT, VPos.BASELINE); 585 586 assertEquals(30, child.getWidth(), 1e-100); 587 assertEquals(40, child.getHeight(), 1e-100); 588 assertEquals(80, child.getLayoutX(), 1e-100); 589 assertEquals(30, child.getLayoutY(), 1e-100); 590 } 591 592 // // See RT-19282 593 // @Test public void testPositionInAreaForNONResizableBaselineRight() { 594 // Pane pane = new Pane(); // Region extension which makes children sequence public 595 // 596 // Rectangle child = new Rectangle(50.4, 50.4); 597 // pane.getChildren().add(child); 598 // 599 // pane.positionInArea(child, 10, 10, 100, 100, 60, HPos.RIGHT, VPos.BASELINE); 600 // 601 // assertEquals(59.6, child.getLayoutX(), .01); 602 // assertEquals(19.6, child.getLayoutY(), .01); 603 // } 604 605 @Test public void testLayoutInAreaWithLargerMax() { 606 Pane pane = new Pane(); // Region extension which makes children sequence public 607 608 MockResizable child = new MockResizable(10,20, 30,40, 300,300); 609 pane.getChildren().add(child); 610 611 pane.layoutInArea(child, 10, 10, 100, 100, 0, HPos.CENTER, VPos.CENTER); 612 613 assertEquals(100, child.getWidth(), 1e-100); 614 assertEquals(100, child.getHeight(), 1e-100); 615 assertEquals(10, child.getLayoutX(), 1e-100); 616 assertEquals(10, child.getLayoutY(), 1e-100); 617 618 } 619 620 @Test public void testLayoutInAreaWithSmallerMax() { 621 Pane pane = new Pane(); // Region extension which makes children sequence public 622 623 MockResizable child = new MockResizable(10,20, 30,40, 50,60); 624 pane.getChildren().add(child); 625 626 pane.layoutInArea(child, 10, 10, 100, 100, 0, HPos.CENTER, VPos.CENTER); 627 628 assertEquals(50, child.getWidth(), 1e-100); 629 assertEquals(60, child.getHeight(), 1e-100); 630 assertEquals(35, child.getLayoutX(), 1e-100); 631 assertEquals(30, child.getLayoutY(), 1e-100); 632 633 } 634 635 @Test public void testLayoutInAreaWithLargerMin() { 636 Pane pane = new Pane(); // Region extension which makes children sequence public 637 638 MockResizable child = new MockResizable(10,20, 30,40, 50,60); 639 pane.getChildren().add(child); 640 641 pane.layoutInArea(child, 10, 10, 5, 5, 0, HPos.CENTER, VPos.CENTER); 642 643 assertEquals(10, child.getWidth(), 1e-100); 644 assertEquals(20, child.getHeight(), 1e-100); 645 assertEquals(8, child.getLayoutX(), 1e-100); 646 assertEquals(3, child.getLayoutY(), 1e-100); 647 648 } 649 650 @Test public void testLayoutInAreaWithSizeOverrides() { 651 Pane pane = new Pane(); // Region extension which makes children sequence public 652 653 MockRegion child = new MockRegion(10,20, 30,40, 50,60); 654 child.setMinSize(50,60); 655 child.setPrefSize(100,200); 656 child.setMaxSize(500, 500); 657 pane.getChildren().add(child); 658 659 pane.layoutInArea(child, 10, 10, 300, 300, 0, HPos.CENTER, VPos.CENTER); 660 661 assertEquals(300, child.getWidth(), 1e-100); 662 assertEquals(300, child.getHeight(), 1e-100); 663 assertEquals(10, child.getLayoutX(), 1e-100); 664 assertEquals(10, child.getLayoutY(), 1e-100); 665 666 } 667 668 @Test public void testLayoutInAreaWithMaxConstrainedToPref() { 669 Pane pane = new Pane(); // Region extension which makes children sequence public 670 671 MockRegion child = new MockRegion(10,20, 30,40, 500,500); 672 child.setMinSize(50,60); 673 child.setPrefSize(100,200); 674 child.setMaxSize(Region.USE_PREF_SIZE, Region.USE_PREF_SIZE); 675 pane.getChildren().add(child); 676 677 pane.layoutInArea(child, 10, 10, 300, 300, 0, HPos.CENTER, VPos.CENTER); 678 679 assertEquals(100, child.getWidth(), 1e-100); 680 assertEquals(200, child.getHeight(), 1e-100); 681 assertEquals(110, child.getLayoutX(), 1e-100); 682 assertEquals(60, child.getLayoutY(), 1e-100); 683 684 } 685 686 @Test public void testLayoutInAreaHonorsMaxWidthOverPref() { 687 Pane pane = new Pane(); // Region extension which makes children sequence public 688 689 MockRegion child = new MockRegion(10,20, 200,300, 500,500); 690 child.setMaxWidth(100); // max less than pref 691 pane.getChildren().add(child); 692 693 pane.layoutInArea(child, 10, 10, 300, 300, 0, HPos.CENTER, VPos.CENTER); 694 695 assertEquals(100, child.getWidth(), 1e-100); 696 assertEquals(300, child.getHeight(), 1e-100); 697 assertEquals(110, child.getLayoutX(), 1e-100); 698 assertEquals(10, child.getLayoutY(), 1e-100); 699 700 } 701 702 @Test public void testLayoutInAreaHonorsMaxHeightOverPref() { 703 Pane pane = new Pane(); // Region extension which makes children sequence public 704 705 MockRegion child = new MockRegion(10,20, 200,300, 500,500); 706 child.setMaxHeight(100); // max less than pref 707 pane.getChildren().add(child); 708 709 pane.layoutInArea(child, 10, 10, 300, 300, 0, HPos.CENTER, VPos.CENTER); 710 711 assertEquals(300, child.getWidth(), 1e-100); 712 assertEquals(100, child.getHeight(), 1e-100); 713 assertEquals(10, child.getLayoutX(), 1e-100); 714 assertEquals(110, child.getLayoutY(), 1e-100); 715 716 } 717 718 @Test public void testLayoutInAreaHonorsMinWidthOverPref() { 719 Pane pane = new Pane(); // Region extension which makes children sequence public 720 721 MockRegion child = new MockRegion(10,20, 200,300, 500,500); 722 child.setMinWidth(400); // max less than pref 723 pane.getChildren().add(child); 724 725 pane.layoutInArea(child, 10, 10, 300, 300, 0, HPos.CENTER, VPos.CENTER); 726 727 assertEquals(400, child.getWidth(), 1e-100); 728 assertEquals(300, child.getHeight(), 1e-100); 729 assertEquals(-40, child.getLayoutX(), 1e-100); 730 assertEquals(10, child.getLayoutY(), 1e-100); 731 } 732 733 @Test public void testLayoutInAreaHonorsMinHeightOverPref() { 734 Pane pane = new Pane(); // Region extension which makes children sequence public 735 736 MockRegion child = new MockRegion(10,20, 200,300, 500,500); 737 child.setMinHeight(400); // max less than pref 738 pane.getChildren().add(child); 739 740 pane.layoutInArea(child, 10, 10, 300, 300, 0, HPos.CENTER, VPos.CENTER); 741 742 assertEquals(300, child.getWidth(), 1e-100); 743 assertEquals(400, child.getHeight(), 1e-100); 744 assertEquals(10, child.getLayoutX(), 1e-100); 745 assertEquals(-40, child.getLayoutY(), 1e-100); 746 } 747 748 @Test public void testLayoutInAreaHonorsMinWidthOverMax() { 749 Pane pane = new Pane(); // Region extension which makes children sequence public 750 751 MockRegion child = new MockRegion(10,20, 200,300, 500,500); 752 child.setMinWidth(600); // max less than min 753 pane.getChildren().add(child); 754 755 pane.layoutInArea(child, 10, 10, 300, 300, 0, HPos.CENTER, VPos.CENTER); 756 757 assertEquals(600, child.getWidth(), 1e-100); 758 assertEquals(300, child.getHeight(), 1e-100); 759 assertEquals(-140, child.getLayoutX(), 1e-100); 760 assertEquals(10, child.getLayoutY(), 1e-100); 761 } 762 763 @Test public void testLayoutInAreaHonorsMinHeightOverMax() { 764 Pane pane = new Pane(); // Region extension which makes children sequence public 765 766 MockRegion child = new MockRegion(10,20, 200,300, 500,500); 767 child.setMinHeight(600); // max less than min 768 pane.getChildren().add(child); 769 770 pane.layoutInArea(child, 10, 10, 300, 300, 0, HPos.CENTER, VPos.CENTER); 771 772 assertEquals(300, child.getWidth(), 1e-100); 773 assertEquals(600, child.getHeight(), 1e-100); 774 assertEquals(10, child.getLayoutX(), 1e-100); 775 assertEquals(-140, child.getLayoutY(), 1e-100); 776 } 777 778 @Test public void testLayoutInAreaHonorsAreaWidthOverPrefWithFillWidth() { 779 Pane pane = new Pane(); // Region extension which makes children sequence public 780 781 MockRegion child = new MockRegion(10,20, 200,300, 500,500); 782 pane.getChildren().add(child); 783 784 pane.layoutInArea(child, 10, 10, 100, 400, 0, Insets.EMPTY, true, true, HPos.CENTER, VPos.CENTER); 785 786 assertEquals(100, child.getWidth(), 1e-100); 787 assertEquals(400, child.getHeight(), 1e-100); 788 assertEquals(10, child.getLayoutX(), 1e-100); 789 assertEquals(10, child.getLayoutY(), 1e-100); 790 } 791 792 @Test public void testLayoutInAreaHonorsAreaHeightOverPrefWithFillHeight() { 793 Pane pane = new Pane(); // Region extension which makes children sequence public 794 795 MockRegion child = new MockRegion(10,20, 200,300, 500,500); 796 pane.getChildren().add(child); 797 798 pane.layoutInArea(child, 10, 10, 300, 100, 0, Insets.EMPTY, true, true, HPos.CENTER, VPos.CENTER); 799 800 assertEquals(300, child.getWidth(), 1e-100); 801 assertEquals(100, child.getHeight(), 1e-100); 802 assertEquals(10, child.getLayoutX(), 1e-100); 803 assertEquals(10, child.getLayoutY(), 1e-100); 804 } 805 806 @Test public void testLayoutInAreaHonorsAreaWidthOverPrefWithNOFill() { 807 Pane pane = new Pane(); // Region extension which makes children sequence public 808 809 MockRegion child = new MockRegion(10,20, 200,300, 500,500); 810 pane.getChildren().add(child); 811 812 pane.layoutInArea(child, 10, 10, 100, 400, 0, Insets.EMPTY, false, false, HPos.CENTER, VPos.CENTER); 813 814 assertEquals(100, child.getWidth(), 1e-100); 815 assertEquals(300, child.getHeight(), 1e-100); 816 assertEquals(10, child.getLayoutX(), 1e-100); 817 assertEquals(60, child.getLayoutY(), 1e-100); 818 } 819 820 @Test public void testLayoutInAreaHonorsAreaHeightOverPrefWithNOFill() { 821 Pane pane = new Pane(); // Region extension which makes children sequence public 822 823 MockRegion child = new MockRegion(10,20, 200,300, 500,500); 824 pane.getChildren().add(child); 825 826 pane.layoutInArea(child, 10, 10, 300, 100, 0, Insets.EMPTY, false, false, HPos.CENTER, VPos.CENTER); 827 828 assertEquals(200, child.getWidth(), 1e-100); 829 assertEquals(100, child.getHeight(), 1e-100); 830 assertEquals(60, child.getLayoutX(), 1e-100); 831 assertEquals(10, child.getLayoutY(), 1e-100); 832 } 833 834 @Test public void testLayoutInAreaWithBaselineOffset() { 835 Pane pane = new Pane(); // Region extension which makes children sequence public 836 837 Region c1 = new MockBiased(Orientation.HORIZONTAL, 100, 100); 838 Region c2 = new MockBiased(Orientation.VERTICAL, 100, 100); 839 Region c3 = new MockRegion(10, 10, 100, 100, 1000, 1000); 840 841 pane.getChildren().addAll(c1, c2, c3); 842 pane.layoutInArea(c1, 10, 10, 300, 100, 20, Insets.EMPTY, false, false, HPos.CENTER, VPos.BASELINE); 843 pane.layoutInArea(c2, 10, 10, 300, 100, 20, Insets.EMPTY, false, false, HPos.CENTER, VPos.BASELINE); 844 pane.layoutInArea(c3, 10, 10, 300, 100, 20, Insets.EMPTY, false, false, HPos.CENTER, VPos.BASELINE); 845 846 assertEquals(100, c1.getHeight(), 1e-100); // min height == pref height 847 // As the other 2 Regions don't have a baseline offset, their baseline offset is "same as height", therefore 848 // they can be max 20px tall 849 assertEquals(20, c2.getHeight(), 1e-100); 850 assertEquals(20, c3.getHeight(), 1e-100); 851 } 852 853 @Test public void testComputeChildPrefAreaWidthHonorsMaxWidthOverPref() { 854 Pane pane = new Pane(); // Region extension which makes children sequence public 855 856 MockRegion child = new MockRegion(10,20, 200,300, 500,500); 857 child.setMaxWidth(100); // max less than pref 858 pane.getChildren().add(child); 859 860 assertEquals(100, pane.computeChildPrefAreaWidth(child, Insets.EMPTY), 1e-100); 861 } 862 863 @Test public void testComputeChildPrefAreaHeightHonorsMaxWidthOverPref() { 864 Pane pane = new Pane(); // Region extension which makes children sequence public 865 866 MockRegion child = new MockRegion(10,20, 200,300, 500,500); 867 child.setMaxHeight(100); // max less than pref 868 pane.getChildren().add(child); 869 870 assertEquals(100, pane.computeChildPrefAreaHeight(child, Insets.EMPTY), 1e-100); 871 } 872 873 @Test public void testComputeChildPrefAreaWidthHonorsMinWidthOverPref() { 874 Pane pane = new Pane(); // Region extension which makes children sequence public 875 876 MockRegion child = new MockRegion(10,20, 200,300, 500,500); 877 child.setMinWidth(400); // max less than pref 878 pane.getChildren().add(child); 879 880 assertEquals(400, pane.computeChildPrefAreaWidth(child, Insets.EMPTY), 1e-100); 881 } 882 883 @Test public void testComputeChildPrefAreaHeightHonorsMinWidthOverPref() { 884 Pane pane = new Pane(); // Region extension which makes children sequence public 885 886 MockRegion child = new MockRegion(10,20, 200,300, 500,500); 887 child.setMinHeight(400); // max less than pref 888 pane.getChildren().add(child); 889 890 assertEquals(400, pane.computeChildPrefAreaHeight(child, Insets.EMPTY), 1e-100); 891 } 892 893 @Test public void testComputeChildPrefAreaWidthHonorsMinWidthOverMax() { 894 Pane pane = new Pane(); // Region extension which makes children sequence public 895 896 MockRegion child = new MockRegion(10,20, 200,300, 500,500); 897 child.setMinWidth(600); // max less than pref 898 pane.getChildren().add(child); 899 900 assertEquals(600, pane.computeChildPrefAreaWidth(child, Insets.EMPTY), 1e-100); 901 } 902 903 @Test public void testComputeChildPrefAreaHeightHonorsMinWidthOverMax() { 904 Pane pane = new Pane(); // Region extension which makes children sequence public 905 906 MockRegion child = new MockRegion(10,20, 200,300, 500,500); 907 child.setMinHeight(600); // max less than pref 908 pane.getChildren().add(child); 909 910 assertEquals(600, pane.computeChildPrefAreaHeight(child, Insets.EMPTY), 1e-100); 911 } 912 913 @Test public void testChildMinAreaWidth() { 914 Pane pane = new Pane(); 915 916 Region c1 = new MockBiased(Orientation.HORIZONTAL, 100, 100); 917 Region c2 = new MockBiased(Orientation.VERTICAL, 100, 100); 918 Region c3 = new MockRegion(10, 10, 100, 100, 1000, 1000); 919 920 pane.getChildren().addAll(c1, c2, c3); 921 922 assertEquals(12, pane.computeChildMinAreaWidth(c1, new Insets(1)), 1e-100); 923 assertEquals(12, pane.computeChildMinAreaWidth(c1, 0, new Insets(1), 50, false), 1e-100); 924 assertEquals(102, pane.computeChildMinAreaWidth(c2, new Insets(1)), 1e-100); 925 assertEquals(2 + Math.ceil(100*100/48.0), pane.computeChildMinAreaWidth(c2, -1, new Insets(1), 50, false), 1e-100); // vertically biased, effective height is 49 926 assertEquals(2 + Math.ceil(100*100/38.0), pane.computeChildMinAreaWidth(c2, 10, new Insets(1), 50, false), 1e-100); // vertically biased, effective height is 49 927 assertEquals(12, pane.computeChildMinAreaWidth(c3, new Insets(1)), 1e-100); 928 assertEquals(12, pane.computeChildMinAreaWidth(c3, 0, new Insets(1), 50, false), 1e-100); 929 930 } 931 932 @Test public void testChildMinAreaHeight() { 933 Pane pane = new Pane(); 934 935 Region c1 = new MockBiased(Orientation.HORIZONTAL, 100, 100); 936 Region c2 = new MockBiased(Orientation.VERTICAL, 100, 100); 937 Region c3 = new MockRegion(10, 10, 100, 100, 1000, 1000); 938 939 pane.getChildren().addAll(c1, c2, c3); 940 941 assertEquals(3, pane.computeChildMinAreaHeight(c1, -1, new Insets(1), -1), 1e-100); /*Insets + minimal for biased is 1 */ 942 assertEquals(2 + Math.ceil(100*100/48.0), pane.computeChildMinAreaHeight(c1, -1, new Insets(1), 50), 1e-100); 943 assertEquals(12 + Math.ceil(100*100/48.0), pane.computeChildMinAreaHeight(c1, 10, new Insets(1), 50), 1e-100); 944 assertEquals(12, pane.computeChildMinAreaHeight(c2, -1, new Insets(1), -1), 1e-100); 945 assertEquals(12, pane.computeChildMinAreaHeight(c2, -1, new Insets(1), 50), 1e-100); 946 assertEquals(12, pane.computeChildMinAreaHeight(c3, -1, new Insets(1), -1), 1e-100); 947 assertEquals(12, pane.computeChildMinAreaHeight(c3, -1, new Insets(1), 50), 1e-100); 948 } 949 950 @Test public void testChildMaxAreaWidth() { 951 Pane pane = new Pane(); 952 953 Region c1 = new MockBiased(Orientation.HORIZONTAL, 100, 100); 954 Region c2 = new MockBiased(Orientation.VERTICAL, 100, 100); 955 Region c3 = new MockRegion(10, 10, 100, 100, 1000, 1000); 956 957 pane.getChildren().addAll(c1, c2, c3); 958 959 assertEquals(10002, pane.computeChildMaxAreaWidth(c1, -1, new Insets(1), -1, false), 1e-100); 960 assertEquals(10002, pane.computeChildMaxAreaWidth(c1, -1, new Insets(1), 50, false), 1e-100); 961 assertEquals(102, pane.computeChildMaxAreaWidth(c2, -1, new Insets(1), -1, false), 1e-100); // Vertival bias is not applied when no height/baseline offset is set 962 assertEquals(2 + Math.ceil(100*100/48.0), pane.computeChildMaxAreaWidth(c2, -1, new Insets(1), 50, false), 1e-100); 963 assertEquals(2 + Math.ceil(100*100/38.0), pane.computeChildMaxAreaWidth(c2, 10, new Insets(1), 50, false), 1e-100); 964 assertEquals(1002, pane.computeChildMaxAreaWidth(c3, -1, new Insets(1), -1, false), 1e-100); 965 assertEquals(1002, pane.computeChildMaxAreaWidth(c3, -1, new Insets(1), 50, false), 1e-100); 966 } 967 968 @Test public void testChildMaxAreaHeight() { 969 Pane pane = new Pane(); 970 971 Region c1 = new MockBiased(Orientation.HORIZONTAL, 100, 100); 972 Region c2 = new MockBiased(Orientation.VERTICAL, 100, 100); 973 Region c3 = new MockRegion(10, 10, 100, 100, 1000, 1000); 974 975 pane.getChildren().addAll(c1, c2, c3); 976 977 assertEquals(1002, pane.computeChildMaxAreaHeight(c1, -1, new Insets(1), -1), 1e-100); 978 assertEquals(2 + Math.ceil(100*100/48.0), pane.computeChildMaxAreaHeight(c1, -1, new Insets(1), 50), 1e-100); 979 assertEquals(12 + Math.ceil(100*100/48.0), pane.computeChildMaxAreaHeight(c1, 10, new Insets(1), 50), 1e-100); 980 assertEquals(10002, pane.computeChildMaxAreaHeight(c2, -1, new Insets(1), -1), 1e-100); 981 assertEquals(10002, pane.computeChildMaxAreaHeight(c2, -1, new Insets(1), 50), 1e-100); 982 assertEquals(1002, pane.computeChildMaxAreaHeight(c3, -1, new Insets(1), -1), 1e-100); 983 assertEquals(1002, pane.computeChildMaxAreaHeight(c3, -1, new Insets(1), 50), 1e-100); 984 } 985 986 /************************************************************************** 987 * * 988 * Test that images which are background loaded, or images which can * 989 * change (such as WritableImage or animated gif) will cause a * 990 * listener to be installed. Also that a non-animating background * 991 * loaded image will have the listener removed when the image * 992 * finishes loading, and that all listeners are removed from images * 993 * which have been removed from the Region. Also that any animating * 994 * or background loaded image will cause a repaint to happen when the * 995 * underlying platform image changes. * 996 * * 997 *************************************************************************/ 998 999 @Test public void testBackgroundLoadedBackgroundImageHasListenerInstalled() { 1000 final ImageForTesting image = new ImageForTesting("http://something.png", true); 1001 assertTrue(image.getProgress() < 1); 1002 1003 ImageRegion r = new ImageRegion(); 1004 final Background background = new Background(new BackgroundImage(image, null, null, null, null)); 1005 r.setBackground(background); 1006 1007 assertTrue(r.listenerAdded.get()); 1008 } 1009 1010 @Test public void testBackgroundLoadedBackgroundImageStillLoadingButRemovedFromRegionHasListenerRemoved() { 1011 final ImageForTesting image = new ImageForTesting("http://something.png", true); 1012 assertTrue(image.getProgress() < 1); 1013 1014 ImageRegion r = new ImageRegion(); 1015 final Background background = new Background(new BackgroundImage(image, null, null, null, null)); 1016 r.setBackground(background); 1017 r.setBackground(null); 1018 1019 assertFalse(r.listenerAdded.get()); 1020 } 1021 1022 @Test public void testBackgroundLoadedBackgroundImageWhichFinishesLoadingHasListenerRemoved() { 1023 final ImageForTesting image = new ImageForTesting("http://something.png", true); 1024 assertTrue(image.getProgress() < 1); 1025 1026 ImageRegion r = new ImageRegion(); 1027 final Background background = new Background(new BackgroundImage(image, null, null, null, null)); 1028 r.setBackground(background); 1029 image.updateProgress(1); 1030 image.updateVisuals(); 1031 1032 assertFalse(r.listenerAdded.get()); 1033 } 1034 1035 @Test public void testBackgroundLoadedBackgroundImageWhichFinishesLoadingCausesRepaint() { 1036 final ImageForTesting image = new ImageForTesting("http://something.png", true); 1037 assertTrue(image.getProgress() < 1); 1038 1039 ImageRegion r = new ImageRegion(); 1040 final Background background = new Background(new BackgroundImage(image, null, null, null, null)); 1041 r.setBackground(background); 1042 r.clearDirty(); 1043 assertFalse(r.willBeRepainted()); 1044 image.updateProgress(1); 1045 image.updateVisuals(); 1046 1047 assertTrue(r.willBeRepainted()); 1048 } 1049 1050 @Test public void testBackgroundLoadedBorderImageHasListenerInstalled() { 1051 final ImageForTesting image = new ImageForTesting("http://something.png", true); 1052 assertTrue(image.getProgress() < 1); 1053 1054 ImageRegion r = new ImageRegion(); 1055 final Border border = new Border(new BorderImage(image, null, null, null, false, null, null)); 1056 r.setBorder(border); 1057 1058 assertTrue(r.listenerAdded.get()); 1059 } 1060 1061 @Test public void testBackgroundLoadedBorderImageStillLoadingButRemovedFromRegionHasListenerRemoved() { 1062 final ImageForTesting image = new ImageForTesting("http://something.png", true); 1063 assertTrue(image.getProgress() < 1); 1064 1065 ImageRegion r = new ImageRegion(); 1066 final Border border = new Border(new BorderImage(image, null, null, null, false, null, null)); 1067 r.setBorder(border); 1068 r.setBorder(null); 1069 1070 assertFalse(r.listenerAdded.get()); 1071 } 1072 1073 @Test public void testBackgroundLoadedBorderImageWhichFinishesLoadingHasListenerRemoved() { 1074 final ImageForTesting image = new ImageForTesting("http://something.png", true); 1075 assertTrue(image.getProgress() < 1); 1076 1077 ImageRegion r = new ImageRegion(); 1078 final Border border = new Border(new BorderImage(image, null, null, null, false, null, null)); 1079 r.setBorder(border); 1080 image.updateProgress(1); 1081 image.updateVisuals(); 1082 1083 assertFalse(r.listenerAdded.get()); 1084 } 1085 1086 @Test public void testBackgroundLoadedBorderImageWhichFinishesLoadingCausesRepaint() { 1087 final ImageForTesting image = new ImageForTesting("http://something.png", true); 1088 assertTrue(image.getProgress() < 1); 1089 1090 ImageRegion r = new ImageRegion(); 1091 final Border border = new Border(new BorderImage(image, null, null, null, false, null, null)); 1092 r.setBorder(border); 1093 r.clearDirty(); 1094 assertFalse(r.willBeRepainted()); 1095 image.updateProgress(1); 1096 image.updateVisuals(); 1097 1098 assertTrue(r.willBeRepainted()); 1099 } 1100 1101 @Test public void testAnimatedBackgroundImageHasListenerInstalled() { 1102 final WritableImage image = new WritableImage(10, 10); 1103 ImageRegion r = new ImageRegion(); 1104 final Background background = new Background(new BackgroundImage(image, null, null, null, null)); 1105 r.setBackground(background); 1106 assertTrue(r.listenerAdded.get()); 1107 } 1108 1109 @Test public void testAnimatedBackgroundImageRemovedFromRegionHasListenerRemoved() { 1110 final WritableImage image = new WritableImage(10, 10); 1111 ImageRegion r = new ImageRegion(); 1112 final Background background = new Background(new BackgroundImage(image, null, null, null, null)); 1113 r.setBackground(background); 1114 r.setBackground(null); 1115 assertFalse(r.listenerAdded.get()); 1116 } 1117 1118 @Test public void testAnimatedBackgroundImageCausesRepaintWhenAnimationChanges() { 1119 final WritableImage image = new WritableImage(10, 10); 1120 ImageRegion r = new ImageRegion(); 1121 final Background background = new Background(new BackgroundImage(image, null, null, null, null)); 1122 r.setBackground(background); 1123 r.clearDirty(); 1124 assertFalse(r.willBeRepainted()); 1125 image.getPixelWriter().setArgb(0, 0, 100); 1126 assertTrue(r.willBeRepainted()); 1127 } 1128 1129 @Test public void testAnimatedBorderImageHasListenerInstalled() { 1130 final WritableImage image = new WritableImage(10, 10); 1131 ImageRegion r = new ImageRegion(); 1132 final Border border = new Border(new BorderImage(image, null, null, null, false, null, null)); 1133 r.setBorder(border); 1134 assertTrue(r.listenerAdded.get()); 1135 } 1136 1137 @Test public void testAnimatedBorderImageRemovedFromRegionHasListenerRemoved() { 1138 final WritableImage image = new WritableImage(10, 10); 1139 ImageRegion r = new ImageRegion(); 1140 final Border border = new Border(new BorderImage(image, null, null, null, false, null, null)); 1141 r.setBorder(border); 1142 r.setBorder(null); 1143 assertFalse(r.listenerAdded.get()); 1144 } 1145 1146 @Test public void testAnimatedBorderImageCausesRepaintWhenAnimationChanges() { 1147 final WritableImage image = new WritableImage(10, 10); 1148 ImageRegion r = new ImageRegion(); 1149 final Border border = new Border(new BorderImage(image, null, null, null, false, null, null)); 1150 r.setBorder(border); 1151 r.clearDirty(); 1152 assertFalse(r.willBeRepainted()); 1153 image.getPixelWriter().setArgb(0, 0, 100); 1154 assertTrue(r.willBeRepainted()); 1155 } 1156 1157 @Test public void testBorderChangeUpdatesTheInsets() { 1158 Region r = new Region(); 1159 1160 r.setBorder(new Border(new BorderStroke(Color.BLACK, BorderStrokeStyle.SOLID, null, BorderWidths.DEFAULT, new Insets(10)))); 1161 assertEquals(new Insets(11), r.getInsets()); 1162 1163 r.setBorder(new Border(new BorderStroke(Color.BLACK, BorderStrokeStyle.SOLID, null, null, new Insets(20)))); 1164 1165 assertEquals(new Insets(21), r.getInsets()); 1166 } 1167 1168 static final class ImageRegion extends Region { 1169 AtomicBoolean listenerAdded = new AtomicBoolean(false); 1170 1171 @Override void addImageListener(Image image) { 1172 super.addImageListener(image); 1173 listenerAdded.set(true); 1174 } 1175 1176 @Override void removeImageListener(Image image) { 1177 super.removeImageListener(image); 1178 listenerAdded.set(false); 1179 } 1180 1181 public boolean willBeRepainted() { 1182 return impl_isDirty(DirtyBits.NODE_CONTENTS); 1183 } 1184 1185 public void clearDirty() { 1186 super.impl_clearDirty(DirtyBits.NODE_CONTENTS); 1187 } 1188 }; 1189 1190 // Test for RT-13820 1191 @Test public void changingShapeElementsShouldResultInRender() { 1192 Region r = new Region(); 1193 r.setPrefWidth(640); 1194 r.setPrefHeight(480); 1195 LineTo lineTo; 1196 Path p = new Path( 1197 new MoveTo(0, 0), 1198 lineTo = new LineTo(100, 0), 1199 new LineTo(50, 100), 1200 new ClosePath() 1201 ); 1202 r.setBackground(new Background(new BackgroundFill(Color.BLUE, null, null))); 1203 r.setCenterShape(true); 1204 r.setScaleShape(true); 1205 r.setShape(p); 1206 r.impl_syncPeer(); 1207 1208 NGRegion peer = r.impl_getPeer(); 1209 assertFalse(peer.isClean()); 1210 peer.clearDirtyTree(); 1211 assertTrue(peer.isClean()); 1212 1213 lineTo.setX(200); 1214 p.impl_syncPeer(); 1215 r.impl_syncPeer(); 1216 assertFalse(peer.isClean()); 1217 } 1218 }