Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesViewLabelProvider.java82
1 files changed, 48 insertions, 34 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesViewLabelProvider.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesViewLabelProvider.java
index 3cc1e7ea93..bbbee21133 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesViewLabelProvider.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesViewLabelProvider.java
@@ -12,6 +12,8 @@ package org.eclipse.egit.ui.internal.repository;
import java.io.File;
import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
@@ -27,6 +29,7 @@ import org.eclipse.jgit.lib.Repository;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
@@ -36,6 +39,11 @@ import org.eclipse.swt.widgets.TreeColumn;
public class RepositoriesViewLabelProvider extends BaseLabelProvider implements
ITableLabelProvider {
+ /**
+ * A map of regular images to their decorated counterpart.
+ */
+ private Map<Image, Image> decoratedImages = new HashMap<Image, Image>();
+
// private DefaultInformationControl infoControl;
/**
@@ -181,6 +189,16 @@ public class RepositoriesViewLabelProvider extends BaseLabelProvider implements
}
}
+ @Override
+ public void dispose() {
+ // dispose of our decorated images
+ for (Image image : decoratedImages.values()) {
+ image.dispose();
+ }
+ decoratedImages.clear();
+ super.dispose();
+ }
+
private Image decorateImage(final Image image, Object element) {
RepositoryTreeNode node = (RepositoryTreeNode) element;
@@ -193,23 +211,7 @@ public class RepositoriesViewLabelProvider extends BaseLabelProvider implements
try {
String branch = node.getBranch();
if (refName.equals(branch)) {
- CompositeImageDescriptor cd = new CompositeImageDescriptor() {
-
- @Override
- protected Point getSize() {
- return new Point(image.getBounds().width, image
- .getBounds().width);
- }
-
- @Override
- protected void drawCompositeImage(int width, int height) {
- drawImage(image.getImageData(), 0, 0);
- drawImage(UIIcons.OVR_CHECKEDOUT.getImageData(), 0,
- 0);
-
- }
- };
- return cd.createImage();
+ return getDecoratedImage(image);
}
} catch (IOException e1) {
// simply ignore here
@@ -223,23 +225,7 @@ public class RepositoriesViewLabelProvider extends BaseLabelProvider implements
for (IProject proj : ResourcesPlugin.getWorkspace().getRoot()
.getProjects()) {
if (proj.getLocation().equals(new Path(file.getAbsolutePath()))) {
- CompositeImageDescriptor cd = new CompositeImageDescriptor() {
-
- @Override
- protected Point getSize() {
- return new Point(image.getBounds().width, image
- .getBounds().width);
- }
-
- @Override
- protected void drawCompositeImage(int width, int height) {
- drawImage(image.getImageData(), 0, 0);
- drawImage(UIIcons.OVR_CHECKEDOUT.getImageData(), 0,
- 0);
-
- }
- };
- return cd.createImage();
+ return getDecoratedImage(image);
}
}
return image;
@@ -249,4 +235,32 @@ public class RepositoriesViewLabelProvider extends BaseLabelProvider implements
}
}
+ private Image getDecoratedImage(final Image image) {
+ // check if we have a decorated image yet or not
+ Image decoratedImage = decoratedImages.get(image);
+ if (decoratedImage == null) {
+ // create one
+ CompositeImageDescriptor cd = new CompositeImageDescriptor() {
+
+ @Override
+ protected Point getSize() {
+ Rectangle bounds = image.getBounds();
+ return new Point(bounds.width, bounds.height);
+ }
+
+ @Override
+ protected void drawCompositeImage(int width, int height) {
+ drawImage(image.getImageData(), 0, 0);
+ drawImage(UIIcons.OVR_CHECKEDOUT.getImageData(), 0,
+ 0);
+
+ }
+ };
+ decoratedImage = cd.createImage();
+ // store it
+ decoratedImages.put(image, decoratedImage);
+ }
+ return decoratedImage;
+ }
+
}

Back to the top