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