diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:31:44 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:31:44 -0800 |
commit | edbf3b6af777b721cd2a1ef461947e51e88241e1 (patch) | |
tree | f09427b843b192cccf8c3b5328cb81dddf6489fa /awt/org/apache/harmony/awt/ContextStorage.java | |
parent | d5193d9394c5e58176d7bcdf50ef017f8a3b9e1e (diff) | |
download | frameworks_native-edbf3b6af777b721cd2a1ef461947e51e88241e1.zip frameworks_native-edbf3b6af777b721cd2a1ef461947e51e88241e1.tar.gz frameworks_native-edbf3b6af777b721cd2a1ef461947e51e88241e1.tar.bz2 |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'awt/org/apache/harmony/awt/ContextStorage.java')
-rw-r--r-- | awt/org/apache/harmony/awt/ContextStorage.java | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/awt/org/apache/harmony/awt/ContextStorage.java b/awt/org/apache/harmony/awt/ContextStorage.java new file mode 100644 index 0000000..d44648a --- /dev/null +++ b/awt/org/apache/harmony/awt/ContextStorage.java @@ -0,0 +1,154 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @author Pavel Dolgov + * @version $Revision$ + */ +package org.apache.harmony.awt; + +import java.awt.*; + +//???AWT +//import org.apache.harmony.awt.datatransfer.*; +import org.apache.harmony.awt.internal.nls.Messages; +import org.apache.harmony.awt.wtk.*; + + +public final class ContextStorage { + + private static volatile boolean multiContextMode = false; + private volatile boolean shutdownPending = false; + + private static final ContextStorage globalContext = new ContextStorage(); + + private Toolkit toolkit; + private ComponentInternals componentInternals; + //???AWT: private DTK dtk; + private WTK wtk; + private GraphicsEnvironment graphicsEnvironment; + + private class ContextLock {} + private final Object contextLock = new ContextLock(); + private final Synchronizer synchronizer = new Synchronizer(); + + public static void activateMultiContextMode() { + // TODO: checkPermission + multiContextMode = true; + } + + public static void setDefaultToolkit(Toolkit newToolkit) { + // TODO: checkPermission + getCurrentContext().toolkit = newToolkit; + } + + public static Toolkit getDefaultToolkit() { + return getCurrentContext().toolkit; + } + + //???AWT + /* + public static void setDTK(DTK dtk) { + // TODO: checkPermission + getCurrentContext().dtk = dtk; + } + + public static DTK getDTK() { + return getCurrentContext().dtk; + } + */ + + public static Synchronizer getSynchronizer() { + return getCurrentContext().synchronizer; + } + + public static ComponentInternals getComponentInternals() { + return getCurrentContext().componentInternals; + } + + static void setComponentInternals(ComponentInternals internals) { + // TODO: checkPermission + getCurrentContext().componentInternals = internals; + } + + public static Object getContextLock() { + return getCurrentContext().contextLock; + } + + public static WindowFactory getWindowFactory() { + return getCurrentContext().wtk.getWindowFactory(); + } + + public static void setWTK(WTK wtk) { + getCurrentContext().wtk = wtk; + } + + public static NativeIM getNativeIM() { + return getCurrentContext().wtk.getNativeIM(); + } + + public static NativeEventQueue getNativeEventQueue() { + return getCurrentContext().wtk.getNativeEventQueue(); + } + + public static GraphicsEnvironment getGraphicsEnvironment() { + return getCurrentContext().graphicsEnvironment; + } + + public static void setGraphicsEnvironment(GraphicsEnvironment environment) { + getCurrentContext().graphicsEnvironment = environment; + } + + private static ContextStorage getCurrentContext() { + return multiContextMode ? getContextThreadGroup().context : globalContext; + } + + private static ContextThreadGroup getContextThreadGroup() { + + Thread thread = Thread.currentThread(); + ThreadGroup group = thread.getThreadGroup(); + while (group != null) { + if (group instanceof ContextThreadGroup) { + return (ContextThreadGroup)group; + } + group = group.getParent(); + } + // awt.59=Application has run out of context thread group + throw new RuntimeException(Messages.getString("awt.59")); //$NON-NLS-1$ + } + + public static boolean shutdownPending() { + return getCurrentContext().shutdownPending; + } + + void shutdown() { + if (!multiContextMode) { + return; + } + shutdownPending = true; + + //???AWT: componentInternals.shutdown(); + + synchronized(contextLock) { + toolkit = null; + componentInternals = null; + //???AWT: dtk = null; + wtk = null; + graphicsEnvironment = null; + } + } + +} |