Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
988f2fde
Commit
988f2fde
authored
Sep 25, 2012
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winex11: Store the full visual info for the default visual.
parent
0a939842
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
101 additions
and
148 deletions
+101
-148
bitblt.c
dlls/winex11.drv/bitblt.c
+5
-5
brush.c
dlls/winex11.drv/brush.c
+4
-15
clipboard.c
dlls/winex11.drv/clipboard.c
+5
-31
desktop.c
dlls/winex11.drv/desktop.c
+3
-3
init.c
dlls/winex11.drv/init.c
+2
-2
mouse.c
dlls/winex11.drv/mouse.c
+2
-2
opengl.c
dlls/winex11.drv/opengl.c
+4
-4
palette.c
dlls/winex11.drv/palette.c
+15
-15
window.c
dlls/winex11.drv/window.c
+10
-23
x11drv.h
dlls/winex11.drv/x11drv.h
+1
-2
x11drv_main.c
dlls/winex11.drv/x11drv_main.c
+36
-25
xrender.c
dlls/winex11.drv/xrender.c
+14
-21
No files found.
dlls/winex11.drv/bitblt.c
View file @
988f2fde
...
...
@@ -1195,7 +1195,7 @@ DWORD X11DRV_PutImage( PHYSDEV dev, HRGN clip, BITMAPINFO *info,
X11DRV_PDEVICE
*
physdev
=
get_x11drv_dev
(
dev
);
DWORD
ret
;
XImage
*
image
;
XVisualInfo
vis
;
XVisualInfo
vis
=
default_visual
;
struct
gdi_image_bits
dst_bits
;
const
XPixmapFormatValues
*
format
;
const
BYTE
*
opcode
=
BITBLT_Opcodes
[(
rop
>>
16
)
&
0xff
];
...
...
@@ -1217,7 +1217,7 @@ DWORD X11DRV_PutImage( PHYSDEV dev, HRGN clip, BITMAPINFO *info,
if
(
!
bits
)
return
ERROR_SUCCESS
;
/* just querying the format */
if
((
src
->
width
!=
dst
->
width
)
||
(
src
->
height
!=
dst
->
height
))
return
ERROR_TRANSFORM_NOT_SUPPORTED
;
image
=
XCreateImage
(
gdi_display
,
visual
,
vis
.
depth
,
ZPixmap
,
0
,
NULL
,
image
=
XCreateImage
(
gdi_display
,
vis
.
vis
ual
,
vis
.
depth
,
ZPixmap
,
0
,
NULL
,
info
->
bmiHeader
.
biWidth
,
src
->
visrect
.
bottom
-
src
->
visrect
.
top
,
32
,
0
);
if
(
!
image
)
return
ERROR_OUTOFMEMORY
;
...
...
@@ -1286,7 +1286,7 @@ DWORD X11DRV_GetImage( PHYSDEV dev, BITMAPINFO *info,
X11DRV_PDEVICE
*
physdev
=
get_x11drv_dev
(
dev
);
DWORD
ret
=
ERROR_SUCCESS
;
XImage
*
image
;
XVisualInfo
vis
;
XVisualInfo
vis
=
default_visual
;
UINT
align
,
x
,
y
,
width
,
height
;
struct
gdi_image_bits
src_bits
;
const
XPixmapFormatValues
*
format
;
...
...
@@ -1403,7 +1403,7 @@ static DWORD put_pixmap_image( Pixmap pixmap, const XVisualInfo *vis,
coords
.
height
=
abs
(
info
->
bmiHeader
.
biHeight
);
SetRect
(
&
coords
.
visrect
,
0
,
0
,
coords
.
width
,
coords
.
height
);
image
=
XCreateImage
(
gdi_display
,
visual
,
vis
->
depth
,
ZPixmap
,
0
,
NULL
,
image
=
XCreateImage
(
gdi_display
,
vis
->
vis
ual
,
vis
->
depth
,
ZPixmap
,
0
,
NULL
,
coords
.
width
,
coords
.
height
,
32
,
0
);
if
(
!
image
)
return
ERROR_OUTOFMEMORY
;
...
...
@@ -1870,7 +1870,7 @@ struct window_surface *create_surface( Window window, const XVisualInfo *vis, co
surface
->
bits
.
free
=
free_heap_bits
;
surface
->
image
=
XCreateImage
(
gdi_display
,
visual
,
vis
->
depth
,
ZPixmap
,
0
,
NULL
,
surface
->
image
=
XCreateImage
(
gdi_display
,
vis
->
vis
ual
,
vis
->
depth
,
ZPixmap
,
0
,
NULL
,
width
,
height
,
32
,
0
);
if
(
!
surface
->
image
)
goto
failed
;
surface
->
gc
=
XCreateGC
(
gdi_display
,
window
,
0
,
NULL
);
...
...
dlls/winex11.drv/brush.c
View file @
988f2fde
...
...
@@ -115,7 +115,7 @@ static Pixmap BRUSH_DitherColor( COLORREF color, int depth)
XLockDisplay
(
gdi_display
);
if
(
!
ditherImage
)
{
ditherImage
=
XCreateImage
(
gdi_display
,
visual
,
depth
,
ZPixmap
,
0
,
ditherImage
=
XCreateImage
(
gdi_display
,
default_visual
.
visual
,
depth
,
ZPixmap
,
0
,
NULL
,
MATRIX_SIZE
,
MATRIX_SIZE
,
32
,
0
);
if
(
!
ditherImage
)
{
...
...
@@ -182,7 +182,7 @@ static Pixmap BRUSH_DitherMono( COLORREF color )
static
void
BRUSH_SelectSolidBrush
(
X11DRV_PDEVICE
*
physDev
,
COLORREF
color
)
{
COLORREF
colorRGB
=
X11DRV_PALETTE_GetColor
(
physDev
,
color
);
if
((
physDev
->
depth
>
1
)
&&
(
screen_
depth
<=
8
)
&&
!
X11DRV_IsSolidColor
(
color
))
if
((
physDev
->
depth
>
1
)
&&
(
default_visual
.
depth
<=
8
)
&&
!
X11DRV_IsSolidColor
(
color
))
{
/* Dithered brush */
physDev
->
brush
.
pixmap
=
BRUSH_DitherColor
(
colorRGB
,
physDev
->
depth
);
...
...
@@ -206,22 +206,11 @@ static void BRUSH_SelectSolidBrush( X11DRV_PDEVICE *physDev, COLORREF color )
static
BOOL
select_pattern_brush
(
X11DRV_PDEVICE
*
physdev
,
const
struct
brush_pattern
*
pattern
)
{
XVisualInfo
vis
;
XVisualInfo
vis
=
default_visual
;
Pixmap
pixmap
;
const
BITMAPINFO
*
info
=
pattern
->
info
;
memset
(
&
vis
,
0
,
sizeof
(
vis
)
);
vis
.
visual
=
visual
;
vis
.
visualid
=
visual
->
visualid
;
if
(
physdev
->
depth
>
1
&&
info
->
bmiHeader
.
biBitCount
>
1
)
{
vis
.
depth
=
screen_depth
;
vis
.
red_mask
=
visual
->
red_mask
;
vis
.
green_mask
=
visual
->
green_mask
;
vis
.
blue_mask
=
visual
->
blue_mask
;
}
else
vis
.
depth
=
1
;
if
(
physdev
->
depth
==
1
||
info
->
bmiHeader
.
biBitCount
==
1
)
vis
.
depth
=
1
;
pixmap
=
create_pixmap_from_image
(
physdev
->
dev
.
hdc
,
&
vis
,
info
,
&
pattern
->
bits
,
pattern
->
usage
);
if
(
!
pixmap
)
return
FALSE
;
...
...
dlls/winex11.drv/clipboard.c
View file @
988f2fde
...
...
@@ -259,13 +259,8 @@ static Window thread_selection_wnd(void)
if
(
!
w
)
{
XSetWindowAttributes
attr
;
attr
.
event_mask
=
(
ExposureMask
|
KeyPressMask
|
KeyReleaseMask
|
PointerMotionMask
|
ButtonPressMask
|
ButtonReleaseMask
|
EnterWindowMask
|
PropertyChangeMask
);
w
=
XCreateWindow
(
thread_data
->
display
,
root_window
,
0
,
0
,
1
,
1
,
0
,
screen_depth
,
InputOutput
,
CopyFromParent
,
CWEventMask
,
&
attr
);
w
=
XCreateWindow
(
thread_data
->
display
,
root_window
,
0
,
0
,
1
,
1
,
0
,
CopyFromParent
,
InputOnly
,
CopyFromParent
,
0
,
NULL
);
if
(
w
)
thread_data
->
selection_wnd
=
w
;
else
...
...
@@ -1319,7 +1314,7 @@ static HANDLE X11DRV_CLIPBOARD_ImportXAPIXMAP(Display *display, Window w, Atom p
if
(
X11DRV_CLIPBOARD_ReadProperty
(
display
,
w
,
prop
,
&
lpdata
,
&
cbytes
))
{
XVisualInfo
vis
;
XVisualInfo
vis
=
default_visual
;
char
buffer
[
FIELD_OFFSET
(
BITMAPINFO
,
bmiColors
[
256
]
)];
BITMAPINFO
*
info
=
(
BITMAPINFO
*
)
buffer
;
struct
gdi_image_bits
bits
;
...
...
@@ -1338,18 +1333,7 @@ static HANDLE X11DRV_CLIPBOARD_ImportXAPIXMAP(Display *display, Window w, Atom p
TRACE
(
"
\t
Pixmap properties: width=%d, height=%d, depth=%d
\n
"
,
width
,
height
,
depth
);
memset
(
&
vis
,
0
,
sizeof
(
vis
)
);
vis
.
depth
=
depth
;
if
(
depth
==
screen_depth
)
{
vis
.
visual
=
visual
;
vis
.
visualid
=
visual
->
visualid
;
vis
.
class
=
visual
->
class
;
vis
.
red_mask
=
visual
->
red_mask
;
vis
.
green_mask
=
visual
->
green_mask
;
vis
.
blue_mask
=
visual
->
blue_mask
;
}
else
switch
(
pixmap_formats
[
depth
]
->
bits_per_pixel
)
if
(
depth
!=
vis
.
depth
)
switch
(
pixmap_formats
[
depth
]
->
bits_per_pixel
)
{
case
1
:
case
4
:
...
...
@@ -1757,24 +1741,14 @@ static HANDLE X11DRV_CLIPBOARD_ExportXAPIXMAP(Display *display, Window requestor
if
(
!
lpdata
->
drvData
)
/* If not already rendered */
{
Pixmap
pixmap
;
XVisualInfo
vis
;
LPBITMAPINFO
pbmi
;
struct
gdi_image_bits
bits
;
memset
(
&
vis
,
0
,
sizeof
(
vis
)
);
vis
.
visual
=
visual
;
vis
.
depth
=
screen_depth
;
vis
.
visualid
=
visual
->
visualid
;
vis
.
class
=
visual
->
class
;
vis
.
red_mask
=
visual
->
red_mask
;
vis
.
green_mask
=
visual
->
green_mask
;
vis
.
blue_mask
=
visual
->
blue_mask
;
pbmi
=
GlobalLock
(
lpdata
->
hData
);
bits
.
ptr
=
(
LPBYTE
)
pbmi
+
bitmap_info_size
(
pbmi
,
DIB_RGB_COLORS
);
bits
.
free
=
NULL
;
bits
.
is_copy
=
FALSE
;
pixmap
=
create_pixmap_from_image
(
0
,
&
vis
,
pbmi
,
&
bits
,
DIB_RGB_COLORS
);
pixmap
=
create_pixmap_from_image
(
0
,
&
default_visual
,
pbmi
,
&
bits
,
DIB_RGB_COLORS
);
GlobalUnlock
(
lpdata
->
hData
);
lpdata
->
drvData
=
pixmap
;
}
...
...
dlls/winex11.drv/desktop.c
View file @
988f2fde
...
...
@@ -143,14 +143,14 @@ Window CDECL X11DRV_create_desktop( UINT width, UINT height )
PointerMotionMask
|
ButtonPressMask
|
ButtonReleaseMask
|
FocusChangeMask
;
win_attr
.
cursor
=
XCreateFontCursor
(
display
,
XC_top_left_arrow
);
if
(
visual
!=
DefaultVisual
(
display
,
DefaultScreen
(
display
)
))
if
(
default_visual
.
visual
!=
DefaultVisual
(
display
,
DefaultScreen
(
display
)
))
win_attr
.
colormap
=
XCreateColormap
(
display
,
DefaultRootWindow
(
display
),
visual
,
AllocNone
);
default_visual
.
visual
,
AllocNone
);
else
win_attr
.
colormap
=
None
;
win
=
XCreateWindow
(
display
,
DefaultRootWindow
(
display
),
0
,
0
,
width
,
height
,
0
,
screen_depth
,
InputOutput
,
visual
,
0
,
0
,
width
,
height
,
0
,
default_visual
.
depth
,
InputOutput
,
default_visual
.
visual
,
CWEventMask
|
CWCursor
|
CWColormap
,
&
win_attr
);
if
(
win
!=
None
&&
width
==
screen_width
&&
height
==
screen_height
)
{
...
...
dlls/winex11.drv/init.c
View file @
988f2fde
...
...
@@ -128,7 +128,7 @@ static BOOL X11DRV_CreateDC( PHYSDEV *pdev, LPCWSTR driver, LPCWSTR device,
if
(
!
physDev
)
return
FALSE
;
physDev
->
depth
=
screen_
depth
;
physDev
->
depth
=
default_visual
.
depth
;
physDev
->
color_shifts
=
&
X11DRV_PALETTE_default_shifts
;
SetRect
(
&
physDev
->
dc_rect
,
0
,
0
,
virtual_screen_rect
.
right
-
virtual_screen_rect
.
left
,
virtual_screen_rect
.
bottom
-
virtual_screen_rect
.
top
);
...
...
@@ -236,7 +236,7 @@ static INT X11DRV_GetDeviceCaps( PHYSDEV dev, INT cap )
/* MSDN: Number of entries in the device's color table, if the device has
* a color depth of no more than 8 bits per pixel.For devices with greater
* color depths, -1 is returned. */
return
(
screen_depth
>
8
)
?
-
1
:
(
1
<<
screen_
depth
);
return
(
default_visual
.
depth
>
8
)
?
-
1
:
(
1
<<
default_visual
.
depth
);
case
PDEVICESIZE
:
return
sizeof
(
X11DRV_PDEVICE
);
case
CURVECAPS
:
...
...
dlls/winex11.drv/mouse.c
View file @
988f2fde
...
...
@@ -930,7 +930,7 @@ static Cursor create_xlib_monochrome_cursor( HDC hdc, const ICONINFOEXW *icon, i
unsigned
char
*
mask_bits
=
NULL
;
GC
gc
;
XColor
fg
,
bg
;
XVisualInfo
vis
;
XVisualInfo
vis
=
default_visual
;
Pixmap
src_pixmap
,
bits_pixmap
,
mask_pixmap
;
struct
gdi_image_bits
bits
;
Cursor
cursor
=
0
;
...
...
@@ -1018,7 +1018,7 @@ static Cursor create_xlib_color_cursor( HDC hdc, const ICONINFOEXW *icon, int wi
BITMAPINFO
*
info
=
(
BITMAPINFO
*
)
buffer
;
XColor
fg
,
bg
;
Cursor
cursor
=
None
;
XVisualInfo
vis
;
XVisualInfo
vis
=
default_visual
;
Pixmap
xor_pixmap
,
mask_pixmap
;
struct
gdi_image_bits
bits
;
unsigned
int
*
color_bits
=
NULL
,
*
ptr
;
...
...
dlls/winex11.drv/opengl.c
View file @
988f2fde
...
...
@@ -983,7 +983,7 @@ static void init_pixel_formats( Display *display )
* As of the introduction of composition managers at least Nvidia now also offers ARGB visuals
* with a depth of 32 in addition to the default 24 bit. In order to prevent BadMatch errors we only
* list formats with the same depth. */
if
(
visinfo
->
depth
!=
screen_
depth
)
if
(
visinfo
->
depth
!=
default_visual
.
depth
)
{
XFree
(
visinfo
);
continue
;
...
...
@@ -1233,7 +1233,7 @@ BOOL set_win_format( HWND hwnd, XID fbconfig_id )
if
(
parent
)
gl
->
drawable
=
XCreateWindow
(
gdi_display
,
parent
,
gl
->
rect
.
left
,
gl
->
rect
.
top
,
gl
->
rect
.
right
-
gl
->
rect
.
left
,
gl
->
rect
.
bottom
-
gl
->
rect
.
top
,
0
,
screen_
depth
,
InputOutput
,
gl
->
visual
->
visual
,
0
,
default_visual
.
depth
,
InputOutput
,
gl
->
visual
->
visual
,
CWBitGravity
|
CWWinGravity
|
CWBackingStore
|
CWColormap
,
&
attrib
);
if
(
gl
->
drawable
)
...
...
@@ -1249,8 +1249,8 @@ BOOL set_win_format( HWND hwnd, XID fbconfig_id )
attrib
.
override_redirect
=
True
;
if
(
!
dummy_parent
)
{
dummy_parent
=
XCreateWindow
(
gdi_display
,
root_window
,
-
1
,
-
1
,
1
,
1
,
0
,
screen_
depth
,
InputOutput
,
visual
,
CWOverrideRedirect
,
&
attrib
);
dummy_parent
=
XCreateWindow
(
gdi_display
,
root_window
,
-
1
,
-
1
,
1
,
1
,
0
,
default_visual
.
depth
,
InputOutput
,
default_visual
.
visual
,
CWOverrideRedirect
,
&
attrib
);
XMapWindow
(
gdi_display
,
dummy_parent
);
}
gl
->
colormap
=
XCreateColormap
(
gdi_display
,
dummy_parent
,
gl
->
visual
->
visual
,
...
...
dlls/winex11.drv/palette.c
View file @
988f2fde
...
...
@@ -149,9 +149,9 @@ int X11DRV_PALETTE_Init(void)
for
(
mask
=
1
;
!
((
white
&
mask
)
^
(
black
&
mask
));
mask
<<=
1
)
monoPlane
++
;
X11DRV_PALETTE_PaletteFlags
=
(
white
&
mask
)
?
X11DRV_PALETTE_WHITESET
:
0
;
palette_size
=
visual
->
map_entries
;
palette_size
=
default_visual
.
colormap_size
;
switch
(
visual
->
class
)
switch
(
default_visual
.
class
)
{
case
DirectColor
:
X11DRV_PALETTE_PaletteFlags
|=
X11DRV_PALETTE_VIRTUAL
;
...
...
@@ -162,7 +162,7 @@ int X11DRV_PALETTE_Init(void)
XSetWindowAttributes
win_attr
;
X11DRV_PALETTE_PaletteXColormap
=
XCreateColormap
(
gdi_display
,
root_window
,
visual
,
AllocAll
);
default_visual
.
visual
,
AllocAll
);
if
(
X11DRV_PALETTE_PaletteXColormap
)
{
X11DRV_PALETTE_PaletteFlags
|=
(
X11DRV_PALETTE_PRIVATE
|
X11DRV_PALETTE_WHITESET
);
...
...
@@ -179,15 +179,15 @@ int X11DRV_PALETTE_Init(void)
}
}
else
{
X11DRV_PALETTE_PaletteXColormap
=
XCreateColormap
(
gdi_display
,
root_window
,
visual
,
AllocNone
);
default_visual
.
visual
,
AllocNone
);
}
break
;
case
StaticGray
:
X11DRV_PALETTE_PaletteXColormap
=
XCreateColormap
(
gdi_display
,
root_window
,
visual
,
AllocNone
);
default_visual
.
visual
,
AllocNone
);
X11DRV_PALETTE_PaletteFlags
|=
X11DRV_PALETTE_FIXED
;
X11DRV_PALETTE_Graymax
=
(
1
<<
screen_
depth
)
-
1
;
X11DRV_PALETTE_Graymax
=
(
1
<<
default_visual
.
depth
)
-
1
;
break
;
case
TrueColor
:
...
...
@@ -204,21 +204,21 @@ int X11DRV_PALETTE_Init(void)
monoPlane
++
;
X11DRV_PALETTE_PaletteFlags
=
(
white
&
mask
)
?
X11DRV_PALETTE_WHITESET
:
0
;
X11DRV_PALETTE_PaletteXColormap
=
XCreateColormap
(
gdi_display
,
root_window
,
visual
,
AllocNone
);
default_visual
.
visual
,
AllocNone
);
}
else
{
X11DRV_PALETTE_PaletteXColormap
=
XCreateColormap
(
gdi_display
,
root_window
,
visual
,
AllocNone
);
default_visual
.
visual
,
AllocNone
);
X11DRV_PALETTE_PaletteFlags
|=
X11DRV_PALETTE_FIXED
;
X11DRV_PALETTE_ComputeColorShifts
(
&
X11DRV_PALETTE_default_shifts
,
visual
->
red_mask
,
visual
->
green_mask
,
visual
->
blue_mask
);
X11DRV_PALETTE_ComputeColorShifts
(
&
X11DRV_PALETTE_default_shifts
,
default_visual
.
red_mask
,
default_visual
.
green_mask
,
default_visual
.
blue_mask
);
}
XFree
(
depths
);
break
;
}
}
TRACE
(
" visual class %i (%i)
\n
"
,
visual
->
class
,
monoPlane
);
TRACE
(
" visual class %i (%i)
\n
"
,
default_visual
.
class
,
monoPlane
);
GetPaletteEntries
(
GetStockObject
(
DEFAULT_PALETTE
),
0
,
NB_RESERVED_COLORS
,
sys_pal_template
);
...
...
@@ -242,7 +242,7 @@ int X11DRV_PALETTE_Init(void)
X11DRV_PALETTE_FormatSystemPalette
();
X11DRV_PALETTE_FillDefaultColors
(
sys_pal_template
);
palette_size
=
visual
->
map_entries
;
palette_size
=
default_visual
.
colormap_size
;
}
return
palette_size
;
...
...
@@ -424,7 +424,7 @@ static BOOL X11DRV_PALETTE_BuildSharedMap( const PALETTEENTRY *sys_pal_template
bp
=
BlackPixel
(
gdi_display
,
DefaultScreen
(
gdi_display
));
wp
=
WhitePixel
(
gdi_display
,
DefaultScreen
(
gdi_display
));
max
=
(
0xffffffff
)
>>
(
32
-
screen_
depth
);
max
=
0xffffffff
>>
(
32
-
default_visual
.
depth
);
if
(
max
>
256
)
{
step
=
max
/
256
;
...
...
@@ -528,7 +528,7 @@ static BOOL X11DRV_PALETTE_BuildSharedMap( const PALETTEENTRY *sys_pal_template
* to maintain compatibility
*/
palette_size
=
256
;
TRACE
(
"Virtual colorspace - screendepth %i
\n
"
,
screen_
depth
);
TRACE
(
"Virtual colorspace - screendepth %i
\n
"
,
default_visual
.
depth
);
}
else
palette_size
=
NB_RESERVED_COLORS
;
/* system palette only - however we can alloc a bunch
* of colors and map to them */
...
...
@@ -556,7 +556,7 @@ static BOOL X11DRV_PALETTE_BuildSharedMap( const PALETTEENTRY *sys_pal_template
/* setup system palette entry <-> pixel mappings and fill in 20 fixed entries */
if
(
screen_
depth
<=
8
)
if
(
default_visual
.
depth
<=
8
)
{
X11DRV_PALETTE_XPixelToPalette
=
HeapAlloc
(
GetProcessHeap
(),
0
,
256
*
sizeof
(
int
)
);
if
(
X11DRV_PALETTE_XPixelToPalette
==
NULL
)
{
...
...
@@ -786,7 +786,7 @@ COLORREF X11DRV_PALETTE_ToLogical(X11DRV_PDEVICE *physDev, int pixel)
/* check if we can bypass X */
if
((
screen_
depth
<=
8
)
&&
(
pixel
<
256
)
&&
if
((
default_visual
.
depth
<=
8
)
&&
(
pixel
<
256
)
&&
!
(
X11DRV_PALETTE_PaletteFlags
&
(
X11DRV_PALETTE_VIRTUAL
|
X11DRV_PALETTE_FIXED
))
)
{
COLORREF
ret
;
EnterCriticalSection
(
&
palette_cs
);
...
...
dlls/winex11.drv/window.c
View file @
988f2fde
...
...
@@ -316,13 +316,14 @@ static int get_window_attributes( struct x11drv_win_data *data, XSetWindowAttrib
attr
->
bit_gravity
=
NorthWestGravity
;
attr
->
win_gravity
=
StaticGravity
;
attr
->
backing_store
=
NotUseful
;
attr
->
border_pixel
=
0
;
attr
->
event_mask
=
(
ExposureMask
|
PointerMotionMask
|
ButtonPressMask
|
ButtonReleaseMask
|
EnterWindowMask
|
KeyPressMask
|
KeyReleaseMask
|
FocusChangeMask
|
KeymapStateMask
|
StructureNotifyMask
);
if
(
data
->
managed
)
attr
->
event_mask
|=
PropertyChangeMask
;
return
(
CWOverrideRedirect
|
CWSaveUnder
|
CWColormap
|
return
(
CWOverrideRedirect
|
CWSaveUnder
|
CWColormap
|
CWBorderPixel
|
CWEventMask
|
CWBitGravity
|
CWBackingStore
);
}
...
...
@@ -530,7 +531,7 @@ static BOOL create_icon_pixmaps( HDC hdc, const ICONINFO *icon, Pixmap *icon_ret
{
char
buffer
[
FIELD_OFFSET
(
BITMAPINFO
,
bmiColors
[
256
]
)];
BITMAPINFO
*
info
=
(
BITMAPINFO
*
)
buffer
;
XVisualInfo
vis
;
XVisualInfo
vis
=
default_visual
;
struct
gdi_image_bits
bits
;
Pixmap
color_pixmap
=
0
,
mask_pixmap
=
0
;
int
i
,
lines
;
...
...
@@ -545,13 +546,6 @@ static BOOL create_icon_pixmaps( HDC hdc, const ICONINFO *icon, Pixmap *icon_ret
if
(
!
(
bits
.
ptr
=
HeapAlloc
(
GetProcessHeap
(),
0
,
info
->
bmiHeader
.
biSizeImage
)))
goto
failed
;
if
(
!
GetDIBits
(
hdc
,
icon
->
hbmColor
,
0
,
lines
,
bits
.
ptr
,
info
,
DIB_RGB_COLORS
))
goto
failed
;
vis
.
visual
=
visual
;
vis
.
depth
=
screen_depth
;
vis
.
visualid
=
visual
->
visualid
;
vis
.
class
=
visual
->
class
;
vis
.
red_mask
=
visual
->
red_mask
;
vis
.
green_mask
=
visual
->
green_mask
;
vis
.
blue_mask
=
visual
->
blue_mask
;
color_pixmap
=
create_pixmap_from_image
(
hdc
,
&
vis
,
info
,
&
bits
,
DIB_RGB_COLORS
);
HeapFree
(
GetProcessHeap
(),
0
,
bits
.
ptr
);
bits
.
ptr
=
NULL
;
...
...
@@ -941,8 +935,8 @@ void update_user_time( Time time )
{
if
(
!
user_time_window
)
{
Window
win
=
XCreateWindow
(
gdi_display
,
root_window
,
-
1
,
-
1
,
1
,
1
,
0
,
0
,
InputOnly
,
DefaultVisual
(
gdi_display
,
DefaultScreen
(
gdi_display
))
,
0
,
NULL
);
Window
win
=
XCreateWindow
(
gdi_display
,
root_window
,
-
1
,
-
1
,
1
,
1
,
0
,
CopyFromParent
,
InputOnly
,
CopyFromParent
,
0
,
NULL
);
if
(
InterlockedCompareExchangePointer
(
(
void
**
)
&
user_time_window
,
(
void
*
)
win
,
0
))
XDestroyWindow
(
gdi_display
,
win
);
TRACE
(
"user time window %lx
\n
"
,
user_time_window
);
...
...
@@ -1384,8 +1378,8 @@ static void create_whole_window( struct x11drv_win_data *data )
data
->
whole_window
=
XCreateWindow
(
data
->
display
,
root_window
,
data
->
whole_rect
.
left
-
virtual_screen_rect
.
left
,
data
->
whole_rect
.
top
-
virtual_screen_rect
.
top
,
cx
,
cy
,
0
,
screen_
depth
,
InputOutput
,
visual
,
mask
,
&
attr
);
cx
,
cy
,
0
,
default_visual
.
depth
,
InputOutput
,
default_visual
.
visual
,
mask
,
&
attr
);
if
(
!
data
->
whole_window
)
goto
done
;
set_initial_wm_hints
(
data
->
display
,
data
->
whole_window
);
...
...
@@ -1633,7 +1627,8 @@ BOOL CDECL X11DRV_CreateWindow( HWND hwnd )
attr
.
override_redirect
=
TRUE
;
attr
.
event_mask
=
StructureNotifyMask
|
FocusChangeMask
;
data
->
clip_window
=
XCreateWindow
(
data
->
display
,
root_window
,
0
,
0
,
1
,
1
,
0
,
0
,
InputOnly
,
visual
,
CWOverrideRedirect
|
CWEventMask
,
&
attr
);
InputOnly
,
default_visual
.
visual
,
CWOverrideRedirect
|
CWEventMask
,
&
attr
);
XFlush
(
data
->
display
);
SetPropA
(
hwnd
,
clip_window_prop
,
(
HANDLE
)
data
->
clip_window
);
}
...
...
@@ -2014,7 +2009,6 @@ void CDECL X11DRV_WindowPosChanging( HWND hwnd, HWND insert_after, UINT swp_flag
{
struct
x11drv_win_data
*
data
=
get_win_data
(
hwnd
);
RECT
surface_rect
;
XVisualInfo
vis
;
DWORD
flags
;
COLORREF
key
;
BOOL
layered
=
GetWindowLongW
(
hwnd
,
GWL_EXSTYLE
)
&
WS_EX_LAYERED
;
...
...
@@ -2056,17 +2050,10 @@ void CDECL X11DRV_WindowPosChanging( HWND hwnd, HWND insert_after, UINT swp_flag
}
else
if
(
!
(
swp_flags
&
SWP_SHOWWINDOW
)
&&
!
(
GetWindowLongW
(
hwnd
,
GWL_STYLE
)
&
WS_VISIBLE
))
goto
done
;
memset
(
&
vis
,
0
,
sizeof
(
vis
)
);
vis
.
visual
=
visual
;
vis
.
visualid
=
visual
->
visualid
;
vis
.
depth
=
screen_depth
;
vis
.
red_mask
=
visual
->
red_mask
;
vis
.
green_mask
=
visual
->
green_mask
;
vis
.
blue_mask
=
visual
->
blue_mask
;
if
(
!
layered
||
!
GetLayeredWindowAttributes
(
hwnd
,
&
key
,
NULL
,
&
flags
)
||
!
(
flags
&
LWA_COLORKEY
))
key
=
CLR_INVALID
;
*
surface
=
create_surface
(
data
->
whole_window
,
&
vis
,
&
surface_rect
,
key
);
*
surface
=
create_surface
(
data
->
whole_window
,
&
default_visual
,
&
surface_rect
,
key
);
done:
release_win_data
(
data
);
...
...
dlls/winex11.drv/x11drv.h
View file @
988f2fde
...
...
@@ -347,14 +347,13 @@ static inline size_t get_property_size( int format, unsigned long count )
return
count
*
(
format
/
8
);
}
extern
Visual
*
visual
DECLSPEC_HIDDEN
;
extern
XVisualInfo
default_
visual
DECLSPEC_HIDDEN
;
extern
XPixmapFormatValues
**
pixmap_formats
DECLSPEC_HIDDEN
;
extern
Window
root_window
DECLSPEC_HIDDEN
;
extern
int
clipping_cursor
DECLSPEC_HIDDEN
;
extern
unsigned
int
screen_width
DECLSPEC_HIDDEN
;
extern
unsigned
int
screen_height
DECLSPEC_HIDDEN
;
extern
unsigned
int
screen_bpp
DECLSPEC_HIDDEN
;
extern
unsigned
int
screen_depth
DECLSPEC_HIDDEN
;
extern
RECT
virtual_screen_rect
DECLSPEC_HIDDEN
;
extern
int
use_xkb
DECLSPEC_HIDDEN
;
extern
int
usexrandr
DECLSPEC_HIDDEN
;
...
...
dlls/winex11.drv/x11drv_main.c
View file @
988f2fde
...
...
@@ -56,13 +56,11 @@ WINE_DEFAULT_DEBUG_CHANNEL(x11drv);
WINE_DECLARE_DEBUG_CHANNEL
(
synchronous
);
WINE_DECLARE_DEBUG_CHANNEL
(
winediag
);
static
Screen
*
screen
;
Visual
*
visual
;
XVisualInfo
default_visual
=
{
0
};
XPixmapFormatValues
**
pixmap_formats
;
unsigned
int
screen_width
;
unsigned
int
screen_height
;
unsigned
int
screen_bpp
;
unsigned
int
screen_depth
;
RECT
virtual_screen_rect
;
Window
root_window
;
int
usexvidmode
=
1
;
...
...
@@ -386,9 +384,8 @@ static void setup_options(void)
if
(
!
get_config_key
(
hkey
,
appkey
,
"GrabFullscreen"
,
buffer
,
sizeof
(
buffer
)
))
grab_fullscreen
=
IS_OPTION_TRUE
(
buffer
[
0
]
);
screen_depth
=
0
;
if
(
!
get_config_key
(
hkey
,
appkey
,
"ScreenDepth"
,
buffer
,
sizeof
(
buffer
)
))
screen_
depth
=
atoi
(
buffer
);
default_visual
.
depth
=
atoi
(
buffer
);
if
(
!
get_config_key
(
hkey
,
appkey
,
"ClientSideGraphics"
,
buffer
,
sizeof
(
buffer
)
))
client_side_graphics
=
IS_OPTION_TRUE
(
buffer
[
0
]
);
...
...
@@ -483,6 +480,36 @@ sym_not_found:
}
#endif
/* defined(SONAME_LIBXCOMPOSITE) */
static
void
init_visuals
(
Display
*
display
,
int
screen
)
{
int
count
;
XVisualInfo
*
info
;
default_visual
.
screen
=
screen
;
if
(
default_visual
.
depth
)
/* depth specified */
{
info
=
XGetVisualInfo
(
display
,
VisualScreenMask
|
VisualDepthMask
,
&
default_visual
,
&
count
);
if
(
info
)
{
default_visual
=
*
info
;
XFree
(
info
);
}
else
WARN
(
"no visual found for depth %d
\n
"
,
default_visual
.
depth
);
}
if
(
!
default_visual
.
visual
)
{
default_visual
.
depth
=
DefaultDepth
(
display
,
screen
);
default_visual
.
visual
=
DefaultVisual
(
display
,
screen
);
default_visual
.
visualid
=
default_visual
.
visual
->
visualid
;
default_visual
.
class
=
default_visual
.
visual
->
class
;
default_visual
.
red_mask
=
default_visual
.
visual
->
red_mask
;
default_visual
.
green_mask
=
default_visual
.
visual
->
green_mask
;
default_visual
.
blue_mask
=
default_visual
.
visual
->
blue_mask
;
default_visual
.
colormap_size
=
default_visual
.
visual
->
map_entries
;
default_visual
.
bits_per_rgb
=
default_visual
.
visual
->
bits_per_rgb
;
}
}
/***********************************************************************
* X11DRV process initialisation routine
...
...
@@ -514,30 +541,13 @@ static BOOL process_attach(void)
if
(
!
(
display
=
XOpenDisplay
(
NULL
)))
return
FALSE
;
fcntl
(
ConnectionNumber
(
display
),
F_SETFD
,
1
);
/* set close on exec flag */
screen
=
DefaultScreenOfDisplay
(
display
);
visual
=
DefaultVisual
(
display
,
DefaultScreen
(
display
)
);
root_window
=
DefaultRootWindow
(
display
);
gdi_display
=
display
;
old_error_handler
=
XSetErrorHandler
(
error_handler
);
/* Initialize screen depth */
if
(
screen_depth
)
/* depth specified */
{
int
depth_count
,
i
;
int
*
depth_list
=
XListDepths
(
display
,
DefaultScreen
(
display
),
&
depth_count
);
for
(
i
=
0
;
i
<
depth_count
;
i
++
)
if
(
depth_list
[
i
]
==
screen_depth
)
break
;
XFree
(
depth_list
);
if
(
i
>=
depth_count
)
{
WARN
(
"invalid depth %d, using default
\n
"
,
screen_depth
);
screen_depth
=
0
;
}
}
if
(
!
screen_depth
)
screen_depth
=
DefaultDepthOfScreen
(
screen
);
init_pixmap_formats
(
display
);
screen_bpp
=
pixmap_formats
[
screen_depth
]
->
bits_per_pixel
;
init_visuals
(
display
,
DefaultScreen
(
display
));
screen_bpp
=
pixmap_formats
[
default_visual
.
depth
]
->
bits_per_pixel
;
XInternAtoms
(
display
,
(
char
**
)
atom_names
,
NB_XATOMS
-
FIRST_XATOM
,
False
,
X11DRV_Atoms
);
...
...
@@ -547,7 +557,8 @@ static BOOL process_attach(void)
if
(
TRACE_ON
(
synchronous
))
XSynchronize
(
display
,
True
);
xinerama_init
(
WidthOfScreen
(
screen
),
HeightOfScreen
(
screen
)
);
xinerama_init
(
DisplayWidth
(
display
,
default_visual
.
screen
),
DisplayHeight
(
display
,
default_visual
.
screen
));
X11DRV_Settings_Init
();
/* initialize XVidMode */
...
...
dlls/winex11.drv/xrender.c
View file @
988f2fde
...
...
@@ -288,19 +288,13 @@ static BOOL get_xrender_template(const WineXRenderFormatTemplate *fmt, XRenderPi
static
BOOL
is_wxrformat_compatible_with_default_visual
(
const
WineXRenderFormatTemplate
*
fmt
)
{
if
(
fmt
->
depth
!=
screen_depth
)
return
FALSE
;
if
(
(
fmt
->
redMask
<<
fmt
->
red
)
!=
visual
->
red_mask
)
return
FALSE
;
if
(
(
fmt
->
greenMask
<<
fmt
->
green
)
!=
visual
->
green_mask
)
return
FALSE
;
if
(
(
fmt
->
blueMask
<<
fmt
->
blue
)
!=
visual
->
blue_mask
)
return
FALSE
;
if
(
fmt
->
depth
!=
default_visual
.
depth
)
return
FALSE
;
if
(
(
fmt
->
redMask
<<
fmt
->
red
)
!=
default_visual
.
red_mask
)
return
FALSE
;
if
(
(
fmt
->
greenMask
<<
fmt
->
green
)
!=
default_visual
.
green_mask
)
return
FALSE
;
if
(
(
fmt
->
blueMask
<<
fmt
->
blue
)
!=
default_visual
.
blue_mask
)
return
FALSE
;
/* We never select a default ARGB visual */
if
(
fmt
->
alphaMask
)
return
FALSE
;
if
(
fmt
->
alphaMask
)
return
FALSE
;
return
TRUE
;
}
...
...
@@ -315,18 +309,18 @@ static int load_xrender_formats(void)
if
(
is_wxrformat_compatible_with_default_visual
(
&
wxr_formats_template
[
i
]))
{
pict_formats
[
i
]
=
pXRenderFindVisualFormat
(
gdi_display
,
visual
);
pict_formats
[
i
]
=
pXRenderFindVisualFormat
(
gdi_display
,
default_visual
.
visual
);
if
(
!
pict_formats
[
i
])
{
/* Xrender doesn't like DirectColor visuals, try to find a TrueColor one instead */
if
(
visual
->
class
==
DirectColor
)
if
(
default_visual
.
class
==
DirectColor
)
{
XVisualInfo
info
;
if
(
XMatchVisualInfo
(
gdi_display
,
DefaultScreen
(
gdi_display
)
,
screen_
depth
,
TrueColor
,
&
info
))
if
(
XMatchVisualInfo
(
gdi_display
,
default_visual
.
screen
,
default_visual
.
depth
,
TrueColor
,
&
info
))
{
pict_formats
[
i
]
=
pXRenderFindVisualFormat
(
gdi_display
,
info
.
visual
);
if
(
pict_formats
[
i
])
visual
=
info
.
visual
;
if
(
pict_formats
[
i
])
default_visual
=
info
;
}
}
}
...
...
@@ -395,7 +389,7 @@ const struct gdi_dc_funcs *X11DRV_XRender_Init(void)
return
NULL
;
}
if
(
!
visual
->
red_mask
||
!
visual
->
green_mask
||
!
visual
->
blue_mask
)
if
(
!
default_visual
.
red_mask
||
!
default_visual
.
green_mask
||
!
default_visual
.
blue_mask
)
{
WARN
(
"one or more of the colour masks are 0, disabling XRENDER. Try running in 16-bit mode or higher.
\n
"
);
return
NULL
;
...
...
@@ -435,7 +429,7 @@ sym_not_found:
}
glyphsetCache
[
i
-
1
].
next
=
-
1
;
if
(
screen_
depth
<=
8
||
!
client_side_antialias_with_render
)
antialias
=
0
;
if
(
default_visual
.
depth
<=
8
||
!
client_side_antialias_with_render
)
antialias
=
0
;
return
&
xrender_funcs
;
}
...
...
@@ -1798,7 +1792,7 @@ static DWORD create_image_pixmap( BITMAPINFO *info, const struct gdi_image_bits
GC
gc
;
XImage
*
image
;
image
=
XCreateImage
(
gdi_display
,
visual
,
depth
,
ZPixmap
,
0
,
NULL
,
image
=
XCreateImage
(
gdi_display
,
default_visual
.
visual
,
depth
,
ZPixmap
,
0
,
NULL
,
info
->
bmiHeader
.
biWidth
,
height
,
32
,
0
);
if
(
!
image
)
return
ERROR_OUTOFMEMORY
;
...
...
@@ -2330,14 +2324,13 @@ static HBRUSH xrenderdrv_SelectBrush( PHYSDEV dev, HBRUSH hbrush, const struct b
{
struct
xrender_physdev
*
physdev
=
get_xrender_dev
(
dev
);
Pixmap
pixmap
;
XVisualInfo
vis
;
XVisualInfo
vis
=
default_visual
;
XRenderPictFormat
*
format
=
physdev
->
pict_format
;
if
(
!
pattern
)
goto
x11drv_fallback
;
if
(
pattern
->
info
->
bmiHeader
.
biBitCount
==
1
)
goto
x11drv_fallback
;
if
(
physdev
->
format
==
WXR_FORMAT_MONO
)
goto
x11drv_fallback
;
memset
(
&
vis
,
0
,
sizeof
(
vis
)
);
vis
.
depth
=
format
->
depth
;
vis
.
red_mask
=
format
->
direct
.
redMask
<<
format
->
direct
.
red
;
vis
.
green_mask
=
format
->
direct
.
greenMask
<<
format
->
direct
.
green
;
...
...
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