From: Michele Baldessari mich...@redhat.com
Xephyr's pseudocolor emulation added in:
commit 81a3b6fe27567b4f91033ece69996aa6bf8d01a3
Author: Matthew Allum breakf...@10.am
Date: Mon Nov 8 22:39:47 2004 +
Add support to Xephyr for lower depths than hosts
only tracks one global colormap for the whole (Xephyr) display. Move
this to per-screen state so each screen's colormap can be correct.
[ajax: rebased to 1.17, cleaned up commit message]
Reviewed-by: Adam Jackson a...@redhat.com
Signed-off-by: Michele Baldessari mich...@redhat.com
---
hw/kdrive/ephyr/ephyr.c | 2 +-
hw/kdrive/ephyr/ephyr.h | 1 +
hw/kdrive/ephyr/hostx.c | 11 ++-
hw/kdrive/ephyr/hostx.h | 2 +-
4 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/hw/kdrive/ephyr/ephyr.c b/hw/kdrive/ephyr/ephyr.c
index 93a48a9..907bbeb 100644
--- a/hw/kdrive/ephyr/ephyr.c
+++ b/hw/kdrive/ephyr/ephyr.c
@@ -1292,7 +1292,7 @@ ephyrPutColors(ScreenPtr pScreen, int n, xColorItem *
pdefs)
if (p max)
max = p;
-hostx_set_cmap_entry(p,
+hostx_set_cmap_entry(pScreen, p,
pdefs-red 8,
pdefs-green 8, pdefs-blue 8);
pdefs++;
diff --git a/hw/kdrive/ephyr/ephyr.h b/hw/kdrive/ephyr/ephyr.h
index 2395a7f..18bfe11 100644
--- a/hw/kdrive/ephyr/ephyr.h
+++ b/hw/kdrive/ephyr/ephyr.h
@@ -83,6 +83,7 @@ typedef struct _ephyrScrPriv {
KdScreenInfo *screen;
int mynum; /* Screen number */
+unsigned long cmap[256];
/**
* Per-screen Xlib-using state for glamor (private to
diff --git a/hw/kdrive/ephyr/hostx.c b/hw/kdrive/ephyr/hostx.c
index 8d6d5e8..f64861b 100644
--- a/hw/kdrive/ephyr/hostx.c
+++ b/hw/kdrive/ephyr/hostx.c
@@ -82,8 +82,6 @@ struct EphyrHostXVars {
KdScreenInfo **screens;
long damage_debug_msec;
-
-unsigned long cmap[256];
};
/* memset ( missing ) instead of below */
@@ -751,9 +749,12 @@ hostx_calculate_color_shift(unsigned long mask)
}
void
-hostx_set_cmap_entry(unsigned char idx,
+hostx_set_cmap_entry(ScreenPtr pScreen, unsigned char idx,
unsigned char r, unsigned char g, unsigned char b)
{
+KdScreenPriv(pScreen);
+KdScreenInfo *screen = pScreenPriv-screen;
+EphyrScrPriv *scrpriv = screen-driver;
/* need to calculate the shifts for RGB because server could be BGR. */
/* XXX Not sure if this is correct for 8 on 16, but this works for 8 on 24.*/
static int rshift, bshift, gshift = 0;
@@ -765,7 +766,7 @@ hostx_set_cmap_entry(unsigned char idx,
gshift = hostx_calculate_color_shift(HostX.visual-green_mask);
bshift = hostx_calculate_color_shift(HostX.visual-blue_mask);
}
-HostX.cmap[idx] = ((r rshift) HostX.visual-red_mask) |
+scrpriv-cmap[idx] = ((r rshift) HostX.visual-red_mask) |
((g gshift) HostX.visual-green_mask) |
((b bshift) HostX.visual-blue_mask);
}
@@ -1017,7 +1018,7 @@ hostx_paint_rect(KdScreenInfo *screen,
unsigned char pixel =
*(unsigned char *) (scrpriv-fb_data + idx);
xcb_image_put_pixel(scrpriv-ximg, x, y,
-HostX.cmap[pixel]);
+scrpriv-cmap[pixel]);
break;
}
default:
diff --git a/hw/kdrive/ephyr/hostx.h b/hw/kdrive/ephyr/hostx.h
index 87acd5a..93aaa50 100644
--- a/hw/kdrive/ephyr/hostx.h
+++ b/hw/kdrive/ephyr/hostx.h
@@ -141,7 +141,7 @@ hostx_get_visual_masks(KdScreenInfo *screen,
CARD32 *rmsk, CARD32 *gmsk, CARD32 *bmsk);
void
-hostx_set_cmap_entry(unsigned char idx,
+hostx_set_cmap_entry(ScreenPtr pScreen, unsigned char idx,
unsigned char r, unsigned char g, unsigned char b);
void *hostx_screen_init(KdScreenInfo *screen,
--
1.9.3
___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel