Xnest: use xcb for creating / destroying pixmaps
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
parent
43b73eb527
commit
e39ebbab54
|
@ -26,6 +26,7 @@ is" without express or implied warranty.
|
|||
#include "mipointrst.h"
|
||||
|
||||
#include "Xnest.h"
|
||||
#include "xnest-xcb.h"
|
||||
|
||||
#include "Display.h"
|
||||
#include "Screen.h"
|
||||
|
@ -40,7 +41,6 @@ Bool
|
|||
xnestRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)
|
||||
{
|
||||
XImage *ximage;
|
||||
Pixmap source, mask;
|
||||
XColor fg_color, bg_color;
|
||||
unsigned long valuemask;
|
||||
XGCValues values;
|
||||
|
@ -56,13 +56,13 @@ xnestRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)
|
|||
|
||||
XChangeGC(xnestDisplay, xnestBitmapGC, valuemask, &values);
|
||||
|
||||
source = XCreatePixmap(xnestDisplay,
|
||||
xnestDefaultWindows[pScreen->myNum],
|
||||
pCursor->bits->width, pCursor->bits->height, 1);
|
||||
uint32_t winId = xnestDefaultWindows[pScreen->myNum];
|
||||
|
||||
mask = XCreatePixmap(xnestDisplay,
|
||||
xnestDefaultWindows[pScreen->myNum],
|
||||
pCursor->bits->width, pCursor->bits->height, 1);
|
||||
Pixmap source = xcb_generate_id(xnestUpstreamInfo.conn);
|
||||
xcb_create_pixmap(xnestUpstreamInfo.conn, 1, source, winId, pCursor->bits->width, pCursor->bits->height);
|
||||
|
||||
Pixmap mask = xcb_generate_id(xnestUpstreamInfo.conn);
|
||||
xcb_create_pixmap(xnestUpstreamInfo.conn, 1, mask, winId, pCursor->bits->width, pCursor->bits->height);
|
||||
|
||||
ximage = XCreateImage(xnestDisplay,
|
||||
xnestDefaultVisual(pScreen),
|
||||
|
@ -101,8 +101,8 @@ xnestRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)
|
|||
XCreatePixmapCursor(xnestDisplay, source, mask, &fg_color, &bg_color,
|
||||
pCursor->bits->xhot, pCursor->bits->yhot);
|
||||
|
||||
XFreePixmap(xnestDisplay, source);
|
||||
XFreePixmap(xnestDisplay, mask);
|
||||
xcb_free_pixmap(xnestUpstreamInfo.conn, source);
|
||||
xcb_free_pixmap(xnestUpstreamInfo.conn, mask);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -143,9 +143,13 @@ xnestOpenDisplay(int argc, char *argv[])
|
|||
for (j = 0; j < xnestNumDepths; j++)
|
||||
if (xnestPixmapFormats[i].depth == 1 ||
|
||||
xnestPixmapFormats[i].depth == xnestDepths[j]) {
|
||||
xnestDefaultDrawables[xnestPixmapFormats[i].depth] =
|
||||
XCreatePixmap(xnestDisplay, xnestUpstreamInfo.screenInfo->root,
|
||||
1, 1, xnestPixmapFormats[i].depth);
|
||||
uint32_t pixmap = xcb_generate_id(xnestUpstreamInfo.conn);
|
||||
xcb_create_pixmap(xnestUpstreamInfo.conn,
|
||||
xnestPixmapFormats[i].depth,
|
||||
pixmap,
|
||||
xnestUpstreamInfo.screenInfo->root,
|
||||
1, 1);
|
||||
xnestDefaultDrawables[xnestPixmapFormats[i].depth] = pixmap;
|
||||
}
|
||||
|
||||
xnestBitmapGC = XCreateGC(xnestDisplay, xnestDefaultDrawables[1], 0L, NULL);
|
||||
|
|
|
@ -26,6 +26,7 @@ is" without express or implied warranty.
|
|||
#include "mi.h"
|
||||
|
||||
#include "Xnest.h"
|
||||
#include "xnest-xcb.h"
|
||||
|
||||
#include "Display.h"
|
||||
#include "Screen.h"
|
||||
|
@ -56,11 +57,12 @@ xnestCreatePixmap(ScreenPtr pScreen, int width, int height, int depth,
|
|||
pPixmap->refcnt = 1;
|
||||
pPixmap->devKind = PixmapBytePad(width, depth);
|
||||
pPixmap->usage_hint = usage_hint;
|
||||
if (width && height)
|
||||
xnestPixmapPriv(pPixmap)->pixmap =
|
||||
XCreatePixmap(xnestDisplay,
|
||||
xnestDefaultWindows[pScreen->myNum],
|
||||
width, height, depth);
|
||||
if (width && height) {
|
||||
uint32_t pixmap = xcb_generate_id(xnestUpstreamInfo.conn);
|
||||
xcb_create_pixmap(xnestUpstreamInfo.conn, depth, pixmap,
|
||||
xnestDefaultWindows[pScreen->myNum], width, height);
|
||||
xnestPixmapPriv(pPixmap)->pixmap = pixmap;
|
||||
}
|
||||
else
|
||||
xnestPixmapPriv(pPixmap)->pixmap = 0;
|
||||
|
||||
|
@ -72,7 +74,7 @@ xnestDestroyPixmap(PixmapPtr pPixmap)
|
|||
{
|
||||
if (--pPixmap->refcnt)
|
||||
return TRUE;
|
||||
XFreePixmap(xnestDisplay, xnestPixmap(pPixmap));
|
||||
xcb_free_pixmap(xnestUpstreamInfo.conn, xnestPixmap(pPixmap));
|
||||
FreePixmap(pPixmap);
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -82,10 +84,11 @@ xnestModifyPixmapHeader(PixmapPtr pPixmap, int width, int height, int depth,
|
|||
int bitsPerPixel, int devKind, void *pPixData)
|
||||
{
|
||||
if(!xnestPixmapPriv(pPixmap)->pixmap && width > 0 && height > 0) {
|
||||
xnestPixmapPriv(pPixmap)->pixmap =
|
||||
XCreatePixmap(xnestDisplay,
|
||||
uint32_t pixmap = xcb_generate_id(xnestUpstreamInfo.conn);
|
||||
xcb_create_pixmap(xnestUpstreamInfo.conn, depth, pixmap,
|
||||
xnestDefaultWindows[pPixmap->drawable.pScreen->myNum],
|
||||
width, height, depth);
|
||||
width, height);
|
||||
xnestPixmapPriv(pPixmap)->pixmap = pixmap;
|
||||
}
|
||||
|
||||
return miModifyPixmapHeader(pPixmap, width, height, depth,
|
||||
|
|
Loading…
Reference in New Issue