Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nx-libs
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
dimbor
nx-libs
Commits
0c29f81f
Commit
0c29f81f
authored
Apr 09, 2016
by
Mike Gabriel
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
hw/nxagent/NXpicture.c: Shrink file, drop duplicate code that can identically be…
hw/nxagent/NXpicture.c: Shrink file, drop duplicate code that can identically be found in render/picture.c.
parent
809fed64
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
155 additions
and
1793 deletions
+155
-1793
NXpicture.c
nx-X11/programs/Xserver/hw/nxagent/NXpicture.c
+142
-1791
Imakefile
nx-X11/programs/Xserver/render/Imakefile
+2
-2
picture.c
nx-X11/programs/Xserver/render/picture.c
+11
-0
No files found.
nx-X11/programs/Xserver/hw/nxagent/NXpicture.c
View file @
0c29f81f
...
...
@@ -40,23 +40,6 @@
* Author: Keith Packard, SuSE, Inc.
*/
#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#endif
#include "misc.h"
#include "scrnintstr.h"
#include "os.h"
#include "regionstr.h"
#include "validate.h"
#include "windowstr.h"
#include "input.h"
#include "resource.h"
#include "colormapst.h"
#include "cursorstr.h"
#include "dixstruct.h"
#include "gcstruct.h"
#include "servermd.h"
#include "NXpicturestr.h"
#include "Screen.h"
...
...
@@ -64,6 +47,23 @@
#include "Drawable.h"
#include "Render.h"
/* prototypes */
PictFormatPtr
PictureCreateDefaultFormats
(
ScreenPtr
pScreen
,
int
*
nformatp
);
PicturePtr
AllocatePicture
(
ScreenPtr
pScreen
);
PicturePtr
CreatePicture
(
Picture
pid
,
DrawablePtr
pDrawable
,
PictFormatPtr
pFormat
,
Mask
vmask
,
XID
*
vlist
,
ClientPtr
client
,
int
*
error
);
static
PicturePtr
createSourcePicture
(
void
);
int
FreePicture
(
void
*
value
,
XID
pid
);
#include "../../render/picture.c"
#define PANIC
#define WARNING
#undef TEST
...
...
@@ -73,183 +73,8 @@ void *nxagentVisualFromID(ScreenPtr pScreen, VisualID visual);
void
*
nxagentMatchingFormats
(
PictFormatPtr
pForm
);
int
PictureScreenPrivateIndex
=
-
1
;
int
PictureWindowPrivateIndex
;
int
PictureGeneration
;
RESTYPE
PictureType
;
RESTYPE
PictFormatType
;
RESTYPE
GlyphSetType
;
int
PictureCmapPolicy
=
PictureCmapPolicyDefault
;
typedef
struct
_formatInit
{
CARD32
format
;
CARD8
depth
;
}
FormatInitRec
,
*
FormatInitPtr
;
void
nxagentPictureCreateDefaultFormats
(
ScreenPtr
pScreen
,
FormatInitRec
*
formats
,
int
*
nformats
);
/* Picture Private machinery */
static
int
picturePrivateCount
;
void
ResetPicturePrivateIndex
(
void
)
{
picturePrivateCount
=
0
;
}
int
AllocatePicturePrivateIndex
(
void
)
{
return
picturePrivateCount
++
;
}
Bool
AllocatePicturePrivate
(
ScreenPtr
pScreen
,
int
index2
,
unsigned
int
amount
)
{
PictureScreenPtr
ps
=
GetPictureScreen
(
pScreen
);
unsigned
int
oldamount
;
/* Round up sizes for proper alignment */
amount
=
((
amount
+
(
sizeof
(
long
)
-
1
))
/
sizeof
(
long
))
*
sizeof
(
long
);
if
(
index2
>=
ps
->
PicturePrivateLen
)
{
unsigned
int
*
nsizes
;
nsizes
=
(
unsigned
int
*
)
xrealloc
(
ps
->
PicturePrivateSizes
,
(
index2
+
1
)
*
sizeof
(
unsigned
int
));
if
(
!
nsizes
)
return
FALSE
;
while
(
ps
->
PicturePrivateLen
<=
index2
)
{
nsizes
[
ps
->
PicturePrivateLen
++
]
=
0
;
ps
->
totalPictureSize
+=
sizeof
(
DevUnion
);
}
ps
->
PicturePrivateSizes
=
nsizes
;
}
oldamount
=
ps
->
PicturePrivateSizes
[
index2
];
if
(
amount
>
oldamount
)
{
ps
->
PicturePrivateSizes
[
index2
]
=
amount
;
ps
->
totalPictureSize
+=
(
amount
-
oldamount
);
}
return
TRUE
;
}
Bool
PictureDestroyWindow
(
WindowPtr
pWindow
)
{
ScreenPtr
pScreen
=
pWindow
->
drawable
.
pScreen
;
PicturePtr
pPicture
;
PictureScreenPtr
ps
=
GetPictureScreen
(
pScreen
);
Bool
ret
;
while
((
pPicture
=
GetPictureWindow
(
pWindow
)))
{
SetPictureWindow
(
pWindow
,
pPicture
->
pNext
);
if
(
pPicture
->
id
)
FreeResource
(
pPicture
->
id
,
PictureType
);
FreePicture
((
void
*
)
pPicture
,
pPicture
->
id
);
}
pScreen
->
DestroyWindow
=
ps
->
DestroyWindow
;
ret
=
(
*
pScreen
->
DestroyWindow
)
(
pWindow
);
ps
->
DestroyWindow
=
pScreen
->
DestroyWindow
;
pScreen
->
DestroyWindow
=
PictureDestroyWindow
;
return
ret
;
}
Bool
PictureCloseScreen
(
int
index
,
ScreenPtr
pScreen
)
{
PictureScreenPtr
ps
=
GetPictureScreen
(
pScreen
);
Bool
ret
;
int
n
;
pScreen
->
CloseScreen
=
ps
->
CloseScreen
;
ret
=
(
*
pScreen
->
CloseScreen
)
(
index
,
pScreen
);
PictureResetFilters
(
pScreen
);
for
(
n
=
0
;
n
<
ps
->
nformats
;
n
++
)
if
(
ps
->
formats
[
n
].
type
==
PictTypeIndexed
)
(
*
ps
->
CloseIndexed
)
(
pScreen
,
&
ps
->
formats
[
n
]);
SetPictureScreen
(
pScreen
,
0
);
if
(
ps
->
PicturePrivateSizes
)
xfree
(
ps
->
PicturePrivateSizes
);
xfree
(
ps
->
formats
);
xfree
(
ps
);
return
ret
;
}
void
PictureStoreColors
(
ColormapPtr
pColormap
,
int
ndef
,
xColorItem
*
pdef
)
{
ScreenPtr
pScreen
=
pColormap
->
pScreen
;
PictureScreenPtr
ps
=
GetPictureScreen
(
pScreen
);
pScreen
->
StoreColors
=
ps
->
StoreColors
;
(
*
pScreen
->
StoreColors
)
(
pColormap
,
ndef
,
pdef
);
ps
->
StoreColors
=
pScreen
->
StoreColors
;
pScreen
->
StoreColors
=
PictureStoreColors
;
if
(
pColormap
->
class
==
PseudoColor
||
pColormap
->
class
==
GrayScale
)
{
PictFormatPtr
format
=
ps
->
formats
;
int
nformats
=
ps
->
nformats
;
while
(
nformats
--
)
{
if
(
format
->
type
==
PictTypeIndexed
&&
format
->
index
.
pColormap
==
pColormap
)
{
(
*
ps
->
UpdateIndexed
)
(
pScreen
,
format
,
ndef
,
pdef
);
break
;
}
format
++
;
}
}
}
static
int
visualDepth
(
ScreenPtr
pScreen
,
VisualPtr
pVisual
)
{
int
d
,
v
;
DepthPtr
pDepth
;
for
(
d
=
0
;
d
<
pScreen
->
numDepths
;
d
++
)
{
pDepth
=
&
pScreen
->
allowedDepths
[
d
];
for
(
v
=
0
;
v
<
pDepth
->
numVids
;
v
++
)
if
(
pDepth
->
vids
[
v
]
==
pVisual
->
vid
)
return
pDepth
->
depth
;
}
return
0
;
}
static
int
addFormat
(
FormatInitRec
formats
[
256
],
int
nformat
,
CARD32
format
,
CARD8
depth
)
{
int
n
;
for
(
n
=
0
;
n
<
nformat
;
n
++
)
if
(
formats
[
n
].
format
==
format
&&
formats
[
n
].
depth
==
depth
)
return
nformat
;
formats
[
nformat
].
format
=
format
;
formats
[
nformat
].
depth
=
depth
;
#ifdef DEBUG
fprintf
(
stderr
,
"addFormat: Added format [%lu] depth [%d].
\n
"
,
format
,
depth
);
#endif
return
++
nformat
;
}
#define Mask(n) ((n) == 32 ? 0xffffffff : ((1 << (n))-1))
PictFormatPtr
PictureCreateDefaultFormats
(
ScreenPtr
pScreen
,
int
*
nformatp
)
{
...
...
@@ -258,164 +83,10 @@ PictureCreateDefaultFormats (ScreenPtr pScreen, int *nformatp)
FormatInitRec
formats
[
1024
];
CARD32
format
;
#ifndef NXAGENT_SERVER
CARD8
depth
;
VisualPtr
pVisual
;
int
v
;
int
bpp
;
int
type
;
int
r
,
g
,
b
;
int
d
;
DepthPtr
pDepth
;
#endif
nformats
=
0
;
#ifdef NXAGENT_SERVER
nxagentPictureCreateDefaultFormats
(
pScreen
,
formats
,
&
nformats
);
#else
/* formats required by protocol */
formats
[
nformats
].
format
=
PICT_a1
;
formats
[
nformats
].
depth
=
1
;
nformats
++
;
formats
[
nformats
].
format
=
PICT_a8
;
formats
[
nformats
].
depth
=
8
;
nformats
++
;
formats
[
nformats
].
format
=
PICT_a4
;
formats
[
nformats
].
depth
=
4
;
nformats
++
;
formats
[
nformats
].
format
=
PICT_a8r8g8b8
;
formats
[
nformats
].
depth
=
32
;
nformats
++
;
formats
[
nformats
].
format
=
PICT_x8r8g8b8
;
formats
[
nformats
].
depth
=
32
;
nformats
++
;
/* now look through the depths and visuals adding other formats */
for
(
v
=
0
;
v
<
pScreen
->
numVisuals
;
v
++
)
{
pVisual
=
&
pScreen
->
visuals
[
v
];
depth
=
visualDepth
(
pScreen
,
pVisual
);
if
(
!
depth
)
continue
;
bpp
=
BitsPerPixel
(
depth
);
switch
(
pVisual
->
class
)
{
case
DirectColor
:
case
TrueColor
:
r
=
Ones
(
pVisual
->
redMask
);
g
=
Ones
(
pVisual
->
greenMask
);
b
=
Ones
(
pVisual
->
blueMask
);
type
=
PICT_TYPE_OTHER
;
/*
* Current rendering code supports only two direct formats,
* fields must be packed together at the bottom of the pixel
* and must be either RGB or BGR
*/
if
(
pVisual
->
offsetBlue
==
0
&&
pVisual
->
offsetGreen
==
b
&&
pVisual
->
offsetRed
==
b
+
g
)
{
type
=
PICT_TYPE_ARGB
;
}
else
if
(
pVisual
->
offsetRed
==
0
&&
pVisual
->
offsetGreen
==
r
&&
pVisual
->
offsetBlue
==
r
+
g
)
{
type
=
PICT_TYPE_ABGR
;
}
if
(
type
!=
PICT_TYPE_OTHER
)
{
format
=
PICT_FORMAT
(
bpp
,
type
,
0
,
r
,
g
,
b
);
nformats
=
addFormat
(
formats
,
nformats
,
format
,
depth
);
}
break
;
case
StaticColor
:
case
PseudoColor
:
format
=
PICT_VISFORMAT
(
bpp
,
PICT_TYPE_COLOR
,
v
);
nformats
=
addFormat
(
formats
,
nformats
,
format
,
depth
);
break
;
case
StaticGray
:
case
GrayScale
:
format
=
PICT_VISFORMAT
(
bpp
,
PICT_TYPE_GRAY
,
v
);
nformats
=
addFormat
(
formats
,
nformats
,
format
,
depth
);
break
;
}
}
/*
* Walk supported depths and add useful Direct formats
*/
for
(
d
=
0
;
d
<
pScreen
->
numDepths
;
d
++
)
{
pDepth
=
&
pScreen
->
allowedDepths
[
d
];
bpp
=
BitsPerPixel
(
pDepth
->
depth
);
format
=
0
;
switch
(
bpp
)
{
case
16
:
/* depth 12 formats */
if
(
pDepth
->
depth
>=
12
)
{
nformats
=
addFormat
(
formats
,
nformats
,
PICT_x4r4g4b4
,
pDepth
->
depth
);
nformats
=
addFormat
(
formats
,
nformats
,
PICT_x4b4g4r4
,
pDepth
->
depth
);
}
/* depth 15 formats */
if
(
pDepth
->
depth
>=
15
)
{
nformats
=
addFormat
(
formats
,
nformats
,
PICT_x1r5g5b5
,
pDepth
->
depth
);
nformats
=
addFormat
(
formats
,
nformats
,
PICT_x1b5g5r5
,
pDepth
->
depth
);
}
/* depth 16 formats */
if
(
pDepth
->
depth
>=
16
)
{
nformats
=
addFormat
(
formats
,
nformats
,
PICT_a1r5g5b5
,
pDepth
->
depth
);
nformats
=
addFormat
(
formats
,
nformats
,
PICT_a1b5g5r5
,
pDepth
->
depth
);
nformats
=
addFormat
(
formats
,
nformats
,
PICT_r5g6b5
,
pDepth
->
depth
);
nformats
=
addFormat
(
formats
,
nformats
,
PICT_b5g6r5
,
pDepth
->
depth
);
nformats
=
addFormat
(
formats
,
nformats
,
PICT_a4r4g4b4
,
pDepth
->
depth
);
nformats
=
addFormat
(
formats
,
nformats
,
PICT_a4b4g4r4
,
pDepth
->
depth
);
}
break
;
case
24
:
if
(
pDepth
->
depth
>=
24
)
{
nformats
=
addFormat
(
formats
,
nformats
,
PICT_r8g8b8
,
pDepth
->
depth
);
nformats
=
addFormat
(
formats
,
nformats
,
PICT_b8g8r8
,
pDepth
->
depth
);
}
break
;
case
32
:
if
(
pDepth
->
depth
>=
24
)
{
nformats
=
addFormat
(
formats
,
nformats
,
PICT_x8r8g8b8
,
pDepth
->
depth
);
nformats
=
addFormat
(
formats
,
nformats
,
PICT_x8b8g8r8
,
pDepth
->
depth
);
}
break
;
}
}
#endif
pFormats
=
(
PictFormatPtr
)
xalloc
(
nformats
*
sizeof
(
PictFormatRec
));
if
(
!
pFormats
)
return
0
;
...
...
@@ -483,7 +154,6 @@ PictureCreateDefaultFormats (ScreenPtr pScreen, int *nformatp)
break
;
}
#ifdef NXAGENT_SERVER
if
(
nxagentMatchingFormats
(
&
pFormats
[
f
])
!=
NULL
)
{
#ifdef DEBUG
...
...
@@ -504,1239 +174,180 @@ PictureCreateDefaultFormats (ScreenPtr pScreen, int *nformatp)
pFormats
[
f
].
direct
.
blueMask
,
pFormats
[
f
].
direct
.
alpha
,
pFormats
[
f
].
direct
.
alphaMask
);
#endif
}
#endif
}
*
nformatp
=
nformats
;
return
pFormats
;
}
static
Visual
Ptr
PictureFindVisual
(
ScreenPtr
pScreen
,
VisualID
visual
)
Picture
Ptr
AllocatePicture
(
ScreenPtr
pScreen
)
{
PictureScreenPtr
ps
=
GetPictureScreen
(
pScreen
);
PicturePtr
pPicture
;
char
*
ptr
;
DevUnion
*
ppriv
;
unsigned
int
*
sizes
;
unsigned
int
size
;
int
i
;
VisualPtr
pVisual
;
for
(
i
=
0
,
pVisual
=
pScreen
->
visuals
;
i
<
pScreen
->
numVisuals
;
i
++
,
pVisual
++
)
{
if
(
pVisual
->
vid
==
visual
)
return
pVisual
;
}
return
0
;
}
Bool
PictureInitIndexedFormats
(
ScreenPtr
pScreen
)
{
PictureScreenPtr
ps
=
GetPictureScreenIfSet
(
pScreen
);
PictFormatPtr
format
;
int
nformat
;
if
(
!
ps
)
return
FALSE
;
format
=
ps
->
formats
;
nformat
=
ps
->
nformats
;
while
(
nformat
--
)
{
if
(
format
->
type
==
PictTypeIndexed
&&
!
format
->
index
.
pColormap
)
{
if
(
format
->
index
.
vid
==
pScreen
->
rootVisual
)
format
->
index
.
pColormap
=
(
ColormapPtr
)
LookupIDByType
(
pScreen
->
defColormap
,
RT_COLORMAP
);
else
pPicture
=
(
PicturePtr
)
xalloc
(
ps
->
totalPictureSize
);
if
(
!
pPicture
)
return
0
;
ppriv
=
(
DevUnion
*
)(
pPicture
+
1
);
pPicture
->
devPrivates
=
ppriv
;
sizes
=
ps
->
PicturePrivateSizes
;
ptr
=
(
char
*
)(
ppriv
+
ps
->
PicturePrivateLen
);
for
(
i
=
ps
->
PicturePrivateLen
;
--
i
>=
0
;
ppriv
++
,
sizes
++
)
{
VisualPtr
pVisual
;
pVisual
=
PictureFindVisual
(
pScreen
,
format
->
index
.
vid
);
if
(
CreateColormap
(
FakeClientID
(
0
),
pScreen
,
pVisual
,
&
format
->
index
.
pColormap
,
AllocNone
,
0
)
!=
Success
)
if
(
(
size
=
*
sizes
)
)
{
return
FALSE
;
}
}
if
(
!
(
*
ps
->
InitIndexed
)
(
pScreen
,
format
))
return
FALSE
;
ppriv
->
ptr
=
(
void
*
)
ptr
;
ptr
+=
size
;
}
format
++
;
else
ppriv
->
ptr
=
(
void
*
)
NULL
;
}
return
TRUE
;
nxagentPicturePriv
(
pPicture
)
->
picture
=
0
;
return
pPicture
;
}
Bool
PictureFinishInit
(
void
)
PicturePtr
CreatePicture
(
Picture
pid
,
DrawablePtr
pDrawable
,
PictFormatPtr
pFormat
,
Mask
vmask
,
XID
*
vlist
,
ClientPtr
client
,
int
*
error
)
{
int
s
;
PicturePtr
pPicture
;
PictureScreenPtr
ps
=
GetPictureScreen
(
pDrawable
->
pScreen
);
for
(
s
=
0
;
s
<
screenInfo
.
numScreens
;
s
++
)
pPicture
=
AllocatePicture
(
pDrawable
->
pScreen
);
if
(
!
pPicture
)
{
if
(
!
PictureInitIndexedFormats
(
screenInfo
.
screens
[
s
]))
return
FALSE
;
(
void
)
AnimCurInit
(
screenInfo
.
screens
[
s
]);
*
error
=
BadAlloc
;
return
0
;
}
return
TRUE
;
}
pPicture
->
id
=
pid
;
pPicture
->
pDrawable
=
pDrawable
;
pPicture
->
pFormat
=
pFormat
;
pPicture
->
format
=
pFormat
->
format
|
(
pDrawable
->
bitsPerPixel
<<
24
);
if
(
pDrawable
->
type
==
DRAWABLE_PIXMAP
)
{
/*
* Let picture always point to the virtual pixmap.
* For sure this is not the best way to deal with
* the virtual frame-buffer.
*/
pPicture
->
pDrawable
=
nxagentVirtualDrawable
(
pDrawable
);
Bool
PictureSetSubpixelOrder
(
ScreenPtr
pScreen
,
int
subpixel
)
{
PictureScreenPtr
ps
=
GetPictureScreenIfSet
(
pScreen
);
++
((
PixmapPtr
)
pDrawable
)
->
refcnt
;
pPicture
->
pNext
=
0
;
}
else
{
pPicture
->
pNext
=
GetPictureWindow
(((
WindowPtr
)
pDrawable
));
SetPictureWindow
(((
WindowPtr
)
pDrawable
),
pPicture
);
}
if
(
!
ps
)
return
FALSE
;
ps
->
subpixel
=
subpixel
;
return
TRUE
;
SetPictureToDefaults
(
pPicture
);
if
(
vmask
)
*
error
=
ChangePicture
(
pPicture
,
vmask
,
vlist
,
0
,
client
);
else
*
error
=
Success
;
if
(
*
error
==
Success
)
*
error
=
(
*
ps
->
CreatePicture
)
(
pPicture
);
if
(
*
error
!=
Success
)
{
FreePicture
(
pPicture
,
(
XID
)
0
);
pPicture
=
0
;
}
return
pPicture
;
}
int
PictureGetSubpixelOrder
(
ScreenPtr
pScreen
)
PicturePtr
CreateSolidPicture
(
Picture
pid
,
xRenderColor
*
color
,
int
*
error
)
{
PictureScreenPtr
ps
=
GetPictureScreenIfSet
(
pScreen
);
if
(
!
ps
)
return
SubPixelUnknown
;
return
ps
->
subpixel
;
}
PictFormatPtr
PictureMatchVisual
(
ScreenPtr
pScreen
,
int
depth
,
VisualPtr
pVisual
)
{
PictureScreenPtr
ps
=
GetPictureScreenIfSet
(
pScreen
);
PictFormatPtr
format
;
int
nformat
;
int
type
;
if
(
!
ps
)
return
0
;
format
=
ps
->
formats
;
nformat
=
ps
->
nformats
;
switch
(
pVisual
->
class
)
{
case
StaticGray
:
case
GrayScale
:
case
StaticColor
:
case
PseudoColor
:
type
=
PictTypeIndexed
;
break
;
case
TrueColor
:
case
DirectColor
:
type
=
PictTypeDirect
;
break
;
default:
return
0
;
}
while
(
nformat
--
)
{
if
(
format
->
depth
==
depth
&&
format
->
type
==
type
)
{
if
(
type
==
PictTypeIndexed
)
{
if
(
format
->
index
.
vid
==
pVisual
->
vid
)
return
format
;
}
else
{
if
(
format
->
direct
.
redMask
<<
format
->
direct
.
red
==
pVisual
->
redMask
&&
format
->
direct
.
greenMask
<<
format
->
direct
.
green
==
pVisual
->
greenMask
&&
format
->
direct
.
blueMask
<<
format
->
direct
.
blue
==
pVisual
->
blueMask
)
{
return
format
;
}
}
}
format
++
;
}
return
0
;
}
PictFormatPtr
PictureMatchFormat
(
ScreenPtr
pScreen
,
int
depth
,
CARD32
f
)
{
PictureScreenPtr
ps
=
GetPictureScreenIfSet
(
pScreen
);
PictFormatPtr
format
;
int
nformat
;
if
(
!
ps
)
return
0
;
format
=
ps
->
formats
;
nformat
=
ps
->
nformats
;
while
(
nformat
--
)
{
if
(
format
->
depth
==
depth
&&
format
->
format
==
(
f
&
0xffffff
))
return
format
;
format
++
;
}
return
0
;
}
int
PictureParseCmapPolicy
(
const
char
*
name
)
{
if
(
strcmp
(
name
,
"default"
)
==
0
)
return
PictureCmapPolicyDefault
;
else
if
(
strcmp
(
name
,
"mono"
)
==
0
)
return
PictureCmapPolicyMono
;
else
if
(
strcmp
(
name
,
"gray"
)
==
0
)
return
PictureCmapPolicyGray
;
else
if
(
strcmp
(
name
,
"color"
)
==
0
)
return
PictureCmapPolicyColor
;
else
if
(
strcmp
(
name
,
"all"
)
==
0
)
return
PictureCmapPolicyAll
;
else
return
PictureCmapPolicyInvalid
;
}
Bool
PictureInit
(
ScreenPtr
pScreen
,
PictFormatPtr
formats
,
int
nformats
)
{
PictureScreenPtr
ps
;
int
n
;
CARD32
type
,
a
,
r
,
g
,
b
;
if
(
PictureGeneration
!=
serverGeneration
)
{
PictureType
=
CreateNewResourceType
(
FreePicture
);
if
(
!
PictureType
)
return
FALSE
;
PictFormatType
=
CreateNewResourceType
(
FreePictFormat
);
if
(
!
PictFormatType
)
return
FALSE
;
GlyphSetType
=
CreateNewResourceType
(
FreeGlyphSet
);
if
(
!
GlyphSetType
)
return
FALSE
;
PictureScreenPrivateIndex
=
AllocateScreenPrivateIndex
();
if
(
PictureScreenPrivateIndex
<
0
)
return
FALSE
;
PictureWindowPrivateIndex
=
AllocateWindowPrivateIndex
();
PictureGeneration
=
serverGeneration
;
#ifdef XResExtension
RegisterResourceName
(
PictureType
,
"PICTURE"
);
RegisterResourceName
(
PictFormatType
,
"PICTFORMAT"
);
RegisterResourceName
(
GlyphSetType
,
"GLYPHSET"
);
#endif
}
if
(
!
AllocateWindowPrivate
(
pScreen
,
PictureWindowPrivateIndex
,
0
))
return
FALSE
;
if
(
!
formats
)
{
formats
=
PictureCreateDefaultFormats
(
pScreen
,
&
nformats
);
if
(
!
formats
)
return
FALSE
;
}
for
(
n
=
0
;
n
<
nformats
;
n
++
)
{
if
(
!
AddResource
(
formats
[
n
].
id
,
PictFormatType
,
(
void
*
)
(
formats
+
n
)))
{
xfree
(
formats
);
return
FALSE
;
}
if
(
formats
[
n
].
type
==
PictTypeIndexed
)
{
VisualPtr
pVisual
=
PictureFindVisual
(
pScreen
,
formats
[
n
].
index
.
vid
);
if
((
pVisual
->
class
|
DynamicClass
)
==
PseudoColor
)
type
=
PICT_TYPE_COLOR
;
else
type
=
PICT_TYPE_GRAY
;
a
=
r
=
g
=
b
=
0
;
}
else
{
if
((
formats
[
n
].
direct
.
redMask
|
formats
[
n
].
direct
.
blueMask
|
formats
[
n
].
direct
.
greenMask
)
==
0
)
type
=
PICT_TYPE_A
;
else
if
(
formats
[
n
].
direct
.
red
>
formats
[
n
].
direct
.
blue
)
type
=
PICT_TYPE_ARGB
;
else
type
=
PICT_TYPE_ABGR
;
a
=
Ones
(
formats
[
n
].
direct
.
alphaMask
);
r
=
Ones
(
formats
[
n
].
direct
.
redMask
);
g
=
Ones
(
formats
[
n
].
direct
.
greenMask
);
b
=
Ones
(
formats
[
n
].
direct
.
blueMask
);
}
formats
[
n
].
format
=
PICT_FORMAT
(
0
,
type
,
a
,
r
,
g
,
b
);
}
ps
=
(
PictureScreenPtr
)
xalloc
(
sizeof
(
PictureScreenRec
));
if
(
!
ps
)
{
xfree
(
formats
);
return
FALSE
;
}
SetPictureScreen
(
pScreen
,
ps
);
if
(
!
GlyphInit
(
pScreen
))
{
SetPictureScreen
(
pScreen
,
0
);
xfree
(
formats
);
xfree
(
ps
);
return
FALSE
;
}
ps
->
totalPictureSize
=
sizeof
(
PictureRec
);
ps
->
PicturePrivateSizes
=
0
;
ps
->
PicturePrivateLen
=
0
;
ps
->
formats
=
formats
;
ps
->
fallback
=
formats
;
ps
->
nformats
=
nformats
;
ps
->
filters
=
0
;
ps
->
nfilters
=
0
;
ps
->
filterAliases
=
0
;
ps
->
nfilterAliases
=
0
;
ps
->
subpixel
=
SubPixelUnknown
;
ps
->
CloseScreen
=
pScreen
->
CloseScreen
;
ps
->
DestroyWindow
=
pScreen
->
DestroyWindow
;
ps
->
StoreColors
=
pScreen
->
StoreColors
;
pScreen
->
DestroyWindow
=
PictureDestroyWindow
;
pScreen
->
CloseScreen
=
PictureCloseScreen
;
pScreen
->
StoreColors
=
PictureStoreColors
;
if
(
!
PictureSetDefaultFilters
(
pScreen
))
{
PictureResetFilters
(
pScreen
);
SetPictureScreen
(
pScreen
,
0
);
xfree
(
formats
);
xfree
(
ps
);
return
FALSE
;
}
return
TRUE
;
}
void
SetPictureToDefaults
(
PicturePtr
pPicture
)
{
pPicture
->
refcnt
=
1
;
pPicture
->
repeat
=
0
;
pPicture
->
graphicsExposures
=
FALSE
;
pPicture
->
subWindowMode
=
ClipByChildren
;
pPicture
->
polyEdge
=
PolyEdgeSharp
;
pPicture
->
polyMode
=
PolyModePrecise
;
pPicture
->
freeCompClip
=
FALSE
;
pPicture
->
clientClipType
=
CT_NONE
;
pPicture
->
componentAlpha
=
FALSE
;
pPicture
->
repeatType
=
RepeatNone
;
pPicture
->
alphaMap
=
0
;
pPicture
->
alphaOrigin
.
x
=
0
;
pPicture
->
alphaOrigin
.
y
=
0
;
pPicture
->
clipOrigin
.
x
=
0
;
pPicture
->
clipOrigin
.
y
=
0
;
pPicture
->
clientClip
=
0
;
pPicture
->
transform
=
0
;
pPicture
->
dither
=
None
;
pPicture
->
filter
=
PictureGetFilterId
(
FilterNearest
,
-
1
,
TRUE
);
pPicture
->
filter_params
=
0
;
pPicture
->
filter_nparams
=
0
;
pPicture
->
serialNumber
=
GC_CHANGE_SERIAL_BIT
;
pPicture
->
stateChanges
=
(
1
<<
(
CPLastBit
+
1
))
-
1
;
pPicture
->
pSourcePict
=
0
;
}
PicturePtr
AllocatePicture
(
ScreenPtr
pScreen
)
{
PictureScreenPtr
ps
=
GetPictureScreen
(
pScreen
);
PicturePtr
pPicture
;
char
*
ptr
;
DevUnion
*
ppriv
;
unsigned
int
*
sizes
;
unsigned
int
size
;
int
i
;
pPicture
=
(
PicturePtr
)
xalloc
(
ps
->
totalPictureSize
);
if
(
!
pPicture
)
return
0
;
ppriv
=
(
DevUnion
*
)(
pPicture
+
1
);
pPicture
->
devPrivates
=
ppriv
;
sizes
=
ps
->
PicturePrivateSizes
;
ptr
=
(
char
*
)(
ppriv
+
ps
->
PicturePrivateLen
);
for
(
i
=
ps
->
PicturePrivateLen
;
--
i
>=
0
;
ppriv
++
,
sizes
++
)
{
if
(
(
size
=
*
sizes
)
)
{
ppriv
->
ptr
=
(
void
*
)
ptr
;
ptr
+=
size
;
}
else
ppriv
->
ptr
=
(
void
*
)
NULL
;
}
nxagentPicturePriv
(
pPicture
)
->
picture
=
0
;
return
pPicture
;
}
/*
* Let picture always point to the virtual pixmap.
* For sure this is not the best way to deal with
* the virtual frame-buffer.
*/
#define NXAGENT_PICTURE_ALWAYS_POINTS_TO_VIRTUAL
PicturePtr
CreatePicture
(
Picture
pid
,
DrawablePtr
pDrawable
,
PictFormatPtr
pFormat
,
Mask
vmask
,
XID
*
vlist
,
ClientPtr
client
,
int
*
error
)
{
PicturePtr
pPicture
;
PictureScreenPtr
ps
=
GetPictureScreen
(
pDrawable
->
pScreen
);
pPicture
=
AllocatePicture
(
pDrawable
->
pScreen
);
if
(
!
pPicture
)
{
*
error
=
BadAlloc
;
return
0
;
}
pPicture
->
id
=
pid
;
pPicture
->
pDrawable
=
pDrawable
;
pPicture
->
pFormat
=
pFormat
;
pPicture
->
format
=
pFormat
->
format
|
(
pDrawable
->
bitsPerPixel
<<
24
);
if
(
pDrawable
->
type
==
DRAWABLE_PIXMAP
)
{
#ifdef NXAGENT_PICTURE_ALWAYS_POINTS_TO_VIRTUAL
pPicture
->
pDrawable
=
nxagentVirtualDrawable
(
pDrawable
);
#endif
++
((
PixmapPtr
)
pDrawable
)
->
refcnt
;
pPicture
->
pNext
=
0
;
}
else
{
pPicture
->
pNext
=
GetPictureWindow
(((
WindowPtr
)
pDrawable
));
SetPictureWindow
(((
WindowPtr
)
pDrawable
),
pPicture
);
}
SetPictureToDefaults
(
pPicture
);
if
(
vmask
)
*
error
=
ChangePicture
(
pPicture
,
vmask
,
vlist
,
0
,
client
);
else
*
error
=
Success
;
if
(
*
error
==
Success
)
*
error
=
(
*
ps
->
CreatePicture
)
(
pPicture
);
if
(
*
error
!=
Success
)
{
FreePicture
(
pPicture
,
(
XID
)
0
);
pPicture
=
0
;
}
return
pPicture
;
}
static
CARD32
xRenderColorToCard32
(
xRenderColor
c
)
{
return
(
c
.
alpha
>>
8
<<
24
)
|
(
c
.
red
>>
8
<<
16
)
|
(
c
.
green
&
0xff00
)
|
(
c
.
blue
>>
8
);
}
static
unsigned
int
premultiply
(
unsigned
int
x
)
{
unsigned
int
a
=
x
>>
24
;
unsigned
int
t
=
(
x
&
0xff00ff
)
*
a
;
t
=
(
t
+
((
t
>>
8
)
&
0xff00ff
)
+
0x800080
)
>>
8
;
t
&=
0xff00ff
;
x
=
((
x
>>
8
)
&
0xff
)
*
a
;
x
=
(
x
+
((
x
>>
8
)
&
0xff
)
+
0x80
);
x
&=
0xff00
;
x
|=
t
|
(
a
<<
24
);
return
x
;
}
static
unsigned
int
INTERPOLATE_PIXEL_256
(
unsigned
int
x
,
unsigned
int
a
,
unsigned
int
y
,
unsigned
int
b
)
{
CARD32
t
=
(
x
&
0xff00ff
)
*
a
+
(
y
&
0xff00ff
)
*
b
;
t
>>=
8
;
t
&=
0xff00ff
;
x
=
((
x
>>
8
)
&
0xff00ff
)
*
a
+
((
y
>>
8
)
&
0xff00ff
)
*
b
;
x
&=
0xff00ff00
;
x
|=
t
;
return
x
;
}
static
void
initGradientColorTable
(
SourcePictPtr
pGradient
,
int
*
error
)
{
int
begin_pos
,
end_pos
;
xFixed
incr
,
dpos
;
int
pos
,
current_stop
;
PictGradientStopPtr
stops
=
pGradient
->
linear
.
stops
;
int
nstops
=
pGradient
->
linear
.
nstops
;
/* The position where the gradient begins and ends */
begin_pos
=
(
stops
[
0
].
x
*
PICT_GRADIENT_STOPTABLE_SIZE
)
>>
16
;
end_pos
=
(
stops
[
nstops
-
1
].
x
*
PICT_GRADIENT_STOPTABLE_SIZE
)
>>
16
;
pos
=
0
;
/* The position in the color table. */
/* Up to first point */
while
(
pos
<=
begin_pos
)
{
pGradient
->
linear
.
colorTable
[
pos
]
=
xRenderColorToCard32
(
stops
[
0
].
color
);
++
pos
;
}
incr
=
(
1
<<
16
)
/
PICT_GRADIENT_STOPTABLE_SIZE
;
/* the double increment. */
dpos
=
incr
*
pos
;
/* The position in terms of 0-1. */
current_stop
=
0
;
/* We always interpolate between current and current + 1. */
/* Gradient area */
while
(
pos
<
end_pos
)
{
unsigned
int
current_color
=
xRenderColorToCard32
(
stops
[
current_stop
].
color
);
unsigned
int
next_color
=
xRenderColorToCard32
(
stops
[
current_stop
+
1
].
color
);
int
dist
=
(
int
)(
256
*
(
dpos
-
stops
[
current_stop
].
x
)
/
(
stops
[
current_stop
+
1
].
x
-
stops
[
current_stop
].
x
));
int
idist
=
256
-
dist
;
pGradient
->
linear
.
colorTable
[
pos
]
=
premultiply
(
INTERPOLATE_PIXEL_256
(
current_color
,
idist
,
next_color
,
dist
));
++
pos
;
dpos
+=
incr
;
if
(
dpos
>
stops
[
current_stop
+
1
].
x
)
++
current_stop
;
}
/* After last point */
while
(
pos
<
PICT_GRADIENT_STOPTABLE_SIZE
)
{
pGradient
->
linear
.
colorTable
[
pos
]
=
xRenderColorToCard32
(
stops
[
nstops
-
1
].
color
);
++
pos
;
}
}
static
void
initGradient
(
SourcePictPtr
pGradient
,
int
stopCount
,
xFixed
*
stopPoints
,
xRenderColor
*
stopColors
,
int
*
error
)
{
int
i
;
xFixed
dpos
;
if
(
stopCount
<=
0
)
{
*
error
=
BadValue
;
return
;
}
dpos
=
-
1
;
for
(
i
=
0
;
i
<
stopCount
;
++
i
)
{
if
(
stopPoints
[
i
]
<=
dpos
||
stopPoints
[
i
]
>
(
1
<<
16
))
{
*
error
=
BadValue
;
return
;
}
dpos
=
stopPoints
[
i
];
}
pGradient
->
linear
.
stops
=
xalloc
(
stopCount
*
sizeof
(
PictGradientStop
));
if
(
!
pGradient
->
linear
.
stops
)
{
*
error
=
BadAlloc
;
return
;
}
pGradient
->
linear
.
nstops
=
stopCount
;
for
(
i
=
0
;
i
<
stopCount
;
++
i
)
{
pGradient
->
linear
.
stops
[
i
].
x
=
stopPoints
[
i
];
pGradient
->
linear
.
stops
[
i
].
color
=
stopColors
[
i
];
}
initGradientColorTable
(
pGradient
,
error
);
}
static
PicturePtr
createSourcePicture
(
void
)
{
PicturePtr
pPicture
;
extern
int
nxagentPicturePrivateIndex
;
unsigned
int
totalPictureSize
;
DevUnion
*
ppriv
;
char
*
privPictureRecAddr
;
int
i
;
/*
* Compute size of entire PictureRect, plus privates.
*/
totalPictureSize
=
sizeof
(
PictureRec
)
+
picturePrivateCount
*
sizeof
(
DevUnion
)
+
sizeof
(
nxagentPrivPictureRec
);
pPicture
=
(
PicturePtr
)
xalloc
(
totalPictureSize
);
if
(
pPicture
!=
NULL
)
{
ppriv
=
(
DevUnion
*
)
(
pPicture
+
1
);
for
(
i
=
0
;
i
<
picturePrivateCount
;
++
i
)
{
/*
* Other privates are inaccessible.
*/
ppriv
[
i
].
ptr
=
NULL
;
}
privPictureRecAddr
=
(
char
*
)
&
ppriv
[
picturePrivateCount
];
ppriv
[
nxagentPicturePrivateIndex
].
ptr
=
(
void
*
)
privPictureRecAddr
;
pPicture
->
devPrivates
=
ppriv
;
nxagentPicturePriv
(
pPicture
)
->
picture
=
0
;
}
pPicture
->
pDrawable
=
0
;
pPicture
->
pFormat
=
0
;
pPicture
->
pNext
=
0
;
SetPictureToDefaults
(
pPicture
);
return
pPicture
;
}
PicturePtr
CreateSolidPicture
(
Picture
pid
,
xRenderColor
*
color
,
int
*
error
)
{
PicturePtr
pPicture
;
pPicture
=
createSourcePicture
();
if
(
!
pPicture
)
{
*
error
=
BadAlloc
;
return
0
;
}
pPicture
->
id
=
pid
;
pPicture
->
pSourcePict
=
(
SourcePictPtr
)
xalloc
(
sizeof
(
PictSolidFill
));
if
(
!
pPicture
->
pSourcePict
)
{
*
error
=
BadAlloc
;
xfree
(
pPicture
);
return
0
;
}
pPicture
->
pSourcePict
->
type
=
SourcePictTypeSolidFill
;
pPicture
->
pSourcePict
->
solidFill
.
color
=
xRenderColorToCard32
(
*
color
);
pPicture
->
pSourcePict
->
solidFill
.
fullColor
.
alpha
=
color
->
alpha
;
pPicture
->
pSourcePict
->
solidFill
.
fullColor
.
red
=
color
->
red
;
pPicture
->
pSourcePict
->
solidFill
.
fullColor
.
green
=
color
->
green
;
pPicture
->
pSourcePict
->
solidFill
.
fullColor
.
blue
=
color
->
blue
;
return
pPicture
;
}
PicturePtr
CreateLinearGradientPicture
(
Picture
pid
,
xPointFixed
*
p1
,
xPointFixed
*
p2
,
int
nStops
,
xFixed
*
stops
,
xRenderColor
*
colors
,
int
*
error
)
{
PicturePtr
pPicture
;
if
(
nStops
<
2
)
{
*
error
=
BadValue
;
return
0
;
}
pPicture
=
createSourcePicture
();
if
(
!
pPicture
)
{
*
error
=
BadAlloc
;
return
0
;
}
if
(
p1
->
x
==
p2
->
x
&&
p1
->
y
==
p2
->
y
)
{
*
error
=
BadValue
;
return
0
;
}
pPicture
->
id
=
pid
;
pPicture
->
pSourcePict
=
(
SourcePictPtr
)
xalloc
(
sizeof
(
PictLinearGradient
));
if
(
!
pPicture
->
pSourcePict
)
{
*
error
=
BadAlloc
;
xfree
(
pPicture
);
return
0
;
}
pPicture
->
pSourcePict
->
linear
.
type
=
SourcePictTypeLinear
;
pPicture
->
pSourcePict
->
linear
.
p1
=
*
p1
;
pPicture
->
pSourcePict
->
linear
.
p2
=
*
p2
;
initGradient
(
pPicture
->
pSourcePict
,
nStops
,
stops
,
colors
,
error
);
if
(
*
error
)
{
xfree
(
pPicture
);
return
0
;
}
return
pPicture
;
}
#define FixedToDouble(x) ((x)/65536.)
PicturePtr
CreateRadialGradientPicture
(
Picture
pid
,
xPointFixed
*
inner
,
xPointFixed
*
outer
,
xFixed
innerRadius
,
xFixed
outerRadius
,
int
nStops
,
xFixed
*
stops
,
xRenderColor
*
colors
,
int
*
error
)
{
PicturePtr
pPicture
;
PictRadialGradient
*
radial
;
if
(
nStops
<
2
)
{
*
error
=
BadValue
;
return
0
;
}
pPicture
=
createSourcePicture
();
if
(
!
pPicture
)
{
*
error
=
BadAlloc
;
return
0
;
}
{
double
dx
=
(
double
)(
inner
->
x
-
outer
->
x
);
double
dy
=
(
double
)(
inner
->
y
-
outer
->
y
);
if
(
sqrt
(
dx
*
dx
+
dy
*
dy
)
+
(
double
)(
innerRadius
)
>
(
double
)(
outerRadius
))
{
*
error
=
BadValue
;
return
0
;
}
}
pPicture
->
id
=
pid
;
pPicture
->
pSourcePict
=
(
SourcePictPtr
)
xalloc
(
sizeof
(
PictRadialGradient
));
if
(
!
pPicture
->
pSourcePict
)
{
*
error
=
BadAlloc
;
xfree
(
pPicture
);
return
0
;
}
radial
=
&
pPicture
->
pSourcePict
->
radial
;
radial
->
type
=
SourcePictTypeRadial
;
{
double
x
=
(
double
)
innerRadius
/
(
double
)
outerRadius
;
radial
->
dx
=
(
outer
->
x
-
inner
->
x
);
radial
->
dy
=
(
outer
->
y
-
inner
->
y
);
radial
->
fx
=
(
inner
->
x
)
-
x
*
radial
->
dx
;
radial
->
fy
=
(
inner
->
y
)
-
x
*
radial
->
dy
;
radial
->
m
=
1
.
/
(
1
+
x
);
radial
->
b
=
-
x
*
radial
->
m
;
radial
->
dx
/=
65536
.;
radial
->
dy
/=
65536
.;
radial
->
fx
/=
65536
.;
radial
->
fy
/=
65536
.;
x
=
outerRadius
/
65536
.;
radial
->
a
=
x
*
x
-
radial
->
dx
*
radial
->
dx
-
radial
->
dy
*
radial
->
dy
;
}
initGradient
(
pPicture
->
pSourcePict
,
nStops
,
stops
,
colors
,
error
);
if
(
*
error
)
{
xfree
(
pPicture
);
return
0
;
}
return
pPicture
;
}
PicturePtr
CreateConicalGradientPicture
(
Picture
pid
,
xPointFixed
*
center
,
xFixed
angle
,
int
nStops
,
xFixed
*
stops
,
xRenderColor
*
colors
,
int
*
error
)
{
PicturePtr
pPicture
;
if
(
nStops
<
2
)
{
*
error
=
BadValue
;
return
0
;
}
pPicture
=
createSourcePicture
();
if
(
!
pPicture
)
{
*
error
=
BadAlloc
;
return
0
;
}
pPicture
->
id
=
pid
;
pPicture
->
pSourcePict
=
(
SourcePictPtr
)
xalloc
(
sizeof
(
PictConicalGradient
));
if
(
!
pPicture
->
pSourcePict
)
{
*
error
=
BadAlloc
;
xfree
(
pPicture
);
return
0
;
}
pPicture
->
pSourcePict
->
conical
.
type
=
SourcePictTypeConical
;
pPicture
->
pSourcePict
->
conical
.
center
=
*
center
;
pPicture
->
pSourcePict
->
conical
.
angle
=
angle
;
initGradient
(
pPicture
->
pSourcePict
,
nStops
,
stops
,
colors
,
error
);
if
(
*
error
)
{
xfree
(
pPicture
);
return
0
;
}
return
pPicture
;
}
#define NEXT_VAL(_type) (vlist ? (_type) *vlist++ : (_type) ulist++->val)
#define NEXT_PTR(_type) ((_type) ulist++->ptr)
int
ChangePicture
(
PicturePtr
pPicture
,
Mask
vmask
,
XID
*
vlist
,
DevUnion
*
ulist
,
ClientPtr
client
)
{
ScreenPtr
pScreen
=
pPicture
->
pDrawable
?
pPicture
->
pDrawable
->
pScreen
:
0
;
PictureScreenPtr
ps
=
pScreen
?
GetPictureScreen
(
pScreen
)
:
0
;
BITS32
index2
;
int
error
=
0
;
BITS32
maskQ
;
pPicture
->
serialNumber
|=
GC_CHANGE_SERIAL_BIT
;
maskQ
=
vmask
;
while
(
vmask
&&
!
error
)
{
index2
=
(
BITS32
)
lowbit
(
vmask
);
vmask
&=
~
index2
;
pPicture
->
stateChanges
|=
index2
;
switch
(
index2
)
{
case
CPRepeat
:
{
unsigned
int
newr
;
newr
=
NEXT_VAL
(
unsigned
int
);
if
(
newr
<=
RepeatReflect
)
{
pPicture
->
repeat
=
(
newr
!=
RepeatNone
);
pPicture
->
repeatType
=
newr
;
}
else
{
client
->
errorValue
=
newr
;
error
=
BadValue
;
}
}
break
;
case
CPAlphaMap
:
{
PicturePtr
pAlpha
;
if
(
vlist
)
{
Picture
pid
=
NEXT_VAL
(
Picture
);
if
(
pid
==
None
)
pAlpha
=
0
;
else
{
pAlpha
=
(
PicturePtr
)
SecurityLookupIDByType
(
client
,
pid
,
PictureType
,
SecurityWriteAccess
|
SecurityReadAccess
);
if
(
!
pAlpha
)
{
client
->
errorValue
=
pid
;
error
=
BadPixmap
;
break
;
}
if
(
pAlpha
->
pDrawable
->
type
!=
DRAWABLE_PIXMAP
)
{
client
->
errorValue
=
pid
;
error
=
BadMatch
;
break
;
}
}
}
else
pAlpha
=
NEXT_PTR
(
PicturePtr
);
if
(
!
error
)
{
if
(
pAlpha
&&
pAlpha
->
pDrawable
->
type
==
DRAWABLE_PIXMAP
)
pAlpha
->
refcnt
++
;
if
(
pPicture
->
alphaMap
)
FreePicture
((
void
*
)
pPicture
->
alphaMap
,
(
XID
)
0
);
pPicture
->
alphaMap
=
pAlpha
;
}
}
break
;
case
CPAlphaXOrigin
:
pPicture
->
alphaOrigin
.
x
=
NEXT_VAL
(
INT16
);
break
;
case
CPAlphaYOrigin
:
pPicture
->
alphaOrigin
.
y
=
NEXT_VAL
(
INT16
);
break
;
case
CPClipXOrigin
:
pPicture
->
clipOrigin
.
x
=
NEXT_VAL
(
INT16
);
break
;
case
CPClipYOrigin
:
pPicture
->
clipOrigin
.
y
=
NEXT_VAL
(
INT16
);
break
;
case
CPClipMask
:
{
Pixmap
pid
;
PixmapPtr
pPixmap
;
int
clipType
;
if
(
!
pScreen
)
return
BadDrawable
;
if
(
vlist
)
{
pid
=
NEXT_VAL
(
Pixmap
);
if
(
pid
==
None
)
{
clipType
=
CT_NONE
;
pPixmap
=
NullPixmap
;
}
else
{
clipType
=
CT_PIXMAP
;
pPixmap
=
(
PixmapPtr
)
SecurityLookupIDByType
(
client
,
pid
,
RT_PIXMAP
,
SecurityReadAccess
);
if
(
!
pPixmap
)
{
client
->
errorValue
=
pid
;
error
=
BadPixmap
;
break
;
}
}
}
else
{
pPixmap
=
NEXT_PTR
(
PixmapPtr
);
if
(
pPixmap
)
clipType
=
CT_PIXMAP
;
else
clipType
=
CT_NONE
;
}
if
(
pPixmap
)
{
if
((
pPixmap
->
drawable
.
depth
!=
1
)
||
(
pPixmap
->
drawable
.
pScreen
!=
pScreen
))
{
error
=
BadMatch
;
break
;
}
else
{
clipType
=
CT_PIXMAP
;
pPixmap
->
refcnt
++
;
}
}
#ifdef DEBUG
fprintf
(
stderr
,
"ChangePicture: Going to call ChangePictureClip with clipType [%d] pPixmap [%p].
\n
"
,
clipType
,
(
void
*
)
pPixmap
);
#endif
error
=
(
*
ps
->
ChangePictureClip
)(
pPicture
,
clipType
,
(
void
*
)
pPixmap
,
0
);
break
;
}
case
CPGraphicsExposure
:
{
unsigned
int
newe
;
newe
=
NEXT_VAL
(
unsigned
int
);
if
(
newe
<=
xTrue
)
pPicture
->
graphicsExposures
=
newe
;
else
{
client
->
errorValue
=
newe
;
error
=
BadValue
;
}
}
break
;
case
CPSubwindowMode
:
{
unsigned
int
news
;
news
=
NEXT_VAL
(
unsigned
int
);
if
(
news
==
ClipByChildren
||
news
==
IncludeInferiors
)
pPicture
->
subWindowMode
=
news
;
else
{
client
->
errorValue
=
news
;
error
=
BadValue
;
}
}
break
;
case
CPPolyEdge
:
{
unsigned
int
newe
;
newe
=
NEXT_VAL
(
unsigned
int
);
if
(
newe
==
PolyEdgeSharp
||
newe
==
PolyEdgeSmooth
)
pPicture
->
polyEdge
=
newe
;
else
{
client
->
errorValue
=
newe
;
error
=
BadValue
;
}
}
break
;
case
CPPolyMode
:
{
unsigned
int
newm
;
newm
=
NEXT_VAL
(
unsigned
int
);
if
(
newm
==
PolyModePrecise
||
newm
==
PolyModeImprecise
)
pPicture
->
polyMode
=
newm
;
else
{
client
->
errorValue
=
newm
;
error
=
BadValue
;
}
}
break
;
case
CPDither
:
pPicture
->
dither
=
NEXT_VAL
(
Atom
);
break
;
case
CPComponentAlpha
:
{
unsigned
int
newca
;
newca
=
NEXT_VAL
(
unsigned
int
);
if
(
newca
<=
xTrue
)
pPicture
->
componentAlpha
=
newca
;
else
{
client
->
errorValue
=
newca
;
error
=
BadValue
;
}
}
break
;
default:
client
->
errorValue
=
maskQ
;
error
=
BadValue
;
break
;
}
PicturePtr
pPicture
;
pPicture
=
createSourcePicture
();
if
(
!
pPicture
)
{
*
error
=
BadAlloc
;
return
0
;
}
if
(
ps
)
(
*
ps
->
ChangePicture
)
(
pPicture
,
maskQ
);
return
error
;
}
int
SetPictureClipRects
(
PicturePtr
pPicture
,
int
xOrigin
,
int
yOrigin
,
int
nRect
,
xRectangle
*
rects
)
{
ScreenPtr
pScreen
=
pPicture
->
pDrawable
->
pScreen
;
PictureScreenPtr
ps
=
GetPictureScreen
(
pScreen
);
RegionPtr
clientClip
;
int
result
;
clientClip
=
RegionFromRects
(
nRect
,
rects
,
CT_UNSORTED
);
if
(
!
clientClip
)
return
BadAlloc
;
result
=
(
*
ps
->
ChangePictureClip
)
(
pPicture
,
CT_REGION
,
(
void
*
)
clientClip
,
0
);
if
(
result
==
Success
)
{
pPicture
->
clipOrigin
.
x
=
xOrigin
;
pPicture
->
clipOrigin
.
y
=
yOrigin
;
pPicture
->
stateChanges
|=
CPClipXOrigin
|
CPClipYOrigin
|
CPClipMask
;
pPicture
->
serialNumber
|=
GC_CHANGE_SERIAL_BIT
;
pPicture
->
id
=
pid
;
pPicture
->
pSourcePict
=
(
SourcePictPtr
)
xalloc
(
sizeof
(
PictSolidFill
));
if
(
!
pPicture
->
pSourcePict
)
{
*
error
=
BadAlloc
;
xfree
(
pPicture
);
return
0
;
}
return
result
;
pPicture
->
pSourcePict
->
type
=
SourcePictTypeSolidFill
;
pPicture
->
pSourcePict
->
solidFill
.
color
=
xRenderColorToCard32
(
*
color
);
pPicture
->
pSourcePict
->
solidFill
.
fullColor
.
alpha
=
color
->
alpha
;
pPicture
->
pSourcePict
->
solidFill
.
fullColor
.
red
=
color
->
red
;
pPicture
->
pSourcePict
->
solidFill
.
fullColor
.
green
=
color
->
green
;
pPicture
->
pSourcePict
->
solidFill
.
fullColor
.
blue
=
color
->
blue
;
return
pPicture
;
}
int
SetPictureClipRegion
(
PicturePtr
pPicture
,
int
xOrigin
,
int
yOrigin
,
RegionPtr
pRegion
)
static
PicturePtr
createSourcePicture
(
void
)
{
ScreenPtr
pScreen
=
pPicture
->
pDrawable
->
pScreen
;
PictureScreenPtr
ps
=
GetPictureScreen
(
pScreen
);
RegionPtr
clientClip
;
int
result
;
int
type
;
if
(
pRegion
)
{
type
=
CT_REGION
;
clientClip
=
RegionCreate
(
RegionExtents
(
pRegion
),
RegionNumRects
(
pRegion
));
if
(
!
clientClip
)
return
BadAlloc
;
if
(
!
RegionCopy
(
clientClip
,
pRegion
))
{
RegionDestroy
(
clientClip
);
return
BadAlloc
;
}
}
else
{
type
=
CT_NONE
;
clientClip
=
0
;
}
PicturePtr
pPicture
;
result
=
(
*
ps
->
ChangePictureClip
)
(
pPicture
,
type
,
(
void
*
)
clientClip
,
0
);
if
(
result
==
Success
)
{
pPicture
->
clipOrigin
.
x
=
xOrigin
;
pPicture
->
clipOrigin
.
y
=
yOrigin
;
pPicture
->
stateChanges
|=
CPClipXOrigin
|
CPClipYOrigin
|
CPClipMask
;
pPicture
->
serialNumber
|=
GC_CHANGE_SERIAL_BIT
;
}
return
result
;
}
extern
int
nxagentPicturePrivateIndex
;
unsigned
int
totalPictureSize
;
int
SetPictureTransform
(
PicturePtr
pPicture
,
PictTransform
*
transform
)
{
static
const
PictTransform
identity
=
{
{
{
xFixed1
,
0x00000
,
0x00000
},
{
0x00000
,
xFixed1
,
0x00000
},
{
0x00000
,
0x00000
,
xFixed1
},
}
};
DevUnion
*
ppriv
;
if
(
transform
&&
memcmp
(
transform
,
&
identity
,
sizeof
(
PictTransform
))
==
0
)
transform
=
0
;
char
*
privPictureRecAddr
;
if
(
transform
)
{
if
(
!
pPicture
->
transform
)
{
pPicture
->
transform
=
(
PictTransform
*
)
xalloc
(
sizeof
(
PictTransform
));
if
(
!
pPicture
->
transform
)
return
BadAlloc
;
}
*
pPicture
->
transform
=
*
transform
;
}
else
{
if
(
pPicture
->
transform
)
{
xfree
(
pPicture
->
transform
);
pPicture
->
transform
=
0
;
}
}
pPicture
->
serialNumber
|=
GC_CHANGE_SERIAL_BIT
;
int
i
;
return
Success
;
}
/*
* Compute size of entire PictureRect, plus privates.
*/
void
CopyPicture
(
PicturePtr
pSrc
,
Mask
mask
,
PicturePtr
pDst
)
{
PictureScreenPtr
ps
=
GetPictureScreen
(
pSrc
->
pDrawable
->
pScreen
);
Mask
origMask
=
mask
;
totalPictureSize
=
sizeof
(
PictureRec
)
+
picturePrivateCount
*
sizeof
(
DevUnion
)
+
sizeof
(
nxagentPrivPictureRec
);
pDst
->
serialNumber
|=
GC_CHANGE_SERIAL_BIT
;
pDst
->
stateChanges
|=
mask
;
pPicture
=
(
PicturePtr
)
xalloc
(
totalPictureSize
);
while
(
mask
)
{
Mask
bit
=
lowbit
(
mask
);
if
(
pPicture
!=
NULL
)
{
ppriv
=
(
DevUnion
*
)
(
pPicture
+
1
);
switch
(
bit
)
for
(
i
=
0
;
i
<
picturePrivateCount
;
++
i
)
{
case
CPRepeat
:
pDst
->
repeat
=
pSrc
->
repeat
;
pDst
->
repeatType
=
pSrc
->
repeatType
;
break
;
case
CPAlphaMap
:
if
(
pSrc
->
alphaMap
&&
pSrc
->
alphaMap
->
pDrawable
->
type
==
DRAWABLE_PIXMAP
)
pSrc
->
alphaMap
->
refcnt
++
;
if
(
pDst
->
alphaMap
)
FreePicture
((
void
*
)
pDst
->
alphaMap
,
(
XID
)
0
);
pDst
->
alphaMap
=
pSrc
->
alphaMap
;
break
;
case
CPAlphaXOrigin
:
pDst
->
alphaOrigin
.
x
=
pSrc
->
alphaOrigin
.
x
;
break
;
case
CPAlphaYOrigin
:
pDst
->
alphaOrigin
.
y
=
pSrc
->
alphaOrigin
.
y
;
break
;
case
CPClipXOrigin
:
pDst
->
clipOrigin
.
x
=
pSrc
->
clipOrigin
.
x
;
break
;
case
CPClipYOrigin
:
pDst
->
clipOrigin
.
y
=
pSrc
->
clipOrigin
.
y
;
break
;
case
CPClipMask
:
switch
(
pSrc
->
clientClipType
)
{
case
CT_NONE
:
(
*
ps
->
ChangePictureClip
)(
pDst
,
CT_NONE
,
NULL
,
0
);
break
;
case
CT_REGION
:
if
(
!
pSrc
->
clientClip
)
{
(
*
ps
->
ChangePictureClip
)(
pDst
,
CT_NONE
,
NULL
,
0
);
}
else
{
RegionPtr
clientClip
;
RegionPtr
srcClientClip
=
(
RegionPtr
)
pSrc
->
clientClip
;
/*
* Other privates are inaccessible.
*/
clientClip
=
RegionCreate
(
RegionExtents
(
srcClientClip
),
RegionNumRects
(
srcClientClip
));
(
*
ps
->
ChangePictureClip
)(
pDst
,
CT_REGION
,
clientClip
,
0
);
}
break
;
default:
/* XXX: CT_PIXMAP unimplemented */
break
;
}
break
;
case
CPGraphicsExposure
:
pDst
->
graphicsExposures
=
pSrc
->
graphicsExposures
;
break
;
case
CPPolyEdge
:
pDst
->
polyEdge
=
pSrc
->
polyEdge
;
break
;
case
CPPolyMode
:
pDst
->
polyMode
=
pSrc
->
polyMode
;
break
;
case
CPDither
:
pDst
->
dither
=
pSrc
->
dither
;
break
;
case
CPComponentAlpha
:
pDst
->
componentAlpha
=
pSrc
->
componentAlpha
;
break
;
}
mask
&=
~
bit
;
ppriv
[
i
].
ptr
=
NULL
;
}
(
*
ps
->
ChangePicture
)(
pDst
,
origMask
);
}
privPictureRecAddr
=
(
char
*
)
&
ppriv
[
picturePrivateCount
];
static
void
ValidateOnePicture
(
PicturePtr
pPicture
)
{
if
(
pPicture
->
pDrawable
&&
pPicture
->
serialNumber
!=
pPicture
->
pDrawable
->
serialNumber
)
{
PictureScreenPtr
ps
=
GetPictureScreen
(
pPicture
->
pDrawable
->
pScreen
);
ppriv
[
nxagentPicturePrivateIndex
].
ptr
=
(
void
*
)
privPictureRecAddr
;
pPicture
->
devPrivates
=
ppriv
;
(
*
ps
->
ValidatePicture
)
(
pPicture
,
pPicture
->
stateChanges
);
pPicture
->
stateChanges
=
0
;
pPicture
->
serialNumber
=
pPicture
->
pDrawable
->
serialNumber
;
nxagentPicturePriv
(
pPicture
)
->
picture
=
0
;
}
}
void
ValidatePicture
(
PicturePtr
pPicture
)
{
ValidateOnePicture
(
pPicture
);
if
(
pPicture
->
alphaMap
)
ValidateOnePicture
(
pPicture
->
alphaMap
)
;
pPicture
->
pDrawable
=
0
;
pPicture
->
pFormat
=
0
;
pPicture
->
pNext
=
0
;
SetPictureToDefaults
(
pPicture
);
return
pPicture
;
}
int
...
...
@@ -1747,9 +358,7 @@ FreePicture (void * value,
if
(
--
pPicture
->
refcnt
==
0
)
{
#ifdef NXAGENT_SERVER
nxagentDestroyPicture
(
pPicture
);
#endif
if
(
pPicture
->
transform
)
xfree
(
pPicture
->
transform
);
...
...
@@ -1793,264 +402,6 @@ FreePicture (void * value,
return
Success
;
}
int
FreePictFormat
(
void
*
pPictFormat
,
XID
pid
)
{
return
Success
;
}
/**
* ReduceCompositeOp is used to choose simpler ops for cases where alpha
* channels are always one and so math on the alpha channel per pixel becomes
* unnecessary. It may also avoid destination reads sometimes if apps aren't
* being careful to avoid these cases.
*/
static
CARD8
ReduceCompositeOp
(
CARD8
op
,
PicturePtr
pSrc
,
PicturePtr
pMask
,
PicturePtr
pDst
)
{
Bool
no_src_alpha
,
no_dst_alpha
;
no_src_alpha
=
PICT_FORMAT_COLOR
(
pSrc
->
format
)
&&
PICT_FORMAT_A
(
pSrc
->
format
)
==
0
&&
pSrc
->
alphaMap
==
NULL
&&
pMask
==
NULL
;
no_dst_alpha
=
PICT_FORMAT_COLOR
(
pDst
->
format
)
&&
PICT_FORMAT_A
(
pDst
->
format
)
==
0
&&
pDst
->
alphaMap
==
NULL
;
/* TODO, maybe: Conjoint and Disjoint op reductions? */
/* Deal with simplifications where the source alpha is always 1. */
if
(
no_src_alpha
)
{
switch
(
op
)
{
case
PictOpOver
:
op
=
PictOpSrc
;
break
;
case
PictOpInReverse
:
op
=
PictOpDst
;
break
;
case
PictOpOutReverse
:
op
=
PictOpClear
;
break
;
case
PictOpAtop
:
op
=
PictOpIn
;
break
;
case
PictOpAtopReverse
:
op
=
PictOpOverReverse
;
break
;
case
PictOpXor
:
op
=
PictOpOut
;
break
;
default:
break
;
}
}
/* Deal with simplifications when the destination alpha is always 1 */
if
(
no_dst_alpha
)
{
switch
(
op
)
{
case
PictOpOverReverse
:
op
=
PictOpDst
;
break
;
case
PictOpIn
:
op
=
PictOpSrc
;
break
;
case
PictOpOut
:
op
=
PictOpClear
;
break
;
case
PictOpAtop
:
op
=
PictOpOver
;
break
;
case
PictOpXor
:
op
=
PictOpOutReverse
;
break
;
default:
break
;
}
}
/* Reduce some con/disjoint ops to the basic names. */
switch
(
op
)
{
case
PictOpDisjointClear
:
case
PictOpConjointClear
:
op
=
PictOpClear
;
break
;
case
PictOpDisjointSrc
:
case
PictOpConjointSrc
:
op
=
PictOpSrc
;
break
;
case
PictOpDisjointDst
:
case
PictOpConjointDst
:
op
=
PictOpDst
;
break
;
default:
break
;
}
return
op
;
}
void
CompositePicture
(
CARD8
op
,
PicturePtr
pSrc
,
PicturePtr
pMask
,
PicturePtr
pDst
,
INT16
xSrc
,
INT16
ySrc
,
INT16
xMask
,
INT16
yMask
,
INT16
xDst
,
INT16
yDst
,
CARD16
width
,
CARD16
height
)
{
PictureScreenPtr
ps
=
GetPictureScreen
(
pDst
->
pDrawable
->
pScreen
);
ValidatePicture
(
pSrc
);
if
(
pMask
)
ValidatePicture
(
pMask
);
ValidatePicture
(
pDst
);
op
=
ReduceCompositeOp
(
op
,
pSrc
,
pMask
,
pDst
);
if
(
op
==
PictOpDst
)
return
;
(
*
ps
->
Composite
)
(
op
,
pSrc
,
pMask
,
pDst
,
xSrc
,
ySrc
,
xMask
,
yMask
,
xDst
,
yDst
,
width
,
height
);
}
void
CompositeGlyphs
(
CARD8
op
,
PicturePtr
pSrc
,
PicturePtr
pDst
,
PictFormatPtr
maskFormat
,
INT16
xSrc
,
INT16
ySrc
,
int
nlist
,
GlyphListPtr
lists
,
GlyphPtr
*
glyphs
)
{
PictureScreenPtr
ps
=
GetPictureScreen
(
pDst
->
pDrawable
->
pScreen
);
ValidatePicture
(
pSrc
);
ValidatePicture
(
pDst
);
#ifdef TEST
fprintf
(
stderr
,
"CompositeGlyphs: Going to composite glyphs with "
"source at [%p] and destination at [%p].
\n
"
,
(
void
*
)
pSrc
,
(
void
*
)
pDst
);
#endif
(
*
ps
->
Glyphs
)
(
op
,
pSrc
,
pDst
,
maskFormat
,
xSrc
,
ySrc
,
nlist
,
lists
,
glyphs
);
}
void
CompositeRects
(
CARD8
op
,
PicturePtr
pDst
,
xRenderColor
*
color
,
int
nRect
,
xRectangle
*
rects
)
{
PictureScreenPtr
ps
=
GetPictureScreen
(
pDst
->
pDrawable
->
pScreen
);
ValidatePicture
(
pDst
);
(
*
ps
->
CompositeRects
)
(
op
,
pDst
,
color
,
nRect
,
rects
);
}
void
CompositeTrapezoids
(
CARD8
op
,
PicturePtr
pSrc
,
PicturePtr
pDst
,
PictFormatPtr
maskFormat
,
INT16
xSrc
,
INT16
ySrc
,
int
ntrap
,
xTrapezoid
*
traps
)
{
PictureScreenPtr
ps
=
GetPictureScreen
(
pDst
->
pDrawable
->
pScreen
);
ValidatePicture
(
pSrc
);
ValidatePicture
(
pDst
);
(
*
ps
->
Trapezoids
)
(
op
,
pSrc
,
pDst
,
maskFormat
,
xSrc
,
ySrc
,
ntrap
,
traps
);
}
void
CompositeTriangles
(
CARD8
op
,
PicturePtr
pSrc
,
PicturePtr
pDst
,
PictFormatPtr
maskFormat
,
INT16
xSrc
,
INT16
ySrc
,
int
ntriangles
,
xTriangle
*
triangles
)
{
PictureScreenPtr
ps
=
GetPictureScreen
(
pDst
->
pDrawable
->
pScreen
);
ValidatePicture
(
pSrc
);
ValidatePicture
(
pDst
);
(
*
ps
->
Triangles
)
(
op
,
pSrc
,
pDst
,
maskFormat
,
xSrc
,
ySrc
,
ntriangles
,
triangles
);
}
void
CompositeTriStrip
(
CARD8
op
,
PicturePtr
pSrc
,
PicturePtr
pDst
,
PictFormatPtr
maskFormat
,
INT16
xSrc
,
INT16
ySrc
,
int
npoints
,
xPointFixed
*
points
)
{
PictureScreenPtr
ps
=
GetPictureScreen
(
pDst
->
pDrawable
->
pScreen
);
ValidatePicture
(
pSrc
);
ValidatePicture
(
pDst
);
(
*
ps
->
TriStrip
)
(
op
,
pSrc
,
pDst
,
maskFormat
,
xSrc
,
ySrc
,
npoints
,
points
);
}
void
CompositeTriFan
(
CARD8
op
,
PicturePtr
pSrc
,
PicturePtr
pDst
,
PictFormatPtr
maskFormat
,
INT16
xSrc
,
INT16
ySrc
,
int
npoints
,
xPointFixed
*
points
)
{
PictureScreenPtr
ps
=
GetPictureScreen
(
pDst
->
pDrawable
->
pScreen
);
ValidatePicture
(
pSrc
);
ValidatePicture
(
pDst
);
(
*
ps
->
TriFan
)
(
op
,
pSrc
,
pDst
,
maskFormat
,
xSrc
,
ySrc
,
npoints
,
points
);
}
void
AddTraps
(
PicturePtr
pPicture
,
INT16
xOff
,
INT16
yOff
,
int
ntrap
,
xTrap
*
traps
)
{
PictureScreenPtr
ps
=
GetPictureScreen
(
pPicture
->
pDrawable
->
pScreen
);
ValidatePicture
(
pPicture
);
(
*
ps
->
AddTraps
)
(
pPicture
,
xOff
,
yOff
,
ntrap
,
traps
);
}
#ifndef True
# define True 1
#endif
...
...
nx-X11/programs/Xserver/render/Imakefile
View file @
0c29f81f
...
...
@@ -8,10 +8,12 @@ NULL =
NXAGENT_SKIP_SRCS = \
miglyph.c \
mitrap.c \
picture.c \
$(NULL)
NXAGENT_SKIP_OBJS = \
miglyph.o \
mitrap.o \
picture.o \
$(NULL)
#endif
...
...
@@ -23,7 +25,6 @@ NXAGENT_SKIP_OBJS = \
mipict.c \
mirect.c \
mitri.c \
picture.c \
render.c \
renderedge.c \
$(NXAGENT_SKIP_SRCS) \
...
...
@@ -37,7 +38,6 @@ NXAGENT_SKIP_OBJS = \
mipict.o \
mirect.o \
mitri.o \
picture.o \
render.o \
renderedge.o \
$(NXAGENT_SKIP_OBJS) \
...
...
nx-X11/programs/Xserver/render/picture.c
View file @
0c29f81f
...
...
@@ -40,7 +40,10 @@
#include "dixstruct.h"
#include "gcstruct.h"
#include "servermd.h"
#ifndef NXAGENT_SERVER
#include "picturestr.h"
#endif
int
PictureScreenPrivateIndex
=
-
1
;
int
PictureWindowPrivateIndex
;
...
...
@@ -212,6 +215,7 @@ addFormat (FormatInitRec formats[256],
#define Mask(n) ((n) == 32 ? 0xffffffff : ((1 << (n))-1))
#ifndef NXAGENT_SERVER
PictFormatPtr
PictureCreateDefaultFormats
(
ScreenPtr
pScreen
,
int
*
nformatp
)
{
...
...
@@ -431,6 +435,7 @@ PictureCreateDefaultFormats (ScreenPtr pScreen, int *nformatp)
*
nformatp
=
nformats
;
return
pFormats
;
}
#endif
static
VisualPtr
PictureFindVisual
(
ScreenPtr
pScreen
,
VisualID
visual
)
...
...
@@ -767,6 +772,7 @@ SetPictureToDefaults (PicturePtr pPicture)
pPicture
->
pSourcePict
=
0
;
}
#ifndef NXAGENT_SERVER
PicturePtr
AllocatePicture
(
ScreenPtr
pScreen
)
{
...
...
@@ -847,6 +853,7 @@ CreatePicture (Picture pid,
}
return
pPicture
;
}
#endif
static
CARD32
xRenderColorToCard32
(
xRenderColor
c
)
{
...
...
@@ -969,6 +976,7 @@ static void initGradient(SourcePictPtr pGradient, int stopCount,
initGradientColorTable
(
pGradient
,
error
);
}
#ifndef NXAGENT_SERVER
static
PicturePtr
createSourcePicture
(
void
)
{
PicturePtr
pPicture
;
...
...
@@ -1002,6 +1010,7 @@ CreateSolidPicture (Picture pid, xRenderColor *color, int *error)
pPicture
->
pSourcePict
->
solidFill
.
color
=
xRenderColorToCard32
(
*
color
);
return
pPicture
;
}
#endif
PicturePtr
CreateLinearGradientPicture
(
Picture
pid
,
xPointFixed
*
p1
,
xPointFixed
*
p2
,
...
...
@@ -1592,6 +1601,7 @@ ValidatePicture(PicturePtr pPicture)
ValidateOnePicture
(
pPicture
->
alphaMap
);
}
#ifndef NXAGENT_SERVER
int
FreePicture
(
void
*
value
,
XID
pid
)
...
...
@@ -1641,6 +1651,7 @@ FreePicture (void * value,
}
return
Success
;
}
#endif
int
FreePictFormat
(
void
*
pPictFormat
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment