| /* |
| * 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 Igor V. Stolyarov |
| * @version $Revision$ |
| */ |
| package org.apache.harmony.awt.gl; |
| |
| import java.awt.Composite; |
| import java.awt.CompositeContext; |
| import java.awt.image.ColorModel; |
| import java.awt.image.Raster; |
| import java.awt.image.WritableRaster; |
| |
| import org.apache.harmony.awt.gl.ImageSurface; |
| import org.apache.harmony.awt.gl.render.NativeImageBlitter; |
| import org.apache.harmony.awt.internal.nls.Messages; |
| |
| |
| /** |
| * This class represent implementation of the CompositeContext interface |
| */ |
| public class ICompositeContext implements CompositeContext { |
| Composite composite; |
| ColorModel srcCM, dstCM; |
| ImageSurface srcSurf, dstSurf; |
| |
| public ICompositeContext(Composite comp, ColorModel src, ColorModel dst){ |
| composite = comp; |
| srcCM = src; |
| dstCM = dst; |
| } |
| |
| public void dispose() { |
| srcSurf.dispose(); |
| dstSurf.dispose(); |
| } |
| |
| public void compose(Raster srcIn, Raster dstIn, WritableRaster dstOut) { |
| |
| if(!srcCM.isCompatibleRaster(srcIn)) { |
| // awt.48=The srcIn raster is incompatible with src ColorModel |
| throw new IllegalArgumentException(Messages.getString("awt.48")); //$NON-NLS-1$ |
| } |
| |
| if(!dstCM.isCompatibleRaster(dstIn)) { |
| // awt.49=The dstIn raster is incompatible with dst ColorModel |
| throw new IllegalArgumentException(Messages.getString("awt.49")); //$NON-NLS-1$ |
| } |
| |
| if(dstIn != dstOut){ |
| if(!dstCM.isCompatibleRaster(dstOut)) { |
| // awt.4A=The dstOut raster is incompatible with dst ColorModel |
| throw new IllegalArgumentException(Messages.getString("awt.4A")); //$NON-NLS-1$ |
| } |
| dstOut.setDataElements(0, 0, dstIn); |
| } |
| WritableRaster src; |
| if(srcIn instanceof WritableRaster){ |
| src = (WritableRaster) srcIn; |
| }else{ |
| src = srcIn.createCompatibleWritableRaster(); |
| src.setDataElements(0, 0, srcIn); |
| } |
| srcSurf = new ImageSurface(srcCM, src); |
| dstSurf = new ImageSurface(dstCM, dstOut); |
| |
| int w = Math.min(srcIn.getWidth(), dstOut.getWidth()); |
| int h = Math.min(srcIn.getHeight(), dstOut.getHeight()); |
| |
| NativeImageBlitter.getInstance().blit(0, 0, srcSurf, 0, 0, dstSurf, |
| w, h, composite, null, null); |
| |
| } |
| |
| } |