1 /*
   2  * Copyright (c) 2009, 2012, 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  */
  24 package test.scenegraph.lcd.transparency;
  25 
  26 
  27 import javafx.scene.Node;
  28 import javafx.scene.layout.StackPane;
  29 import javafx.scene.paint.Color;
  30 import javafx.scene.shape.Rectangle;
  31 import javafx.scene.text.FontSmoothingType;
  32 import javafx.scene.text.Text;
  33 
  34 /**
  35  *
  36  * @author Alexander Petrov
  37  */
  38 public enum Factories implements Factory {
  39 
  40 
  41     TransparentPixel(new EmptyActionFactory() {
  42 
  43         public Node createNode(boolean lcd) {
  44             StackPane value = new StackPane();
  45             Text t = new Text("Test");
  46             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
  47             Rectangle r = new Rectangle(1, 1);
  48             r.setOpacity(0);
  49             r.setFill(Color.BLACK);
  50             value.getChildren().addAll(t, r);
  51             return value;
  52         }
  53 
  54         public boolean isLCDWork() {
  55             return true;
  56         }
  57     }),
  58     TransparentBackground(new EmptyActionFactory() {
  59 
  60         public Node createNode(boolean lcd) {
  61             StackPane value = new StackPane();
  62             Text t = new Text("Test");
  63             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
  64             Rectangle r = new Rectangle(100, 100);
  65             r.setOpacity(0);
  66             r.setFill(Color.BLACK);
  67             value.getChildren().addAll(t, r);
  68             return value;
  69         }
  70 
  71         public boolean isLCDWork() {
  72             return true;
  73         }
  74     }),
  75     TranslucentPixel(new EmptyActionFactory() {
  76 
  77         public Node createNode(boolean lcd) {
  78             StackPane value = new StackPane();
  79             Text t = new Text("Test");
  80             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
  81             Rectangle r = new Rectangle(1, 1);
  82             r.setOpacity(0.5);
  83             r.setFill(Color.BLACK);
  84             value.getChildren().addAll(t, r);
  85             return value;
  86         }
  87 
  88         public boolean isLCDWork() {
  89             return true;
  90         }
  91     }),
  92     Translucent01Pixel(new EmptyActionFactory() {
  93 
  94         public Node createNode(boolean lcd) {
  95             StackPane value = new StackPane();
  96             Text t = new Text("Test");
  97             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
  98             Rectangle r = new Rectangle(1, 1);
  99             r.setOpacity(0.000001d);
 100             r.setFill(Color.BLACK);
 101             value.getChildren().addAll(t, r);
 102             return value;
 103         }
 104 
 105         public boolean isLCDWork() {
 106             return true;
 107         }
 108     }),
 109     Translucent09Pixel(new EmptyActionFactory() {
 110 
 111         public Node createNode(boolean lcd) {
 112             StackPane value = new StackPane();
 113             Text t = new Text("Test");
 114             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 115             Rectangle r = new Rectangle(1, 1);
 116             r.setOpacity(0.9999999d);
 117             r.setFill(Color.BLACK);
 118             value.getChildren().addAll(t, r);
 119             return value;
 120         }
 121 
 122         public boolean isLCDWork() {
 123             return true;
 124         }
 125     }),
 126     TransparentRectangle(new EmptyActionFactory() {
 127 
 128         public Node createNode(boolean lcd) {
 129             StackPane value = new StackPane();
 130             Text t = new Text("Test");
 131             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 132             Rectangle r = new Rectangle(100, 100);
 133             r.setOpacity(0);
 134             r.setFill(Color.BLACK);
 135             value.getChildren().addAll(t, r);
 136             return value;
 137         }
 138 
 139         public boolean isLCDWork() {
 140             return true;
 141         }
 142     }),
 143     TranslucentRectangle(new EmptyActionFactory() {
 144 
 145         public Node createNode(boolean lcd) {
 146             StackPane value = new StackPane();
 147             Text t = new Text("Test");
 148             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 149             Rectangle r = new Rectangle(100, 100);
 150             r.setOpacity(0.5);
 151             r.setFill(Color.BLACK);
 152             value.getChildren().addAll(t, r);
 153             return value;
 154         }
 155 
 156         public boolean isLCDWork() {
 157             return true;
 158         }
 159     }),
 160     Translucent01Rectangle(new EmptyActionFactory() {
 161 
 162         public Node createNode(boolean lcd) {
 163             StackPane value = new StackPane();
 164             Text t = new Text("Test");
 165             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 166             Rectangle r = new Rectangle(100, 100);
 167             r.setOpacity(0.000001d);
 168             r.setFill(Color.BLACK);
 169             value.getChildren().addAll(t, r);
 170             return value;
 171         }
 172 
 173         public boolean isLCDWork() {
 174             return true;
 175         }
 176     }),
 177     Translucent09Rectangle(new EmptyActionFactory() {
 178 
 179         public Node createNode(boolean lcd) {
 180             StackPane value = new StackPane();
 181             Text t = new Text("Test");
 182             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 183             Rectangle r = new Rectangle(100, 100);
 184             r.setOpacity(0.9999999d);
 185             r.setFill(Color.BLACK);
 186             value.getChildren().addAll(t, r);
 187             return value;
 188         }
 189 
 190         public boolean isLCDWork() {
 191             return false;
 192         }
 193     }),
 194     TranslucentPixelBeforeText(new EmptyActionFactory() {
 195 
 196         public Node createNode(boolean lcd) {
 197             StackPane value = new StackPane();
 198             Text t = new Text("Test");
 199             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 200             Rectangle r = new Rectangle(1, 1);
 201             r.setOpacity(0.5);
 202             r.setFill(Color.BLACK);
 203             value.getChildren().addAll(r, t);
 204             return value;
 205         }
 206 
 207         public boolean isLCDWork() {
 208             return true;
 209         }
 210     }),
 211     Translucent01PixelBeforeText(new EmptyActionFactory() {
 212 
 213         public Node createNode(boolean lcd) {
 214             StackPane value = new StackPane();
 215             Text t = new Text("Test");
 216             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 217             Rectangle r = new Rectangle(1, 1);
 218             r.setOpacity(0.000001d);
 219             r.setFill(Color.BLACK);
 220             value.getChildren().addAll(r, t);
 221             return value;
 222         }
 223 
 224         public boolean isLCDWork() {
 225             return true;
 226         }
 227     }),
 228     Translucent09PixelBeforeText(new EmptyActionFactory() {
 229 
 230         public Node createNode(boolean lcd) {
 231             StackPane value = new StackPane();
 232             Text t = new Text("Test");
 233             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 234             Rectangle r = new Rectangle(1, 1);
 235             r.setOpacity(0.9999999d);
 236             r.setFill(Color.BLACK);
 237             value.getChildren().addAll(r, t);
 238             return value;
 239         }
 240 
 241         public boolean isLCDWork() {
 242             return true;
 243         }
 244     }),
 245     TransparentRectangleBeforeText(new EmptyActionFactory() {
 246 
 247         public Node createNode(boolean lcd) {
 248             StackPane value = new StackPane();
 249             Text t = new Text("Test");
 250             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 251             Rectangle r = new Rectangle(100, 100);
 252             r.setOpacity(0);
 253             r.setFill(Color.BLACK);
 254             value.getChildren().addAll(r, t);
 255             return value;
 256         }
 257 
 258         public boolean isLCDWork() {
 259             return true;
 260         }
 261     }),
 262     TranslucentRectangleBeforeText(new EmptyActionFactory() {
 263 
 264         public Node createNode(boolean lcd) {
 265             StackPane value = new StackPane();
 266             Text t = new Text("Test");
 267             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 268             Rectangle r = new Rectangle(100, 100);
 269             r.setOpacity(0.5);
 270             r.setFill(Color.BLACK);
 271             value.getChildren().addAll(r, t);
 272             return value;
 273         }
 274 
 275         public boolean isLCDWork() {
 276             return true;
 277         }
 278     }),
 279     Translucent01RectangleBeforeText(new EmptyActionFactory() {
 280 
 281         public Node createNode(boolean lcd) {
 282             StackPane value = new StackPane();
 283             Text t = new Text("Test");
 284             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 285             Rectangle r = new Rectangle(100, 100);
 286             r.setOpacity(0.000001d);
 287             r.setFill(Color.BLACK);
 288             value.getChildren().addAll(r, t);
 289             return value;
 290         }
 291 
 292         public boolean isLCDWork() {
 293             return true;
 294         }
 295     }),
 296     Translucent09RectangleBeforeText(new EmptyActionFactory() {
 297 
 298         public Node createNode(boolean lcd) {
 299             StackPane value = new StackPane();
 300             Text t = new Text("Test");
 301             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 302             Rectangle r = new Rectangle(100, 100);
 303             r.setOpacity(0.9999999d);
 304             r.setFill(Color.BLACK);
 305             value.getChildren().addAll(r, t);
 306             return value;
 307         }
 308 
 309         public boolean isLCDWork() {
 310             return false;
 311         }
 312     }),
 313     TranslucentBackground(new EmptyActionFactory() {
 314 
 315         public Node createNode(boolean lcd) {
 316             StackPane value = new StackPane();
 317             Text t = new Text("Test");
 318             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 319             Rectangle r = new Rectangle(100, 100);
 320             r.setOpacity(0.5);
 321             r.setFill(Color.BLACK);
 322             value.getChildren().addAll(t, r);
 323             return value;
 324         }
 325 
 326         public boolean isLCDWork() {
 327             return true;
 328         }
 329     }),
 330     TranslucentPane(new EmptyActionFactory() {
 331 
 332         public Node createNode(boolean lcd) {
 333             Text t = new Text("Test");
 334             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 335             StackPane temp = new StackPane(t);
 336             temp.setOpacity(0.5);
 337             return temp;
 338         }
 339 
 340         public boolean isLCDWork() {
 341             return false;
 342         }
 343     }),
 344     AddTranslucentPixel(new Factory() {
 345 
 346         public Node createNode(boolean lcd) {
 347             StackPane value = new StackPane();
 348             Text t = new Text("Test");
 349             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 350             value.getChildren().addAll(t);
 351             return value;
 352         }
 353 
 354         public boolean isLCDWork() {
 355             return true;
 356         }
 357 
 358         public void action(Node node) {
 359             StackPane pane = (StackPane) node;
 360             Rectangle r = new Rectangle(1, 1);
 361             r.setOpacity(0.5);
 362             r.setFill(Color.BLACK);
 363             pane.getChildren().add(r);
 364 
 365         }
 366     }),
 367     AddTranslucent01Pixel(new Factory() {
 368 
 369         public Node createNode(boolean lcd) {
 370             StackPane value = new StackPane();
 371             Text t = new Text("Test");
 372             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 373             value.getChildren().addAll(t);
 374             return value;
 375         }
 376 
 377         public boolean isLCDWork() {
 378             return true;
 379         }
 380 
 381         public void action(Node node) {
 382             StackPane pane = (StackPane) node;
 383             Rectangle r = new Rectangle(1, 1);
 384             r.setOpacity(0.000001d);
 385             r.setFill(Color.BLACK);
 386             pane.getChildren().add(r);
 387         }
 388     }),
 389     AddTranslucent09Pixel(new Factory() {
 390 
 391         public Node createNode(boolean lcd) {
 392             StackPane value = new StackPane();
 393             Text t = new Text("Test");
 394             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 395             value.getChildren().addAll(t);
 396             return value;
 397         }
 398 
 399         public boolean isLCDWork() {
 400             return true;
 401         }
 402 
 403         public void action(Node node) {
 404             StackPane pane = (StackPane) node;
 405             Rectangle r = new Rectangle(1, 1);
 406             r.setOpacity(0.9999999d);
 407             r.setFill(Color.BLACK);
 408             pane.getChildren().add(r);
 409         }
 410     }),
 411     AddTransparentRectangle(new Factory() {
 412 
 413         public Node createNode(boolean lcd) {
 414             StackPane value = new StackPane();
 415             Text t = new Text("Test");
 416             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 417             value.getChildren().addAll(t);
 418             return value;
 419         }
 420 
 421         public boolean isLCDWork() {
 422             return true;
 423         }
 424 
 425         public void action(Node node) {
 426             StackPane pane = (StackPane) node;
 427             Rectangle r = new Rectangle(100, 100);
 428             r.setOpacity(0);
 429             r.setFill(Color.BLACK);
 430             pane.getChildren().add(r);
 431         }
 432     }),
 433     AddTranslucentRectangle(new Factory() {
 434 
 435         public Node createNode(boolean lcd) {
 436             StackPane value = new StackPane();
 437             Text t = new Text("Test");
 438             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 439             value.getChildren().addAll(t);
 440             return value;
 441         }
 442 
 443         public boolean isLCDWork() {
 444             return true;
 445         }
 446 
 447         public void action(Node node) {
 448             StackPane pane = (StackPane) node;
 449             Rectangle r = new Rectangle(100, 100);
 450             r.setOpacity(0.5);
 451             r.setFill(Color.BLACK);
 452             pane.getChildren().add(r);
 453         }
 454     }),
 455     AddTranslucent01Rectangle(new Factory() {
 456 
 457         public Node createNode(boolean lcd) {
 458             StackPane value = new StackPane();
 459             Text t = new Text("Test");
 460             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 461             value.getChildren().addAll(t);
 462             return value;
 463         }
 464 
 465         public boolean isLCDWork() {
 466             return true;
 467         }
 468 
 469         public void action(Node node) {
 470             StackPane pane = (StackPane) node;
 471             Rectangle r = new Rectangle(100, 100);
 472             r.setOpacity(0.000001d);
 473             r.setFill(Color.BLACK);
 474             pane.getChildren().add(r);
 475         }
 476     }),
 477     AddTranslucent09Rectangle(new Factory() {
 478 
 479         public Node createNode(boolean lcd) {
 480             StackPane value = new StackPane();
 481             Text t = new Text("Test");
 482             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 483             value.getChildren().addAll(t);
 484             return value;
 485         }
 486 
 487         boolean value = true;
 488 
 489         public boolean isLCDWork() {
 490             return value;
 491         }
 492 
 493         public void action(Node node) {
 494             StackPane pane = (StackPane) node;
 495             Rectangle r = new Rectangle(100, 100);
 496             r.setOpacity(0.9999999d);
 497             r.setFill(Color.BLACK);
 498             pane.getChildren().add(r);
 499             value = false;
 500         }
 501     }),
 502     AddTranslucentPixelBeforeText(new Factory() {
 503 
 504         public Node createNode(boolean lcd) {
 505             StackPane value = new StackPane();
 506             Text t = new Text("Test");
 507             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 508             value.getChildren().addAll(t);
 509             return value;
 510         }
 511 
 512         public boolean isLCDWork() {
 513             return true;
 514         }
 515 
 516         public void action(Node node) {
 517             StackPane pane = (StackPane) node;
 518             Rectangle r = new Rectangle(1, 1);
 519             r.setOpacity(0.5);
 520             r.setFill(Color.BLACK);
 521             pane.getChildren().add(0, r);
 522 
 523         }
 524     }),
 525     AddTranslucent01PixelBeforeText(new Factory() {
 526 
 527         public Node createNode(boolean lcd) {
 528             StackPane value = new StackPane();
 529             Text t = new Text("Test");
 530             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 531             value.getChildren().addAll(t);
 532             return value;
 533         }
 534 
 535         public boolean isLCDWork() {
 536             return true;
 537         }
 538 
 539         public void action(Node node) {
 540             StackPane pane = (StackPane) node;
 541             Rectangle r = new Rectangle(1, 1);
 542             r.setOpacity(0.000001d);
 543             r.setFill(Color.BLACK);
 544             pane.getChildren().add(0, r);
 545         }
 546     }),
 547     AddTranslucent09PixelBeforeText(new Factory() {
 548 
 549         public Node createNode(boolean lcd) {
 550             StackPane value = new StackPane();
 551             Text t = new Text("Test");
 552             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 553             value.getChildren().addAll(t);
 554             return value;
 555         }
 556 
 557         public boolean isLCDWork() {
 558             return true;
 559         }
 560 
 561         public void action(Node node) {
 562             StackPane pane = (StackPane) node;
 563             Rectangle r = new Rectangle(1, 1);
 564             r.setOpacity(0.9999999d);
 565             r.setFill(Color.BLACK);
 566             pane.getChildren().add(0, r);
 567         }
 568     }),
 569     AddTransparentRectangleBeforeText(new Factory() {
 570 
 571         public Node createNode(boolean lcd) {
 572             StackPane value = new StackPane();
 573             Text t = new Text("Test");
 574             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 575             value.getChildren().addAll(t);
 576             return value;
 577         }
 578 
 579         public boolean isLCDWork() {
 580             return true;
 581         }
 582 
 583         public void action(Node node) {
 584             StackPane pane = (StackPane) node;
 585             Rectangle r = new Rectangle(100, 100);
 586             r.setOpacity(0);
 587             r.setFill(Color.BLACK);
 588             pane.getChildren().add(0, r);
 589         }
 590     }),
 591     AddTranslucentRectangleBeforeText(new Factory() {
 592 
 593         public Node createNode(boolean lcd) {
 594             StackPane value = new StackPane();
 595             Text t = new Text("Test");
 596             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 597             value.getChildren().addAll(t);
 598             return value;
 599         }
 600 
 601         public boolean isLCDWork() {
 602             return true;
 603         }
 604 
 605         public void action(Node node) {
 606             StackPane pane = (StackPane) node;
 607             Rectangle r = new Rectangle(100, 100);
 608             r.setOpacity(0.5);
 609             r.setFill(Color.BLACK);
 610             pane.getChildren().add(0, r);
 611         }
 612     }),
 613     AddTranslucent01RectangleBeforeText(new Factory() {
 614 
 615         public Node createNode(boolean lcd) {
 616             StackPane value = new StackPane();
 617             Text t = new Text("Test");
 618             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 619             value.getChildren().addAll(t);
 620             return value;
 621         }
 622 
 623         public boolean isLCDWork() {
 624             return true;
 625         }
 626 
 627         public void action(Node node) {
 628             StackPane pane = (StackPane) node;
 629             Rectangle r = new Rectangle(100, 100);
 630             r.setOpacity(0.000001d);
 631             r.setFill(Color.BLACK);
 632             pane.getChildren().add(0, r);
 633         }
 634     }),
 635     AddTranslucent09RectangleBeforeText(new Factory() {
 636 
 637         public Node createNode(boolean lcd) {
 638             StackPane value = new StackPane();
 639             Text t = new Text("Test");
 640             t.setFontSmoothingType(lcd?FontSmoothingType.LCD:FontSmoothingType.GRAY);
 641             value.getChildren().addAll(t);
 642             return value;
 643         }
 644 
 645         boolean value = true;
 646 
 647         public boolean isLCDWork() {
 648             return value;
 649         }
 650 
 651         public void action(Node node) {
 652             StackPane pane = (StackPane) node;
 653             Rectangle r = new Rectangle(100, 100);
 654             r.setOpacity(0.9999999d);
 655             r.setFill(Color.BLACK);
 656             pane.getChildren().add(r);
 657             value = false;
 658         }
 659     });
 660 
 661 
 662     private Factory factory;
 663 
 664     private Factories(Factory factory){
 665         this.factory = factory;
 666     }
 667 
 668     public Node createNode(boolean lcd) {
 669         return this.factory.createNode(lcd);
 670     }
 671 
 672     public boolean isLCDWork() {
 673         return this.factory.isLCDWork();
 674     }
 675 
 676     public void action(Node node){
 677         this.factory.action(node);
 678     }
 679 
 680 }