~malte.nuhn/jhelioviewer/opendialog

« back to all changes in this revision

Viewing changes to src/viewmodel/src/org/helioviewer/viewmodel/view/bufferedimage/BufferedImageOverlayView.java

  • Committer: Malte Nuhn
  • Date: 2011-09-07 00:19:50 UTC
  • mfrom: (435.1.7 trunk)
  • Revision ID: malte.nuhn@rwth-aachen.de-20110907001950-k94vdauz0o1wlj42
merge with trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
7
7
import org.helioviewer.viewmodel.changeevent.RegionChangedReason;
8
8
import org.helioviewer.viewmodel.changeevent.SubImageDataChangedReason;
9
9
import org.helioviewer.viewmodel.changeevent.ViewChainChangedReason;
10
 
import org.helioviewer.viewmodel.imagedata.ARGBInt32ImageData;
11
10
import org.helioviewer.viewmodel.imagedata.ImageData;
12
11
import org.helioviewer.viewmodel.imagedata.JavaBufferedImageData;
13
12
import org.helioviewer.viewmodel.renderer.physical.BufferedImagePhysicalRenderGraphics;
14
13
import org.helioviewer.viewmodel.renderer.physical.PhysicalRenderer;
15
 
import org.helioviewer.viewmodel.view.AbstractBasicView;
 
14
import org.helioviewer.viewmodel.view.AbstractSubimageDataView;
16
15
import org.helioviewer.viewmodel.view.LayeredView;
17
16
import org.helioviewer.viewmodel.view.OverlayView;
18
 
import org.helioviewer.viewmodel.view.ScaleToViewportImageSizeView;
19
 
import org.helioviewer.viewmodel.view.SubimageDataView;
20
17
import org.helioviewer.viewmodel.view.View;
21
18
import org.helioviewer.viewmodel.view.ViewHelper;
22
 
import org.helioviewer.viewmodel.view.ScalingView.InterpolationMode;
23
19
 
24
20
/**
25
21
 * Implementation of OverlayView for rendering in software mode.
35
31
 * 
36
32
 * @author Markus Langenberg
37
33
 */
38
 
public class BufferedImageOverlayView extends AbstractBasicView implements OverlayView, SubimageDataView {
 
34
public class BufferedImageOverlayView extends AbstractSubimageDataView implements OverlayView {
39
35
 
40
 
    private SubimageDataView subimageDataView;
41
36
    private LayeredView layeredView;
42
 
    private ImageData imageData;
43
37
    private PhysicalRenderer overlayRenderer;
44
38
 
45
39
    /**
61
55
     */
62
56
    public void setView(View newView) {
63
57
        // If no ScaleToViewportImageSizeView present, insert it
64
 
        if (newView != null && newView.getAdapter(ScaleToViewportImageSizeView.class) == null) {
65
 
            ScaleToViewportImageSizeView scaleToViewportImageSizeView = new BufferedImageScaleToViewportImageSizeView();
66
 
            scaleToViewportImageSizeView.setInterpolationMode(InterpolationMode.BILINEAR);
67
 
            scaleToViewportImageSizeView.setView(newView);
68
 
 
69
 
            // use scaleToViewportImageSizeView as follower
70
 
            newView = scaleToViewportImageSizeView;
71
 
        }
 
58
        // if (newView != null &&
 
59
        // newView.getAdapter(ScaleToViewportImageSizeView.class) == null) {
 
60
        // ScaleToViewportImageSizeView scaleToViewportImageSizeView = new
 
61
        // BufferedImageScaleToViewportImageSizeView();
 
62
        // scaleToViewportImageSizeView.setInterpolationMode(InterpolationMode.BILINEAR);
 
63
        // scaleToViewportImageSizeView.setView(newView);
 
64
        //
 
65
        // // use scaleToViewportImageSizeView as follower
 
66
        // newView = scaleToViewportImageSizeView;
 
67
        // }
72
68
 
73
69
        super.setView(newView);
74
70
    }
77
73
     * {@inheritDoc}
78
74
     */
79
75
    protected void setViewSpecificImplementation(View newView, ChangeEvent changeEvent) {
80
 
        subimageDataView = ViewHelper.getViewAdapter(view, SubimageDataView.class);
 
76
        super.setViewSpecificImplementation(newView, changeEvent);
81
77
        layeredView = ViewHelper.getViewAdapter(view, LayeredView.class);
82
 
 
83
 
        if (ViewHelper.getImageDataAdapter(subimageDataView, JavaBufferedImageData.class) != null) {
84
 
            drawOverlays();
85
 
        }
86
 
    }
87
 
 
88
 
    /**
89
 
     * {@inheritDoc}
90
 
     */
91
 
    public ImageData getSubimageData() {
92
 
        return imageData;
93
78
    }
94
79
 
95
80
    /**
96
81
     * {@inheritDoc}
97
82
     */
98
83
    public void viewChanged(View sender, ChangeEvent aEvent) {
99
 
 
100
84
        if (aEvent.reasonOccurred(ViewChainChangedReason.class)) {
101
 
            subimageDataView = ViewHelper.getViewAdapter(view, SubimageDataView.class);
102
85
            layeredView = ViewHelper.getViewAdapter(view, LayeredView.class);
103
86
        }
104
87
 
105
 
        if (aEvent.reasonOccurred(RegionChangedReason.class) || aEvent.reasonOccurred(SubImageDataChangedReason.class)) {
106
 
            drawOverlays();
 
88
        if (aEvent.reasonOccurred(RegionChangedReason.class)) {
 
89
            aEvent.addReason(new SubImageDataChangedReason(this));
107
90
        }
 
91
        super.viewChanged(sender, aEvent);
108
92
 
109
93
        notifyViewListeners(aEvent);
110
94
    }
114
98
     * 
115
99
     * Therefore, calls the registered renderer.
116
100
     */
117
 
    private void drawOverlays() {
 
101
    protected ImageData performImageOperation(ImageData srcData) {
118
102
        // if no renderer registered, just pass image data
119
103
        if (overlayRenderer == null || layeredView.getNumLayers() <= 0) {
120
 
            imageData = subimageDataView.getSubimageData();
121
 
            return;
122
 
        }
123
 
 
124
 
        // get source image data
125
 
        JavaBufferedImageData sourceData = ViewHelper.getImageDataAdapter(subimageDataView, JavaBufferedImageData.class);
126
 
        if (sourceData == null) {
127
 
            return;
 
104
            return srcData;
128
105
        }
129
106
 
130
107
        // get buffered image
131
 
        BufferedImage source = sourceData.getBufferedImage();
 
108
        BufferedImage source = ((JavaBufferedImageData) srcData).getBufferedImage();
132
109
        if (source == null) {
133
 
            return;
 
110
            return srcData;
134
111
        }
135
112
 
136
 
        // copy original image
137
 
        BufferedImage target = new BufferedImage(source.getWidth(), source.getHeight(), BufferedImage.TYPE_INT_ARGB);
138
 
        Graphics g = target.getGraphics();
139
 
        g.drawImage(source, 0, 0, null);
140
 
 
141
113
        // render overlays to image
 
114
        Graphics g = source.createGraphics();
142
115
        BufferedImagePhysicalRenderGraphics renderGraphics = new BufferedImagePhysicalRenderGraphics(g, view);
143
116
        overlayRenderer.render(renderGraphics);
144
117
 
145
 
        imageData = new ARGBInt32ImageData(sourceData, target);
 
118
        return srcData;
146
119
    }
147
120
}