jdk/src/java.desktop/unix/classes/sun/java2d/xr/XRPMBlitLoops.java
author prr
Mon, 25 Jul 2016 10:36:12 -0700
changeset 40142 59833102e41b
parent 25859 3317bb8137f4
child 41571 37e93ae74ab8
permissions -rw-r--r--
8147542: ClassCastException when repainting after display resolution change Reviewed-by: prr, flar Contributed-by: alexey.ushakov@jetbrains.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
     1
/*
22584
eed64ee05369 8032733: Fix cast lint warnings in client libraries
darcy
parents: 21236
diff changeset
     2
 * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
     4
 *
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
6374
e214162c907e 6982137: Rebranding pass 2 - missed copyright changes
ohair
parents: 5579
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
6374
e214162c907e 6982137: Rebranding pass 2 - missed copyright changes
ohair
parents: 5579
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    10
 *
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    15
 * accompanied this code).
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    16
 *
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    20
 *
6374
e214162c907e 6982137: Rebranding pass 2 - missed copyright changes
ohair
parents: 5579
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
e214162c907e 6982137: Rebranding pass 2 - missed copyright changes
ohair
parents: 5579
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
e214162c907e 6982137: Rebranding pass 2 - missed copyright changes
ohair
parents: 5579
diff changeset
    23
 * questions.
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    24
 */
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    25
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    26
package sun.java2d.xr;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    27
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    28
import sun.awt.SunToolkit;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    29
import sun.awt.image.*;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    30
import sun.java2d.loops.*;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    31
import sun.java2d.pipe.*;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    32
import sun.java2d.*;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    33
import java.awt.*;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    34
import java.awt.geom.*;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    35
import java.lang.ref.*;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    36
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    37
public class XRPMBlitLoops {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    38
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    39
    static WeakReference<SunVolatileImage> argbTmpPM = new WeakReference<SunVolatileImage>(null);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    40
    static WeakReference<SunVolatileImage> rgbTmpPM = new WeakReference<SunVolatileImage>(null);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    41
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    42
    public XRPMBlitLoops() {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    43
    }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    44
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    45
    public static void register() {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    46
        GraphicsPrimitive[] primitives = { new XRPMBlit(XRSurfaceData.IntRgbX11, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    47
                new XRPMBlit(XRSurfaceData.IntRgbX11, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    48
                new XRPMBlit(XRSurfaceData.IntArgbPreX11, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    49
                new XRPMBlit(XRSurfaceData.IntArgbPreX11, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    50
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    51
                new XRPMScaledBlit(XRSurfaceData.IntRgbX11, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    52
                new XRPMScaledBlit(XRSurfaceData.IntRgbX11, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    53
                new XRPMScaledBlit(XRSurfaceData.IntArgbPreX11, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    54
                new XRPMScaledBlit(XRSurfaceData.IntArgbPreX11, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    55
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    56
                new XRPMTransformedBlit(XRSurfaceData.IntRgbX11, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    57
                new XRPMTransformedBlit(XRSurfaceData.IntRgbX11, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    58
                new XRPMTransformedBlit(XRSurfaceData.IntArgbPreX11, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    59
                new XRPMTransformedBlit(XRSurfaceData.IntArgbPreX11, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    60
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    61
                /* SW -> Surface Blits */
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    62
                new XrSwToPMBlit(SurfaceType.IntArgb, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    63
                new XrSwToPMBlit(SurfaceType.IntRgb, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    64
                new XrSwToPMBlit(SurfaceType.IntBgr, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    65
                new XrSwToPMBlit(SurfaceType.ThreeByteBgr, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    66
                new XrSwToPMBlit(SurfaceType.Ushort565Rgb, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    67
                new XrSwToPMBlit(SurfaceType.Ushort555Rgb, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    68
                new XrSwToPMBlit(SurfaceType.ByteIndexed, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    69
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    70
                new XrSwToPMBlit(SurfaceType.IntArgb, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    71
                new XrSwToPMBlit(SurfaceType.IntRgb, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    72
                new XrSwToPMBlit(SurfaceType.IntBgr, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    73
                new XrSwToPMBlit(SurfaceType.ThreeByteBgr, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    74
                new XrSwToPMBlit(SurfaceType.Ushort565Rgb, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    75
                new XrSwToPMBlit(SurfaceType.Ushort555Rgb, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    76
                new XrSwToPMBlit(SurfaceType.ByteIndexed, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    77
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    78
                /* SW->Surface Scales */
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    79
                new XrSwToPMScaledBlit(SurfaceType.IntArgb, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    80
                new XrSwToPMScaledBlit(SurfaceType.IntRgb, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    81
                new XrSwToPMScaledBlit(SurfaceType.IntBgr, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    82
                new XrSwToPMScaledBlit(SurfaceType.ThreeByteBgr, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    83
                new XrSwToPMScaledBlit(SurfaceType.Ushort565Rgb, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    84
                new XrSwToPMScaledBlit(SurfaceType.Ushort555Rgb, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    85
                new XrSwToPMScaledBlit(SurfaceType.ByteIndexed, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    86
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    87
                new XrSwToPMScaledBlit(SurfaceType.IntArgb, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    88
                new XrSwToPMScaledBlit(SurfaceType.IntRgb, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    89
                new XrSwToPMScaledBlit(SurfaceType.IntBgr, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    90
                new XrSwToPMScaledBlit(SurfaceType.ThreeByteBgr, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    91
                new XrSwToPMScaledBlit(SurfaceType.Ushort565Rgb, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    92
                new XrSwToPMScaledBlit(SurfaceType.Ushort555Rgb, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    93
                new XrSwToPMScaledBlit(SurfaceType.ByteIndexed, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    94
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    95
                /* SW->Surface Transforms */
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    96
                new XrSwToPMTransformedBlit(SurfaceType.IntArgb, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    97
                new XrSwToPMTransformedBlit(SurfaceType.IntRgb, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    98
                new XrSwToPMTransformedBlit(SurfaceType.IntBgr, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
    99
                new XrSwToPMTransformedBlit(SurfaceType.ThreeByteBgr, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   100
                new XrSwToPMTransformedBlit(SurfaceType.Ushort565Rgb, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   101
                new XrSwToPMTransformedBlit(SurfaceType.Ushort555Rgb, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   102
                new XrSwToPMTransformedBlit(SurfaceType.ByteIndexed, XRSurfaceData.IntRgbX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   103
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   104
                new XrSwToPMTransformedBlit(SurfaceType.IntArgb, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   105
                new XrSwToPMTransformedBlit(SurfaceType.IntRgb, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   106
                new XrSwToPMTransformedBlit(SurfaceType.IntBgr, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   107
                new XrSwToPMTransformedBlit(SurfaceType.ThreeByteBgr, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   108
                new XrSwToPMTransformedBlit(SurfaceType.Ushort565Rgb, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   109
                new XrSwToPMTransformedBlit(SurfaceType.Ushort555Rgb, XRSurfaceData.IntArgbPreX11),
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   110
                new XrSwToPMTransformedBlit(SurfaceType.ByteIndexed, XRSurfaceData.IntArgbPreX11), };
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   111
        GraphicsPrimitiveMgr.register(primitives);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   112
    }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   113
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   114
    /**
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   115
     * Caches a SW surface using a temporary pixmap. The pixmap is held by a WeakReference,
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   116
     *  allowing it to shrink again after some time.
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   117
     */
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   118
    protected static XRSurfaceData cacheToTmpSurface(SurfaceData src, XRSurfaceData dst, int w, int h, int sx, int sy) {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   119
        SunVolatileImage vImg;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   120
        SurfaceType vImgSurfaceType;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   121
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   122
        if (src.getTransparency() == Transparency.OPAQUE) {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   123
            vImg = rgbTmpPM.get();
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   124
            vImgSurfaceType = SurfaceType.IntRgb;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   125
        } else {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   126
            vImg = argbTmpPM.get();
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   127
            vImgSurfaceType = SurfaceType.IntArgbPre;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   128
        }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   129
40142
59833102e41b 8147542: ClassCastException when repainting after display resolution change
prr
parents: 25859
diff changeset
   130
        if (vImg == null || vImg.getWidth() < w || vImg.getHeight() < h ||
59833102e41b 8147542: ClassCastException when repainting after display resolution change
prr
parents: 25859
diff changeset
   131
            // Sometimes we get volatile image of wrong dest surface type,
59833102e41b 8147542: ClassCastException when repainting after display resolution change
prr
parents: 25859
diff changeset
   132
            // so recreating it
59833102e41b 8147542: ClassCastException when repainting after display resolution change
prr
parents: 25859
diff changeset
   133
            !(vImg.getDestSurface() instanceof XRSurfaceData))
59833102e41b 8147542: ClassCastException when repainting after display resolution change
prr
parents: 25859
diff changeset
   134
        {
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   135
            if (vImg != null) {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   136
                vImg.flush();
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   137
            }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   138
            vImg = (SunVolatileImage) dst.getGraphicsConfig().createCompatibleVolatileImage(w, h, src.getTransparency());
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   139
            vImg.setAccelerationPriority(1.0f);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   140
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   141
            if (src.getTransparency() == SurfaceData.OPAQUE) {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   142
                rgbTmpPM = new WeakReference<SunVolatileImage>(vImg);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   143
            } else {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   144
                argbTmpPM = new WeakReference<SunVolatileImage>(vImg);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   145
            }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   146
        }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   147
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   148
        Blit swToSurfaceBlit = Blit.getFromCache(src.getSurfaceType(), CompositeType.SrcNoEa, vImgSurfaceType);
40142
59833102e41b 8147542: ClassCastException when repainting after display resolution change
prr
parents: 25859
diff changeset
   149
59833102e41b 8147542: ClassCastException when repainting after display resolution change
prr
parents: 25859
diff changeset
   150
        if (!(vImg.getDestSurface() instanceof XRSurfaceData)) {
59833102e41b 8147542: ClassCastException when repainting after display resolution change
prr
parents: 25859
diff changeset
   151
            throw new InvalidPipeException("wrong surface data type: " + vImg.getDestSurface());
59833102e41b 8147542: ClassCastException when repainting after display resolution change
prr
parents: 25859
diff changeset
   152
        }
59833102e41b 8147542: ClassCastException when repainting after display resolution change
prr
parents: 25859
diff changeset
   153
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   154
        XRSurfaceData vImgSurface = (XRSurfaceData) vImg.getDestSurface();
8940
7a0c1d4e2982 6985593: Crash in Java_sun_java2d_loops_MaskBlit_MaskBlit on oel5.5-x64
bae
parents: 6374
diff changeset
   155
        swToSurfaceBlit.Blit(src, vImgSurface, AlphaComposite.Src, null,
7a0c1d4e2982 6985593: Crash in Java_sun_java2d_loops_MaskBlit_MaskBlit on oel5.5-x64
bae
parents: 6374
diff changeset
   156
                             sx, sy, 0, 0, w, h);
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   157
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   158
        return vImgSurface;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   159
    }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   160
}
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   161
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   162
class XRPMBlit extends Blit {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   163
    public XRPMBlit(SurfaceType srcType, SurfaceType dstType) {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   164
        super(srcType, CompositeType.AnyAlpha, dstType);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   165
    }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   166
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   167
    public void Blit(SurfaceData src, SurfaceData dst, Composite comp, Region clip, int sx, int sy, int dx, int dy, int w, int h) {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   168
        try {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   169
            SunToolkit.awtLock();
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   170
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   171
            XRSurfaceData x11sdDst = (XRSurfaceData) dst;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   172
            x11sdDst.validateAsDestination(null, clip);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   173
            XRSurfaceData x11sdSrc = (XRSurfaceData) src;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   174
            x11sdSrc.validateAsSource(null, XRUtils.RepeatNone, XRUtils.FAST);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   175
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   176
            x11sdDst.maskBuffer.validateCompositeState(comp, null, null, null);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   177
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   178
            x11sdDst.maskBuffer.compositeBlit(x11sdSrc, x11sdDst, sx, sy, dx, dy, w, h);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   179
        } finally {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   180
            SunToolkit.awtUnlock();
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   181
        }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   182
    }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   183
}
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   184
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   185
class XRPMScaledBlit extends ScaledBlit {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   186
    public XRPMScaledBlit(SurfaceType srcType, SurfaceType dstType) {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   187
        super(srcType, CompositeType.AnyAlpha, dstType);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   188
    }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   189
22584
eed64ee05369 8032733: Fix cast lint warnings in client libraries
darcy
parents: 21236
diff changeset
   190
    @SuppressWarnings("cast")
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   191
    public void Scale(SurfaceData src, SurfaceData dst, Composite comp, Region clip, int sx1, int sy1, int sx2, int sy2, double dx1, double dy1,
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   192
            double dx2, double dy2) {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   193
        try {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   194
            SunToolkit.awtLock();
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   195
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   196
            XRSurfaceData x11sdDst = (XRSurfaceData) dst;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   197
            x11sdDst.validateAsDestination(null, clip);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   198
            XRSurfaceData x11sdSrc = (XRSurfaceData) src;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   199
            x11sdDst.maskBuffer.validateCompositeState(comp, null, null, null);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   200
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   201
            double xScale = (dx2 - dx1) / (sx2 - sx1);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   202
            double yScale = (dy2 - dy1) / (sy2 - sy1);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   203
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   204
            sx1 *= xScale;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   205
            sx2 *= xScale;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   206
            sy1 *= yScale;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   207
            sy2 *= yScale;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   208
21236
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   209
            dx1 = Math.ceil(dx1 - 0.5);
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   210
            dy1 = Math.ceil(dy1 - 0.5);
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   211
            dx2 = Math.ceil(dx2 - 0.5);
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   212
            dy2 = Math.ceil(dy2 - 0.5);
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   213
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   214
            AffineTransform xForm = AffineTransform.getScaleInstance(1 / xScale, 1 / yScale);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   215
21236
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   216
            x11sdSrc.validateAsSource(xForm, XRUtils.RepeatNone, XRUtils.FAST);
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   217
            x11sdDst.maskBuffer.compositeBlit(x11sdSrc, x11sdDst, (int) sx1, (int) sy1, (int) dx1, (int) dy1, (int) (dx2 - dx1), (int) (dy2 - dy1));
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   218
        } finally {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   219
            SunToolkit.awtUnlock();
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   220
        }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   221
    }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   222
}
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   223
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   224
/**
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   225
 * Called also if scale+transform is set
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   226
 *
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   227
 * @author Clemens Eisserer
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   228
 */
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   229
class XRPMTransformedBlit extends TransformBlit {
19784
dadb86ec2b3f 7159455: Nimbus scrollbar rendering glitch with xrender enabled on i945GM
ceisserer
parents: 8940
diff changeset
   230
    final Rectangle compositeBounds = new Rectangle();
dadb86ec2b3f 7159455: Nimbus scrollbar rendering glitch with xrender enabled on i945GM
ceisserer
parents: 8940
diff changeset
   231
    final double[] srcCoords = new double[8];
dadb86ec2b3f 7159455: Nimbus scrollbar rendering glitch with xrender enabled on i945GM
ceisserer
parents: 8940
diff changeset
   232
    final double[] dstCoords = new double[8];
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   233
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   234
    public XRPMTransformedBlit(SurfaceType srcType, SurfaceType dstType) {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   235
        super(srcType, CompositeType.AnyAlpha, dstType);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   236
    }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   237
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   238
    /*
21236
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   239
     * Calculates the composition-rectangle required for transformed blits.
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   240
     * For composite operations where the composition-rectangle defines
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   241
     * the modified destination area, coordinates are rounded.
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   242
     * Otherwise the composition window rectangle is sized large enough
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   243
     * to not clip away any pixels.
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   244
     */
21236
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   245
    protected void adjustCompositeBounds(boolean isQuadrantRotated, AffineTransform tr,
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   246
            int dstx, int dsty, int width, int height) {
19784
dadb86ec2b3f 7159455: Nimbus scrollbar rendering glitch with xrender enabled on i945GM
ceisserer
parents: 8940
diff changeset
   247
        srcCoords[0] = dstx;
dadb86ec2b3f 7159455: Nimbus scrollbar rendering glitch with xrender enabled on i945GM
ceisserer
parents: 8940
diff changeset
   248
        srcCoords[1] = dsty;
dadb86ec2b3f 7159455: Nimbus scrollbar rendering glitch with xrender enabled on i945GM
ceisserer
parents: 8940
diff changeset
   249
        srcCoords[2] = dstx + width;
21236
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   250
        srcCoords[3] = dsty + height;
19784
dadb86ec2b3f 7159455: Nimbus scrollbar rendering glitch with xrender enabled on i945GM
ceisserer
parents: 8940
diff changeset
   251
21236
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   252
        double minX, minY, maxX, maxY;
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   253
        if (isQuadrantRotated) {
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   254
            tr.transform(srcCoords, 0, dstCoords, 0, 2);
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   255
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   256
            minX = Math.min(dstCoords[0], dstCoords[2]);
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   257
            minY = Math.min(dstCoords[1], dstCoords[3]);
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   258
            maxX = Math.max(dstCoords[0], dstCoords[2]);
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   259
            maxY = Math.max(dstCoords[1], dstCoords[3]);
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   260
21236
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   261
            minX = Math.ceil(minX - 0.5);
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   262
            minY = Math.ceil(minY - 0.5);
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   263
            maxX = Math.ceil(maxX - 0.5);
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   264
            maxY = Math.ceil(maxY - 0.5);
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   265
        } else {
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   266
            srcCoords[4] = dstx;
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   267
            srcCoords[5] = dsty + height;
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   268
            srcCoords[6] = dstx + width;
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   269
            srcCoords[7] = dsty;
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   270
21236
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   271
            tr.transform(srcCoords, 0, dstCoords, 0, 4);
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   272
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   273
            minX = Math.min(dstCoords[0], Math.min(dstCoords[2], Math.min(dstCoords[4], dstCoords[6])));
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   274
            minY = Math.min(dstCoords[1], Math.min(dstCoords[3], Math.min(dstCoords[5], dstCoords[7])));
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   275
            maxX = Math.max(dstCoords[0], Math.max(dstCoords[2], Math.max(dstCoords[4], dstCoords[6])));
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   276
            maxY = Math.max(dstCoords[1], Math.max(dstCoords[3], Math.max(dstCoords[5], dstCoords[7])));
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   277
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   278
            minX = Math.floor(minX);
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   279
            minY = Math.floor(minY);
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   280
            maxX = Math.ceil(maxX);
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   281
            maxY = Math.ceil(maxY);
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   282
        }
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   283
19784
dadb86ec2b3f 7159455: Nimbus scrollbar rendering glitch with xrender enabled on i945GM
ceisserer
parents: 8940
diff changeset
   284
        compositeBounds.x = (int) minX;
dadb86ec2b3f 7159455: Nimbus scrollbar rendering glitch with xrender enabled on i945GM
ceisserer
parents: 8940
diff changeset
   285
        compositeBounds.y = (int) minY;
dadb86ec2b3f 7159455: Nimbus scrollbar rendering glitch with xrender enabled on i945GM
ceisserer
parents: 8940
diff changeset
   286
        compositeBounds.width = (int) (maxX - minX);
dadb86ec2b3f 7159455: Nimbus scrollbar rendering glitch with xrender enabled on i945GM
ceisserer
parents: 8940
diff changeset
   287
        compositeBounds.height = (int) (maxY - minY);
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   288
    }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   289
19784
dadb86ec2b3f 7159455: Nimbus scrollbar rendering glitch with xrender enabled on i945GM
ceisserer
parents: 8940
diff changeset
   290
    public void Transform(SurfaceData src, SurfaceData dst, Composite comp, Region clip, AffineTransform xform,
dadb86ec2b3f 7159455: Nimbus scrollbar rendering glitch with xrender enabled on i945GM
ceisserer
parents: 8940
diff changeset
   291
            int hint, int srcx, int srcy, int dstx, int dsty, int width, int height) {
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   292
        try {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   293
            SunToolkit.awtLock();
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   294
19784
dadb86ec2b3f 7159455: Nimbus scrollbar rendering glitch with xrender enabled on i945GM
ceisserer
parents: 8940
diff changeset
   295
            XRSurfaceData x11sdDst = (XRSurfaceData) dst;
dadb86ec2b3f 7159455: Nimbus scrollbar rendering glitch with xrender enabled on i945GM
ceisserer
parents: 8940
diff changeset
   296
            XRSurfaceData x11sdSrc = (XRSurfaceData) src;
21236
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   297
            XRCompositeManager xrMgr = XRCompositeManager.getInstance(x11sdSrc);
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   298
21236
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   299
            float extraAlpha = ((AlphaComposite) comp).getAlpha();
19784
dadb86ec2b3f 7159455: Nimbus scrollbar rendering glitch with xrender enabled on i945GM
ceisserer
parents: 8940
diff changeset
   300
            int filter = XRUtils.ATransOpToXRQuality(hint);
21236
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   301
            boolean isQuadrantRotated = XRUtils.isTransformQuadrantRotated(xform);
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   302
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   303
            adjustCompositeBounds(isQuadrantRotated, xform, dstx, dsty, width, height);
19784
dadb86ec2b3f 7159455: Nimbus scrollbar rendering glitch with xrender enabled on i945GM
ceisserer
parents: 8940
diff changeset
   304
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   305
            x11sdDst.validateAsDestination(null, clip);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   306
            x11sdDst.maskBuffer.validateCompositeState(comp, null, null, null);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   307
19784
dadb86ec2b3f 7159455: Nimbus scrollbar rendering glitch with xrender enabled on i945GM
ceisserer
parents: 8940
diff changeset
   308
            AffineTransform trx = AffineTransform.getTranslateInstance(-compositeBounds.x, -compositeBounds.y);
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   309
            trx.concatenate(xform);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   310
            AffineTransform maskTX = (AffineTransform) trx.clone();
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   311
            trx.translate(-srcx, -srcy);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   312
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   313
            try {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   314
                trx.invert();
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   315
            } catch (NoninvertibleTransformException ex) {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   316
                trx.setToIdentity();
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   317
            }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   318
21236
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   319
            if (filter != XRUtils.FAST && (!isQuadrantRotated || extraAlpha != 1.0f)) {
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   320
                XRMaskImage mask = x11sdSrc.maskBuffer.getMaskImage();
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   321
21236
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   322
                // For quadrant-transformed blits geometry is not stored inside the mask
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   323
                // therefore we can use a repeating 1x1 mask for applying extra alpha.
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   324
                int maskPicture = isQuadrantRotated ? xrMgr.getExtraAlphaMask()
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   325
                        : mask.prepareBlitMask(x11sdDst, maskTX, width, height);
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   326
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   327
                x11sdSrc.validateAsSource(trx, XRUtils.RepeatPad, filter);
21236
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   328
                x11sdDst.maskBuffer.con.renderComposite(xrMgr.getCompRule(), x11sdSrc.picture,
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   329
                        maskPicture, x11sdDst.picture, 0, 0, 0, 0, compositeBounds.x, compositeBounds.y,
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   330
                        compositeBounds.width, compositeBounds.height);
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   331
            } else {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   332
                int repeat = filter == XRUtils.FAST ? XRUtils.RepeatNone : XRUtils.RepeatPad;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   333
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   334
                x11sdSrc.validateAsSource(trx, repeat, filter);
21236
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   335
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   336
                // compositeBlit takes care of extra alpha
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   337
                x11sdDst.maskBuffer.compositeBlit(x11sdSrc, x11sdDst, 0, 0, compositeBounds.x,
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   338
                        compositeBounds.y, compositeBounds.width, compositeBounds.height);
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   339
            }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   340
        } finally {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   341
            SunToolkit.awtUnlock();
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   342
        }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   343
    }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   344
}
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   345
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   346
class XrSwToPMBlit extends Blit {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   347
    Blit pmToSurfaceBlit;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   348
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   349
    XrSwToPMBlit(SurfaceType srcType, SurfaceType dstType) {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   350
        super(srcType, CompositeType.AnyAlpha, dstType);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   351
        pmToSurfaceBlit = new XRPMBlit(dstType, dstType);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   352
    }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   353
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   354
    public void Blit(SurfaceData src, SurfaceData dst, Composite comp, Region clip, int sx, int sy, int dx, int dy, int w, int h) {
21236
ee742f4ec299 8027169: Xrender: Cleaner version of the fix for 7159455 Nimbus scrollbar glitch
prr
parents: 19784
diff changeset
   355
        // If the blit is write-only (putimge), no need for a temporary VI.
5579
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   356
        if (CompositeType.SrcOverNoEa.equals(comp) && (src.getTransparency() == Transparency.OPAQUE)) {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   357
            Blit opaqueSwToSurfaceBlit = Blit.getFromCache(src.getSurfaceType(), CompositeType.SrcNoEa, dst.getSurfaceType());
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   358
            opaqueSwToSurfaceBlit.Blit(src, dst, comp, clip, sx, sy, dx, dy, w, h);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   359
        } else {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   360
            try {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   361
                SunToolkit.awtLock();
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   362
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   363
                XRSurfaceData vImgSurface = XRPMBlitLoops.cacheToTmpSurface(src, (XRSurfaceData) dst, w, h, sx, sy);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   364
                pmToSurfaceBlit.Blit(vImgSurface, dst, comp, clip, 0, 0, dx, dy, w, h);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   365
            } finally {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   366
                SunToolkit.awtUnlock();
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   367
            }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   368
        }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   369
    }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   370
}
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   371
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   372
class XrSwToPMScaledBlit extends ScaledBlit {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   373
    ScaledBlit pmToSurfaceBlit;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   374
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   375
    XrSwToPMScaledBlit(SurfaceType srcType, SurfaceType dstType) {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   376
        super(srcType, CompositeType.AnyAlpha, dstType);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   377
        pmToSurfaceBlit = new XRPMScaledBlit(dstType, dstType);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   378
    }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   379
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   380
    public void Scale(SurfaceData src, SurfaceData dst, Composite comp, Region clip, int sx1, int sy1, int sx2, int sy2, double dx1, double dy1,
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   381
            double dx2, double dy2) {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   382
        {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   383
            int w = sx2 - sx1;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   384
            int h = sy2 - sy1;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   385
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   386
            try {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   387
                SunToolkit.awtLock();
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   388
                XRSurfaceData vImgSurface = XRPMBlitLoops.cacheToTmpSurface(src, (XRSurfaceData) dst, w, h, sx1, sy1);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   389
                pmToSurfaceBlit.Scale(vImgSurface, dst, comp, clip, 0, 0, w, h, dx1, dy1, dx2, dy2);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   390
            } finally {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   391
                SunToolkit.awtUnlock();
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   392
            }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   393
        }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   394
    }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   395
}
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   396
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   397
class XrSwToPMTransformedBlit extends TransformBlit {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   398
    TransformBlit pmToSurfaceBlit;
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   399
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   400
    XrSwToPMTransformedBlit(SurfaceType srcType, SurfaceType dstType) {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   401
        super(srcType, CompositeType.AnyAlpha, dstType);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   402
        pmToSurfaceBlit = new XRPMTransformedBlit(dstType, dstType);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   403
    }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   404
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   405
    public void Transform(SurfaceData src, SurfaceData dst, Composite comp, Region clip, AffineTransform xform, int hint, int sx, int sy, int dstx,
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   406
            int dsty, int w, int h) {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   407
        try {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   408
            SunToolkit.awtLock();
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   409
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   410
            XRSurfaceData vImgSurface = XRPMBlitLoops.cacheToTmpSurface(src, (XRSurfaceData) dst, w, h, sx, sy);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   411
            pmToSurfaceBlit.Transform(vImgSurface, dst, comp, clip, xform, hint, 0, 0, dstx, dsty, w, h);
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   412
        } finally {
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   413
            SunToolkit.awtUnlock();
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   414
        }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   415
    }
1a5e995a710b 6307603: [X11] Use RENDER extension for complex operations done in software
ceisserer
parents:
diff changeset
   416
}