winex11: Create a default colormap along with the default visual info.
This commit is contained in:
parent
988f2fde86
commit
3c57f11374
|
@ -56,7 +56,6 @@ static int COLOR_gapStart = 256;
|
||||||
static int COLOR_gapEnd = -1;
|
static int COLOR_gapEnd = -1;
|
||||||
static int COLOR_gapFilled = 0;
|
static int COLOR_gapFilled = 0;
|
||||||
|
|
||||||
Colormap X11DRV_PALETTE_PaletteXColormap = 0;
|
|
||||||
UINT16 X11DRV_PALETTE_PaletteFlags = 0;
|
UINT16 X11DRV_PALETTE_PaletteFlags = 0;
|
||||||
|
|
||||||
/* initialize to zero to handle abortive X11DRV_PALETTE_VIRTUAL visuals */
|
/* initialize to zero to handle abortive X11DRV_PALETTE_VIRTUAL visuals */
|
||||||
|
@ -161,9 +160,10 @@ int X11DRV_PALETTE_Init(void)
|
||||||
{
|
{
|
||||||
XSetWindowAttributes win_attr;
|
XSetWindowAttributes win_attr;
|
||||||
|
|
||||||
X11DRV_PALETTE_PaletteXColormap = XCreateColormap( gdi_display, root_window,
|
XFreeColormap( gdi_display, default_colormap );
|
||||||
default_visual.visual, AllocAll );
|
default_colormap = XCreateColormap( gdi_display, root_window,
|
||||||
if (X11DRV_PALETTE_PaletteXColormap)
|
default_visual.visual, AllocAll );
|
||||||
|
if (default_colormap)
|
||||||
{
|
{
|
||||||
X11DRV_PALETTE_PaletteFlags |= (X11DRV_PALETTE_PRIVATE | X11DRV_PALETTE_WHITESET);
|
X11DRV_PALETTE_PaletteFlags |= (X11DRV_PALETTE_PRIVATE | X11DRV_PALETTE_WHITESET);
|
||||||
|
|
||||||
|
@ -173,19 +173,14 @@ int X11DRV_PALETTE_Init(void)
|
||||||
|
|
||||||
if( root_window != DefaultRootWindow(gdi_display) )
|
if( root_window != DefaultRootWindow(gdi_display) )
|
||||||
{
|
{
|
||||||
win_attr.colormap = X11DRV_PALETTE_PaletteXColormap;
|
win_attr.colormap = default_colormap;
|
||||||
XChangeWindowAttributes( gdi_display, root_window, CWColormap, &win_attr );
|
XChangeWindowAttributes( gdi_display, root_window, CWColormap, &win_attr );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
X11DRV_PALETTE_PaletteXColormap = XCreateColormap(gdi_display, root_window,
|
|
||||||
default_visual.visual, AllocNone);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case StaticGray:
|
case StaticGray:
|
||||||
X11DRV_PALETTE_PaletteXColormap = XCreateColormap(gdi_display, root_window,
|
|
||||||
default_visual.visual, AllocNone);
|
|
||||||
X11DRV_PALETTE_PaletteFlags |= X11DRV_PALETTE_FIXED;
|
X11DRV_PALETTE_PaletteFlags |= X11DRV_PALETTE_FIXED;
|
||||||
X11DRV_PALETTE_Graymax = (1 << default_visual.depth)-1;
|
X11DRV_PALETTE_Graymax = (1 << default_visual.depth)-1;
|
||||||
break;
|
break;
|
||||||
|
@ -203,13 +198,9 @@ int X11DRV_PALETTE_Init(void)
|
||||||
for( white = palette_size - 1; !(white & 1); white >>= 1 )
|
for( white = palette_size - 1; !(white & 1); white >>= 1 )
|
||||||
monoPlane++;
|
monoPlane++;
|
||||||
X11DRV_PALETTE_PaletteFlags = (white & mask) ? X11DRV_PALETTE_WHITESET : 0;
|
X11DRV_PALETTE_PaletteFlags = (white & mask) ? X11DRV_PALETTE_WHITESET : 0;
|
||||||
X11DRV_PALETTE_PaletteXColormap = XCreateColormap(gdi_display, root_window,
|
|
||||||
default_visual.visual, AllocNone);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
X11DRV_PALETTE_PaletteXColormap = XCreateColormap(gdi_display, root_window,
|
|
||||||
default_visual.visual, AllocNone);
|
|
||||||
X11DRV_PALETTE_PaletteFlags |= X11DRV_PALETTE_FIXED;
|
X11DRV_PALETTE_PaletteFlags |= X11DRV_PALETTE_FIXED;
|
||||||
X11DRV_PALETTE_ComputeColorShifts(&X11DRV_PALETTE_default_shifts, default_visual.red_mask, default_visual.green_mask, default_visual.blue_mask);
|
X11DRV_PALETTE_ComputeColorShifts(&X11DRV_PALETTE_default_shifts, default_visual.red_mask, default_visual.green_mask, default_visual.blue_mask);
|
||||||
}
|
}
|
||||||
|
@ -218,8 +209,6 @@ int X11DRV_PALETTE_Init(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TRACE(" visual class %i (%i)\n", default_visual.class, monoPlane);
|
|
||||||
|
|
||||||
GetPaletteEntries( GetStockObject(DEFAULT_PALETTE), 0, NB_RESERVED_COLORS, sys_pal_template );
|
GetPaletteEntries( GetStockObject(DEFAULT_PALETTE), 0, NB_RESERVED_COLORS, sys_pal_template );
|
||||||
|
|
||||||
if( X11DRV_PALETTE_PaletteFlags & X11DRV_PALETTE_VIRTUAL )
|
if( X11DRV_PALETTE_PaletteFlags & X11DRV_PALETTE_VIRTUAL )
|
||||||
|
@ -349,7 +338,7 @@ static BOOL X11DRV_PALETTE_BuildPrivateMap( const PALETTEENTRY *sys_pal_template
|
||||||
|
|
||||||
color.flags = DoRed | DoGreen | DoBlue;
|
color.flags = DoRed | DoGreen | DoBlue;
|
||||||
color.pixel = i;
|
color.pixel = i;
|
||||||
XStoreColor(gdi_display, X11DRV_PALETTE_PaletteXColormap, &color);
|
XStoreColor(gdi_display, default_colormap, &color);
|
||||||
|
|
||||||
/* Set EGA mapping if color is from the first or last eight */
|
/* Set EGA mapping if color is from the first or last eight */
|
||||||
|
|
||||||
|
@ -396,7 +385,7 @@ static BOOL X11DRV_PALETTE_BuildSharedMap( const PALETTEENTRY *sys_pal_template
|
||||||
defaultColors[i].pixel = (long) i;
|
defaultColors[i].pixel = (long) i;
|
||||||
XQueryColors(gdi_display, defaultCM, &defaultColors[0], copy_default_colors);
|
XQueryColors(gdi_display, defaultCM, &defaultColors[0], copy_default_colors);
|
||||||
for (i = 0; i < copy_default_colors; i++)
|
for (i = 0; i < copy_default_colors; i++)
|
||||||
XAllocColor( gdi_display, X11DRV_PALETTE_PaletteXColormap, &defaultColors[i] );
|
XAllocColor( gdi_display, default_colormap, &defaultColors[i] );
|
||||||
|
|
||||||
if (alloc_system_colors > 256) alloc_system_colors = 256;
|
if (alloc_system_colors > 256) alloc_system_colors = 256;
|
||||||
else if (alloc_system_colors < 20) alloc_system_colors = 20;
|
else if (alloc_system_colors < 20) alloc_system_colors = 20;
|
||||||
|
@ -413,7 +402,7 @@ static BOOL X11DRV_PALETTE_BuildSharedMap( const PALETTEENTRY *sys_pal_template
|
||||||
color.blue = sys_pal_template[i].peBlue * 65535 / 255;
|
color.blue = sys_pal_template[i].peBlue * 65535 / 255;
|
||||||
color.flags = DoRed | DoGreen | DoBlue;
|
color.flags = DoRed | DoGreen | DoBlue;
|
||||||
|
|
||||||
if (!XAllocColor( gdi_display, X11DRV_PALETTE_PaletteXColormap, &color ))
|
if (!XAllocColor( gdi_display, default_colormap, &color ))
|
||||||
{
|
{
|
||||||
XColor best, c;
|
XColor best, c;
|
||||||
|
|
||||||
|
@ -442,7 +431,7 @@ static BOOL X11DRV_PALETTE_BuildSharedMap( const PALETTEENTRY *sys_pal_template
|
||||||
best.pixel = best.red = best.green = best.blue = 0;
|
best.pixel = best.red = best.green = best.blue = 0;
|
||||||
for( c.pixel = 0, diff = 0x7fffffff; c.pixel < max; c.pixel += step )
|
for( c.pixel = 0, diff = 0x7fffffff; c.pixel < max; c.pixel += step )
|
||||||
{
|
{
|
||||||
XQueryColor(gdi_display, X11DRV_PALETTE_PaletteXColormap, &c);
|
XQueryColor(gdi_display, default_colormap, &c);
|
||||||
r = (c.red - color.red)>>8;
|
r = (c.red - color.red)>>8;
|
||||||
g = (c.green - color.green)>>8;
|
g = (c.green - color.green)>>8;
|
||||||
b = (c.blue - color.blue)>>8;
|
b = (c.blue - color.blue)>>8;
|
||||||
|
@ -450,7 +439,7 @@ static BOOL X11DRV_PALETTE_BuildSharedMap( const PALETTEENTRY *sys_pal_template
|
||||||
if( r < diff ) { best = c; diff = r; }
|
if( r < diff ) { best = c; diff = r; }
|
||||||
}
|
}
|
||||||
|
|
||||||
if( XAllocColor(gdi_display, X11DRV_PALETTE_PaletteXColormap, &best) )
|
if( XAllocColor(gdi_display, default_colormap, &best) )
|
||||||
color.pixel = best.pixel;
|
color.pixel = best.pixel;
|
||||||
else color.pixel = (i < NB_RESERVED_COLORS/2)? bp : wp;
|
else color.pixel = (i < NB_RESERVED_COLORS/2)? bp : wp;
|
||||||
}
|
}
|
||||||
|
@ -492,12 +481,12 @@ static BOOL X11DRV_PALETTE_BuildSharedMap( const PALETTEENTRY *sys_pal_template
|
||||||
{
|
{
|
||||||
c_val = (c_max + c_min)/2 + (c_max + c_min)%2;
|
c_val = (c_max + c_min)/2 + (c_max + c_min)%2;
|
||||||
|
|
||||||
if( !XAllocColorCells(gdi_display, X11DRV_PALETTE_PaletteXColormap, False,
|
if( !XAllocColorCells(gdi_display, default_colormap, False,
|
||||||
plane_masks, 0, pixDynMapping, c_val) )
|
plane_masks, 0, pixDynMapping, c_val) )
|
||||||
c_max = c_val - 1;
|
c_max = c_val - 1;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
XFreeColors(gdi_display, X11DRV_PALETTE_PaletteXColormap, pixDynMapping, c_val, 0);
|
XFreeColors(gdi_display, default_colormap, pixDynMapping, c_val, 0);
|
||||||
c_min = c_val;
|
c_min = c_val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -508,7 +497,7 @@ static BOOL X11DRV_PALETTE_BuildSharedMap( const PALETTEENTRY *sys_pal_template
|
||||||
c_min = (c_min/2) + (c_min/2); /* need even set for split palette */
|
c_min = (c_min/2) + (c_min/2); /* need even set for split palette */
|
||||||
|
|
||||||
if( c_min > 0 )
|
if( c_min > 0 )
|
||||||
if( !XAllocColorCells(gdi_display, X11DRV_PALETTE_PaletteXColormap, False,
|
if( !XAllocColorCells(gdi_display, default_colormap, False,
|
||||||
plane_masks, 0, pixDynMapping, c_min) )
|
plane_masks, 0, pixDynMapping, c_min) )
|
||||||
{
|
{
|
||||||
WARN("Inexplicable failure during colorcell allocation.\n");
|
WARN("Inexplicable failure during colorcell allocation.\n");
|
||||||
|
@ -674,7 +663,7 @@ static void X11DRV_PALETTE_FillDefaultColors( const PALETTEENTRY *sys_pal_templa
|
||||||
color.green = COLOR_sysPal[idx].peGreen << 8;
|
color.green = COLOR_sysPal[idx].peGreen << 8;
|
||||||
color.blue = COLOR_sysPal[idx].peBlue << 8;
|
color.blue = COLOR_sysPal[idx].peBlue << 8;
|
||||||
color.flags = DoRed | DoGreen | DoBlue;
|
color.flags = DoRed | DoGreen | DoBlue;
|
||||||
XStoreColor(gdi_display, X11DRV_PALETTE_PaletteXColormap, &color);
|
XStoreColor(gdi_display, default_colormap, &color);
|
||||||
}
|
}
|
||||||
idx = X11DRV_PALETTE_freeList[idx];
|
idx = X11DRV_PALETTE_freeList[idx];
|
||||||
}
|
}
|
||||||
|
@ -694,11 +683,11 @@ static void X11DRV_PALETTE_FillDefaultColors( const PALETTEENTRY *sys_pal_templa
|
||||||
{
|
{
|
||||||
xc.pixel = i;
|
xc.pixel = i;
|
||||||
|
|
||||||
XQueryColor(gdi_display, X11DRV_PALETTE_PaletteXColormap, &xc);
|
XQueryColor(gdi_display, default_colormap, &xc);
|
||||||
r = xc.red>>8; g = xc.green>>8; b = xc.blue>>8;
|
r = xc.red>>8; g = xc.green>>8; b = xc.blue>>8;
|
||||||
|
|
||||||
if( xc.pixel < 256 && X11DRV_PALETTE_CheckSysColor( sys_pal_template, RGB(r, g, b)) &&
|
if( xc.pixel < 256 && X11DRV_PALETTE_CheckSysColor( sys_pal_template, RGB(r, g, b)) &&
|
||||||
XAllocColor(gdi_display, X11DRV_PALETTE_PaletteXColormap, &xc) )
|
XAllocColor(gdi_display, default_colormap, &xc) )
|
||||||
{
|
{
|
||||||
X11DRV_PALETTE_XPixelToPalette[xc.pixel] = idx;
|
X11DRV_PALETTE_XPixelToPalette[xc.pixel] = idx;
|
||||||
X11DRV_PALETTE_PaletteToXPixel[idx] = xc.pixel;
|
X11DRV_PALETTE_PaletteToXPixel[idx] = xc.pixel;
|
||||||
|
@ -796,7 +785,7 @@ COLORREF X11DRV_PALETTE_ToLogical(X11DRV_PDEVICE *physDev, int pixel)
|
||||||
}
|
}
|
||||||
|
|
||||||
color.pixel = pixel;
|
color.pixel = pixel;
|
||||||
XQueryColor(gdi_display, X11DRV_PALETTE_PaletteXColormap, &color);
|
XQueryColor(gdi_display, default_colormap, &color);
|
||||||
return RGB(color.red >> 8, color.green >> 8, color.blue >> 8);
|
return RGB(color.red >> 8, color.green >> 8, color.blue >> 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1210,7 +1199,7 @@ UINT X11DRV_RealizePalette( PHYSDEV dev, HPALETTE hpal, BOOL primary )
|
||||||
color.green = entries[i].peGreen << 8;
|
color.green = entries[i].peGreen << 8;
|
||||||
color.blue = entries[i].peBlue << 8;
|
color.blue = entries[i].peBlue << 8;
|
||||||
color.flags = DoRed | DoGreen | DoBlue;
|
color.flags = DoRed | DoGreen | DoBlue;
|
||||||
XStoreColor(gdi_display, X11DRV_PALETTE_PaletteXColormap, &color);
|
XStoreColor(gdi_display, default_colormap, &color);
|
||||||
|
|
||||||
COLOR_sysPal[index] = entries[i];
|
COLOR_sysPal[index] = entries[i];
|
||||||
COLOR_sysPal[index].peFlags = flag;
|
COLOR_sysPal[index].peFlags = flag;
|
||||||
|
|
|
@ -311,7 +311,7 @@ static void get_x11_rect_offset( struct x11drv_win_data *data, RECT *rect )
|
||||||
static int get_window_attributes( struct x11drv_win_data *data, XSetWindowAttributes *attr )
|
static int get_window_attributes( struct x11drv_win_data *data, XSetWindowAttributes *attr )
|
||||||
{
|
{
|
||||||
attr->override_redirect = !data->managed;
|
attr->override_redirect = !data->managed;
|
||||||
attr->colormap = X11DRV_PALETTE_PaletteXColormap;
|
attr->colormap = default_colormap;
|
||||||
attr->save_under = ((GetClassLongW( data->hwnd, GCL_STYLE ) & CS_SAVEBITS) != 0);
|
attr->save_under = ((GetClassLongW( data->hwnd, GCL_STYLE ) & CS_SAVEBITS) != 0);
|
||||||
attr->bit_gravity = NorthWestGravity;
|
attr->bit_gravity = NorthWestGravity;
|
||||||
attr->win_gravity = StaticGravity;
|
attr->win_gravity = StaticGravity;
|
||||||
|
|
|
@ -245,7 +245,6 @@ extern Display *gdi_display DECLSPEC_HIDDEN; /* display to use for all GDI func
|
||||||
#define X11DRV_PALETTE_PRIVATE 0x1000 /* private colormap, identity mapping */
|
#define X11DRV_PALETTE_PRIVATE 0x1000 /* private colormap, identity mapping */
|
||||||
#define X11DRV_PALETTE_WHITESET 0x2000
|
#define X11DRV_PALETTE_WHITESET 0x2000
|
||||||
|
|
||||||
extern Colormap X11DRV_PALETTE_PaletteXColormap DECLSPEC_HIDDEN;
|
|
||||||
extern UINT16 X11DRV_PALETTE_PaletteFlags DECLSPEC_HIDDEN;
|
extern UINT16 X11DRV_PALETTE_PaletteFlags DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
extern int *X11DRV_PALETTE_PaletteToXPixel DECLSPEC_HIDDEN;
|
extern int *X11DRV_PALETTE_PaletteToXPixel DECLSPEC_HIDDEN;
|
||||||
|
@ -348,6 +347,7 @@ static inline size_t get_property_size( int format, unsigned long count )
|
||||||
}
|
}
|
||||||
|
|
||||||
extern XVisualInfo default_visual DECLSPEC_HIDDEN;
|
extern XVisualInfo default_visual DECLSPEC_HIDDEN;
|
||||||
|
extern Colormap default_colormap DECLSPEC_HIDDEN;
|
||||||
extern XPixmapFormatValues **pixmap_formats DECLSPEC_HIDDEN;
|
extern XPixmapFormatValues **pixmap_formats DECLSPEC_HIDDEN;
|
||||||
extern Window root_window DECLSPEC_HIDDEN;
|
extern Window root_window DECLSPEC_HIDDEN;
|
||||||
extern int clipping_cursor DECLSPEC_HIDDEN;
|
extern int clipping_cursor DECLSPEC_HIDDEN;
|
||||||
|
|
|
@ -57,6 +57,7 @@ WINE_DECLARE_DEBUG_CHANNEL(synchronous);
|
||||||
WINE_DECLARE_DEBUG_CHANNEL(winediag);
|
WINE_DECLARE_DEBUG_CHANNEL(winediag);
|
||||||
|
|
||||||
XVisualInfo default_visual = { 0 };
|
XVisualInfo default_visual = { 0 };
|
||||||
|
Colormap default_colormap = None;
|
||||||
XPixmapFormatValues **pixmap_formats;
|
XPixmapFormatValues **pixmap_formats;
|
||||||
unsigned int screen_width;
|
unsigned int screen_width;
|
||||||
unsigned int screen_height;
|
unsigned int screen_height;
|
||||||
|
@ -509,6 +510,8 @@ static void init_visuals( Display *display, int screen )
|
||||||
default_visual.colormap_size = default_visual.visual->map_entries;
|
default_visual.colormap_size = default_visual.visual->map_entries;
|
||||||
default_visual.bits_per_rgb = default_visual.visual->bits_per_rgb;
|
default_visual.bits_per_rgb = default_visual.visual->bits_per_rgb;
|
||||||
}
|
}
|
||||||
|
default_colormap = XCreateColormap( gdi_display, root_window, default_visual.visual, AllocNone );
|
||||||
|
TRACE( "default visual %lx class %u\n", default_visual.visualid, default_visual.class );
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
|
Loading…
Reference in New Issue