History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/sun/swing/ImageCache.java (1 of 18352 files). Show all

Unified · Split

java/pkg/sun/swing/ImageCache.java+165−0
@@ -0,0 +1,165 @@
1/*
2 * Copyright (c) 2006, 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 */
25package sun.swing;
26
27import java.awt.GraphicsConfiguration;
28import java.awt.Image;
29import java.lang.ref.SoftReference;
30import java.util.Iterator;
31import java.util.LinkedList;
32
33/**
34 * Cache is used to cache an image based on a set of arguments.
35 */
36public class ImageCache {
37 // Maximum number of entries to cache
38 private int maxCount;
39 // The entries.
40 final private LinkedList<SoftReference<Entry>> entries;
41
42 public ImageCache(int maxCount) {
43 this.maxCount = maxCount;
44 entries = new LinkedList<SoftReference<Entry>>();
45 }
46
47 void setMaxCount(int maxCount) {
48 this.maxCount = maxCount;
49 }
50
51 public void flush() {
52 entries.clear();
53 }
54
55 private Entry getEntry(Object key, GraphicsConfiguration config,
56 int w, int h, Object[] args) {
57 Entry entry;
58 Iterator<SoftReference<Entry>> iter = entries.listIterator();
59 while (iter.hasNext()) {
60 SoftReference<Entry> ref = iter.next();
61 entry = ref.get();
62 if (entry == null) {
63 // SoftReference was invalidated, remove the entry
64 iter.remove();
65 }
66 else if (entry.equals(config, w, h, args)) {
67 // Put most recently used entries at the head
68 iter.remove();
69 entries.addFirst(ref);
70 return entry;
71 }
72 }
73 // Entry doesn't exist
74 entry = new Entry(config, w, h, args);
75 if (entries.size() >= maxCount) {
76 entries.removeLast();
77 }
78 entries.addFirst(new SoftReference<Entry>(entry));
79 return entry;
80 }
81
82 /**
83 * Returns the cached Image, or null, for the specified arguments.
84 */
85 public Image getImage(Object key, GraphicsConfiguration config,
86 int w, int h, Object[] args) {
87 Entry entry = getEntry(key, config, w, h, args);
88 return entry.getImage();
89 }
90
91 /**
92 * Sets the cached image for the specified constraints.
93 */
94 public void setImage(Object key, GraphicsConfiguration config,
95 int w, int h, Object[] args, Image image) {
96 Entry entry = getEntry(key, config, w, h, args);
97 entry.setImage(image);
98 }
99
100
101 /**
102 * Caches set of arguments and Image.
103 */
104 private static class Entry {
105 final private GraphicsConfiguration config;
106 final private int w;
107 final private int h;
108 final private Object[] args;
109 private Image image;
110
111 Entry(GraphicsConfiguration config, int w, int h, Object[] args) {
112 this.config = config;
113 this.args = args;
114 this.w = w;
115 this.h = h;
116 }
117
118 public void setImage(Image image) {
119 this.image = image;
120 }
121
122 public Image getImage() {
123 return image;
124 }
125
126 public String toString() {
127 String value = super.toString() +
128 "[ graphicsConfig=" + config +
129 ", image=" + image +
130 ", w=" + w + ", h=" + h;
131 if (args != null) {
132 for (int counter = 0; counter < args.length; counter++) {
133 value += ", " + args[counter];
134 }
135 }
136 value += "]";
137 return value;
138 }
139
140 public boolean equals(GraphicsConfiguration config,
141 int w, int h, Object[] args) {
142 if (this.w == w && this.h == h &&
143 ((this.config != null && this.config.equals(config)) ||
144 (this.config == null && config == null))) {
145 if (this.args == null && args == null) {
146 return true;
147 }
148 if (this.args != null && args != null &&
149 this.args.length == args.length) {
150 for (int counter = args.length - 1; counter >= 0;
151 counter--) {
152 Object a1 = this.args[counter];
153 Object a2 = args[counter];
154 if ((a1 == null && a2 != null) ||
155 (a1 != null && !a1.equals(a2))) {
156 return false;
157 }
158 }
159 return true;
160 }
161 }
162 return false;
163 }
164 }
165}