org.eclipse.swt.graphics.Resource.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.swt.graphics.Resource.java

Source

/*******************************************************************************
 * Copyright (c) 2000, 2010 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.swt.graphics;

import org.eclipse.swt.*;

/**
 * This class is the abstract superclass of all graphics resource objects.
 * Resources created by the application must be disposed.
 * <p>
 * IMPORTANT: This class is intended to be subclassed <em>only</em>
 * within the SWT implementation. However, it has not been marked
 * final to allow those outside of the SWT development team to implement
 * patched versions of the class in order to get around specific
 * limitations in advance of when those limitations can be addressed
 * by the team.  Any class built using subclassing to access the internals
 * of this class will likely fail to compile or run between releases and
 * may be strongly platform specific. Subclassing should not be attempted
 * without an intimate and detailed understanding of the workings of the
 * hierarchy. No support is provided for user-written classes which are
 * implemented as subclasses of this class.
 * </p>
 *
 * @see #dispose
 * @see #isDisposed
 * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
 *
 * @since 3.1
 */
public abstract class Resource {

    /**
     * the device where this resource was created
     */
    Device device;

    public Resource() {
    }

    Resource(Device device) {
        if (device == null)
            device = Device.getDevice();
        if (device == null)
            SWT.error(SWT.ERROR_NULL_ARGUMENT);
        this.device = device;
    }

    void destroy() {
    }

    /**
     * Disposes of the operating system resources associated with
     * this resource. Applications must dispose of all resources
     * which they allocate.
     * This method does nothing if the resource is already disposed.
     */
    public void dispose() {
        if (device == null)
            return;
        if (device.isDisposed())
            return;
        destroy();
        if (device.tracking)
            device.dispose_Object(this);
        device = null;
    }

    /**
     * Returns the <code>Device</code> where this resource was
     * created.
     *
     * @return <code>Device</code> the device of the receiver
     *
     * @since 3.2
     */
    public Device getDevice() {
        Device device = this.device;
        if (device == null || isDisposed())
            SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
        return device;
    }

    void init() {
        if (device.tracking)
            device.new_Object(this);
    }

    /**
     * Returns <code>true</code> if the resource has been disposed,
     * and <code>false</code> otherwise.
     * <p>
     * This method gets the dispose state for the resource.
     * When a resource has been disposed, it is an error to
     * invoke any other method (except {@link #dispose()}) using the resource.
     *
     * @return <code>true</code> when the resource is disposed and <code>false</code> otherwise
     */
    public abstract boolean isDisposed();

}