1 /* 2 * Copyright (c) 2009, 2013, 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 com.sun.scenario.effect.impl.prism; 27 28 import java.util.Map; 29 import java.util.WeakHashMap; 30 import com.sun.glass.ui.Screen; 31 import com.sun.scenario.effect.FilterContext; 32 33 public class PrFilterContext extends FilterContext { 34 35 private static Screen defaultScreen; 36 private static final Map<Screen, PrFilterContext> ctxMap = 37 new WeakHashMap<Screen, PrFilterContext>(); 38 39 private static PrFilterContext printerFilterContext = null; 40 public static PrFilterContext getPrinterContext(Object resourceFactory) { 41 if (printerFilterContext == null) { 42 // Parameter is returned by FilterContext.getReferent() 43 printerFilterContext = new PrFilterContext(resourceFactory); 44 } 45 return printerFilterContext; 46 } 47 48 private PrFilterContext swinstance; 49 private boolean forceSW; 50 51 private PrFilterContext(Object screen) { 52 super(screen); 53 } 54 55 public static PrFilterContext getInstance(Screen screen) { 56 if (screen == null) { 57 throw new IllegalArgumentException("Screen must be non-null"); 58 } 59 PrFilterContext fctx = ctxMap.get(screen); 60 if (fctx == null) { 61 fctx = new PrFilterContext(screen); 62 ctxMap.put(screen, fctx); 63 } 64 return fctx; 65 } 66 67 public static PrFilterContext getDefaultInstance() { 68 if (defaultScreen == null) { 69 // NOTE: filter context may need to sign up for screen set config 70 // changes 71 defaultScreen = Screen.getMainScreen(); 72 } 73 return getInstance(defaultScreen); 74 } 75 76 // Calledonly from PPSRenderer while making a PPStoPSWDispMapPeer, 77 // assumes original is hw instance. 78 public PrFilterContext getSoftwareInstance() { 79 if (swinstance == null) { 80 if (forceSW) { 81 swinstance = this; 82 } else { 83 swinstance = new PrFilterContext(getReferent()); 84 swinstance.forceSW = true; 85 } 86 } 87 return swinstance; 88 } 89 90 public boolean isForceSoftware() { 91 return forceSW; 92 } 93 94 @Override 95 public int hashCode() { 96 return getReferent().hashCode() ^ Boolean.hashCode(forceSW); 97 } 98 99 @Override 100 public boolean equals(Object o) { 101 if (!(o instanceof PrFilterContext)) { 102 return false; 103 } 104 PrFilterContext pfctx = (PrFilterContext) o; 105 return (this.getReferent().equals(pfctx.getReferent()) && 106 this.forceSW == pfctx.forceSW); 107 } 108 }