Package org.eclipse.jface.resource

# Class DeviceResourceDescriptor

java.lang.Object
org.eclipse.jface.resource.DeviceResourceDescriptor

Direct Known Subclasses:
  `ColorDescriptor`, `FontDescriptor`, `ImageDescriptor`

public abstract class DeviceResourceDescriptor extends Object
Instances of this class can allocate and dispose SWT resources. Each instance describes a particular resource (such as a Color, Font, or Image) and can create and destroy that resource on demand. DeviceResourceDescriptors are managed by a ResourceRegistry.

Note: It is recommended that subclasses implement `#equals` and `#hashCode`, so that clients, like decoration managers, can recognize when they have two equal descriptors at hand, e.g. decorating an identical object.

Since:
  3.1
See Also:
  - `ResourceManager`

## Constructor Summary

Constructors
Modifier
Constructor
Description
``
`DeviceResourceDescriptor()`
default constructor with shouldBeCached=false
`protected`
`DeviceResourceDescriptor(boolean shouldBeCached)`

## Method Summary

Modifier and Type
Method
Description
`abstract Object`
`createResource(Device device)`
Creates the resource described by this descriptor
`abstract void`
`destroyResource(Object previouslyCreatedObject)`
Undoes everything that was done by a previous call to create(...), given the object that was returned by create(...).

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### DeviceResourceDescriptor

public DeviceResourceDescriptor()
default constructor with shouldBeCached=false

### DeviceResourceDescriptor

protected DeviceResourceDescriptor(boolean shouldBeCached)

Parameters:
  `shouldBeCached` - Indicates if the resource instance described by the descriptor should to be kept by `ResourceManager` even if all references to the resource are lost (due to `ResourceManager.destroy(DeviceResourceDescriptor)`).
  Should return true for resources that are costly to create (for example by involving I/O Operation). Has only an effect if caching is enabled (see org.eclipse.jface.resource.JFaceResources#cacheSize). Caching relies on `Object.equals(Object)` and `Object.hashCode()`. For equal DeviceResourceDescriptors the same Resource instance is returned by the `ResourceManager` instance return by `JFaceResources.getResources(org.eclipse.swt.widgets.Display)` as long as the cache is big enough to cache all resources.
  Instances which equal (in terms of `Object.equals(Object)`) must have the same shouldBeCached mode.
Since:
  3.24
See Also:
  - `LazyResourceManager`

## Method Details

### createResource

public abstract Object createResource(Device device)
Creates the resource described by this descriptor

Parameters:
  `device` - the Device on which to allocate the resource
Returns:
  the newly allocated resource (not null)
Throws:
  `DeviceResourceException` - if unable to allocate the resource
Since:
  3.1

### destroyResource

public abstract void destroyResource(Object previouslyCreatedObject)
Undoes everything that was done by a previous call to create(...), given the object that was returned by create(...).

Parameters:
  `previouslyCreatedObject` - an object that was returned by an equal descriptor in a previous call to createResource(...).
Since:
  3.1