diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/video_out/video_out_vidix.c | 5 | ||||
-rw-r--r-- | src/video_out/video_out_xshm.c | 5 | ||||
-rw-r--r-- | src/video_out/video_out_xv.c | 17 | ||||
-rw-r--r-- | src/video_out/x11osd.c | 384 | ||||
-rw-r--r-- | src/video_out/x11osd.h | 9 |
5 files changed, 295 insertions, 125 deletions
diff --git a/src/video_out/video_out_vidix.c b/src/video_out/video_out_vidix.c index d7a58b587..bc25fc102 100644 --- a/src/video_out/video_out_vidix.c +++ b/src/video_out/video_out_vidix.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_out_vidix.c,v 1.59 2004/01/07 22:25:22 jstembridge Exp $ + * $Id: video_out_vidix.c,v 1.60 2004/04/10 15:31:10 miguelfreitas Exp $ * * video_out_vidix.c * @@ -1118,7 +1118,8 @@ static vo_driver_t *vidix_open_plugin (video_driver_class_t *class_gen, const vo query_fourccs(this); XLockDisplay (this->display); - this->xoverlay = x11osd_create (this->xine, this->display, this->screen, this->drawable); + this->xoverlay = x11osd_create (this->xine, this->display, this->screen, + this->drawable, X11OSD_SHAPED); XUnlockDisplay (this->display); if( this->xoverlay ) diff --git a/src/video_out/video_out_xshm.c b/src/video_out/video_out_xshm.c index fba668713..297a6d7d1 100644 --- a/src/video_out/video_out_xshm.c +++ b/src/video_out/video_out_xshm.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_out_xshm.c,v 1.128 2004/04/10 03:34:37 miguelfreitas Exp $ + * $Id: video_out_xshm.c,v 1.129 2004/04/10 15:31:10 miguelfreitas Exp $ * * video_out_xshm.c, X11 shared memory extension interface for xine * @@ -1230,7 +1230,8 @@ static vo_driver_t *xshm_open_plugin (video_driver_class_t *class_gen, const voi this->yuv2rgb_saturation); XLockDisplay (this->display); - this->xoverlay = x11osd_create (this->xine, this->display, this->screen, this->drawable); + this->xoverlay = x11osd_create (this->xine, this->display, this->screen, + this->drawable, X11OSD_SHAPED); XUnlockDisplay (this->display); return &this->vo_driver; diff --git a/src/video_out/video_out_xv.c b/src/video_out/video_out_xv.c index 6104c55d9..cf192db6f 100644 --- a/src/video_out/video_out_xv.c +++ b/src/video_out/video_out_xv.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_out_xv.c,v 1.195 2004/04/09 15:29:33 mroi Exp $ + * $Id: video_out_xv.c,v 1.196 2004/04/10 15:31:10 miguelfreitas Exp $ * * video_out_xv.c, X11 video extension interface for xine * @@ -1107,8 +1107,11 @@ static void xv_check_capability (xv_driver_t *this, xv_set_property (&this->vo_driver, property, entry->num_value); if (strcmp(str_prop, "XV_COLORKEY") == 0) { - this->use_colorkey = 1; + this->use_colorkey |= 1; this->colorkey = entry->num_value; + } else if(strcmp(str_prop, "XV_AUTOPAINT_COLORKEY") == 0) { + if(entry->num_value==1) + this->use_colorkey |= 2; /* colorkey is autopainted */ } } else this->props[property].value = int_default; @@ -1367,7 +1370,15 @@ static vo_driver_t *open_plugin (video_driver_class_t *class_gen, const void *vi this->deinterlace_enabled = 0; XLockDisplay (this->display); - this->xoverlay = x11osd_create (this->xine, this->display, this->screen, this->drawable); + if(this->use_colorkey==1) { + this->xoverlay = x11osd_create (this->xine, this->display, this->screen, + this->drawable, X11OSD_COLORKEY); + if(this->xoverlay) + x11osd_colorkey(this->xoverlay, this->colorkey, &this->sc); + } else { + this->xoverlay = x11osd_create (this->xine, this->display, this->screen, + this->drawable, X11OSD_SHAPED); + } XUnlockDisplay (this->display); if( this->xoverlay ) diff --git a/src/video_out/x11osd.c b/src/video_out/x11osd.c index d47449434..1385b1a36 100644 --- a/src/video_out/x11osd.c +++ b/src/video_out/x11osd.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: x11osd.c,v 1.7 2004/03/23 09:29:25 esnel Exp $ + * $Id: x11osd.c,v 1.8 2004/04/10 15:31:10 miguelfreitas Exp $ * * x11osd.c, use X11 Nonrectangular Window Shape Extension to draw xine OSD * @@ -25,6 +25,8 @@ * * based on ideas and code of * xosd Copyright (c) 2000 Andre Renaud (andre@ignavus.net) + * + * colorkey support by Yann Vernier */ #include <stdarg.h> @@ -52,48 +54,116 @@ struct x11osd { Display *display; int screen; + enum x11osd_mode mode; + + union { + struct { + Window window; + Pixmap mask_bitmap; + GC mask_gc; + GC mask_gc_back; + int mapped; + } shaped; + struct { + uint32_t colorkey; + vo_scale_t *scaling; + int bordercount; + XRectangle borders[4]; + } colorkey; + } u; Window window; - Window parent_window; unsigned int depth; - Pixmap mask_bitmap; Pixmap bitmap; Visual *visual; Colormap cmap; GC gc; - GC mask_gc; - GC mask_gc_back; int width; int height; int x; int y; - int clean; - int mapped; + enum {DRAWN, WIPED, UNDEFINED} clean; xine_t *xine; }; +static void x11osd_colorkey_compute_borders(x11osd *osd) +{ + assert (osd); + assert (osd->mode==X11OSD_COLORKEY); + + if(osd->u.colorkey.scaling) { + XRectangle *r=osd->u.colorkey.borders; + vo_scale_t *scaling=osd->u.colorkey.scaling; + int tmp, count=0; + + if(scaling->output_yoffset>0) { + r->x=r->y=0; + r->width=osd->width; + r->height=scaling->output_yoffset; + r++; + count++; + } + tmp=osd->height-scaling->output_yoffset-scaling->output_height; + if(tmp>0) { + r->x=0; + r->width=osd->width; + r->y=osd->height-tmp; + r->height=tmp; + r++; + count++; + } + if(scaling->output_xoffset>0) { + r->x=0; + r->y=scaling->output_yoffset; + r->width=scaling->output_xoffset; + r->height=scaling->output_height; + r++; + count++; + } + tmp=osd->width-scaling->output_xoffset-scaling->output_width; + if(tmp>0) { + r->x=osd->width-tmp; + r->y=scaling->output_yoffset; + r->width=tmp; + r->height=scaling->output_height; + r++; + count++; + } + osd->u.colorkey.bordercount=count; + } + else + osd->u.colorkey.bordercount=0; +} + void x11osd_expose (x11osd * osd) { assert (osd); - XShapeCombineMask (osd->display, osd->window, ShapeBounding, 0, 0, - osd->mask_bitmap, ShapeSet); - - if( !osd->clean ) { + switch (osd->mode) { + case X11OSD_SHAPED: + XShapeCombineMask (osd->display, osd->u.shaped.window, ShapeBounding, 0, 0, + osd->u.shaped.mask_bitmap, ShapeSet); + if( osd->clean==DRAWN ) { - if( !osd->mapped ) - XMapRaised (osd->display, osd->window); - osd->mapped = 1; + if( !osd->u.shaped.mapped ) + XMapRaised (osd->display, osd->u.shaped.window); + osd->u.shaped.mapped = 1; - XCopyArea (osd->display, osd->bitmap, osd->window, osd->gc, 0, 0, - osd->width, osd->height, 0, 0); - } else { - if( osd->mapped ) - XUnmapWindow (osd->display, osd->window); - osd->mapped = 0; + XCopyArea (osd->display, osd->bitmap, osd->u.shaped.window, osd->gc, 0, 0, + osd->width, osd->height, 0, 0); + } else { + if( osd->u.shaped.mapped ) + XUnmapWindow (osd->display, osd->u.shaped.window); + osd->u.shaped.mapped = 0; + } + break; + case X11OSD_COLORKEY: + if( osd->clean!=UNDEFINED ) + XCopyArea (osd->display, osd->bitmap, osd->window, osd->gc, 0, 0, + osd->width, osd->height, 0, 0); } } @@ -102,26 +172,39 @@ void x11osd_resize (x11osd * osd, int width, int height) { assert (osd); + osd->clean=UNDEFINED; + if(osd->width==width && osd->height==height) + return; osd->width = width; osd->height = height; - XResizeWindow (osd->display, osd->window, osd->width, osd->height); - XFreePixmap (osd->display, osd->mask_bitmap); - osd->mask_bitmap = - XCreatePixmap (osd->display, osd->window, osd->width, osd->height, - 1); - XFillRectangle (osd->display, osd->mask_bitmap, osd->mask_gc_back, - 0, 0, osd->width, osd->height); - XFreePixmap (osd->display, osd->bitmap); - osd->bitmap = - XCreatePixmap (osd->display, osd->window, osd->width, - osd->height, osd->depth); + switch(osd->mode) { + case X11OSD_SHAPED: + XResizeWindow (osd->display, osd->u.shaped.window, osd->width, osd->height); + XFreePixmap (osd->display, osd->u.shaped.mask_bitmap); + osd->u.shaped.mask_bitmap = + XCreatePixmap (osd->display, osd->u.shaped.window, osd->width, osd->height, + 1); + XFillRectangle (osd->display, osd->u.shaped.mask_bitmap, osd->u.shaped.mask_gc_back, + 0, 0, osd->width, osd->height); + osd->bitmap = + XCreatePixmap (osd->display, osd->u.shaped.window, + osd->width, osd->height, osd->depth); + break; + case X11OSD_COLORKEY: + osd->bitmap = + XCreatePixmap (osd->display, osd->window, + osd->width, osd->height, osd->depth); + break; + } } void x11osd_drawable_changed (x11osd * osd, Window window) { + XSetWindowAttributes attr; + assert (osd); /* @@ -132,40 +215,51 @@ x11osd_drawable_changed (x11osd * osd, Window window) XFreeGC (osd->display, osd->mask_gc_back); */ XFreePixmap (osd->display, osd->bitmap); - XFreePixmap (osd->display, osd->mask_bitmap); XFreeColormap (osd->display, osd->cmap); - XDestroyWindow (osd->display, osd->window); /* we need to call XSync(), because otherwise, calling XDestroyWindow() on the parent window could destroy our OSD window twice !! */ XSync (osd->display, False); - osd->parent_window = window; - osd->window = XCreateSimpleWindow (osd->display, - osd->parent_window, - 0, 0, - osd->width, osd->height, 1, - BlackPixel (osd->display, osd->screen), - BlackPixel (osd->display, osd->screen)); - - osd->mask_bitmap = - XCreatePixmap (osd->display, osd->window, osd->width, osd->height, - 1); - XFillRectangle (osd->display, osd->mask_bitmap, osd->mask_gc_back, - 0, 0, osd->width, osd->height); - - osd->bitmap = - XCreatePixmap (osd->display, osd->window, osd->width, - osd->height, osd->depth); + osd->window = window; - osd->cmap = XCreateColormap(osd->display, osd->window, + switch(osd->mode) { + case X11OSD_SHAPED: + XFreePixmap (osd->display, osd->u.shaped.mask_bitmap); + XDestroyWindow (osd->display, osd->u.shaped.window); + + attr.override_redirect = True; + attr.background_pixel = BlackPixel (osd->display, osd->screen); + osd->u.shaped.window = XCreateWindow(osd->display, osd->window, + 0, 0, osd->width, osd->height, 0, + CopyFromParent, CopyFromParent, CopyFromParent, + CWBackPixel | CWOverrideRedirect, &attr); + + XSelectInput (osd->display, osd->u.shaped.window, ExposureMask); + osd->u.shaped.mapped = 0; + + osd->u.shaped.mask_bitmap = XCreatePixmap (osd->display, osd->u.shaped.window, + osd->width, osd->height, 1); + XFillRectangle (osd->display, osd->u.shaped.mask_bitmap, osd->u.shaped.mask_gc_back, + 0, 0, osd->width, osd->height); + + osd->bitmap = XCreatePixmap (osd->display, osd->u.shaped.window, osd->width, + osd->height, osd->depth); + + osd->cmap = XCreateColormap(osd->display, osd->u.shaped.window, + osd->visual, AllocNone); + break; + case X11OSD_COLORKEY: + osd->bitmap = XCreatePixmap (osd->display, osd->window, osd->width, + osd->height, osd->depth); + /*x11osd_colorkey_compute_borders(osd);*/ + osd->cmap = XCreateColormap(osd->display, osd->window, osd->visual, AllocNone); - XSelectInput (osd->display, osd->window, ExposureMask); - - osd->clean = 0; - x11osd_clear(osd); - osd->mapped = 0; + break; + } + + osd->clean = UNDEFINED; x11osd_expose(osd); } @@ -178,7 +272,7 @@ static int x11_error_handler(Display *dpy, XErrorEvent *error) } x11osd * -x11osd_create (xine_t *xine, Display *display, int screen, Window window) +x11osd_create (xine_t *xine, Display *display, int screen, Window window, enum x11osd_mode mode) { x11osd *osd; int event_basep, error_basep; @@ -189,15 +283,11 @@ x11osd_create (xine_t *xine, Display *display, int screen, Window window) if (!osd) return NULL; + osd->mode = mode; osd->xine = xine; osd->display = display; osd->screen = screen; - osd->parent_window = window; - - if (!XShapeQueryExtension (osd->display, &event_basep, &error_basep)) { - xprintf(osd->xine, XINE_VERBOSITY_LOG, _("x11osd: XShape extension not available. unscaled overlay disabled.\n")); - goto error2; - } + osd->window = window; x11_error = False; old_handler = XSetErrorHandler(x11_error_handler); @@ -207,63 +297,87 @@ x11osd_create (xine_t *xine, Display *display, int screen, Window window) osd->width = XDisplayWidth (osd->display, osd->screen); osd->height = XDisplayHeight (osd->display, osd->screen); - attr.override_redirect = True; - attr.background_pixel = BlackPixel (osd->display, osd->screen); - osd->window = XCreateWindow(osd->display, osd->parent_window, + switch (mode) { + case X11OSD_SHAPED: + if (!XShapeQueryExtension (osd->display, &event_basep, &error_basep)) { + xprintf(osd->xine, XINE_VERBOSITY_LOG, _("x11osd: XShape extension not available. unscaled overlay disabled.\n")); + goto error2; + } + + attr.override_redirect = True; + attr.background_pixel = BlackPixel (osd->display, osd->screen); + osd->u.shaped.window = XCreateWindow(osd->display, osd->window, 0, 0, osd->width, osd->height, 0, CopyFromParent, CopyFromParent, CopyFromParent, CWBackPixel | CWOverrideRedirect, &attr); - XSync(osd->display, False); - if( x11_error ) { - xprintf(osd->xine, XINE_VERBOSITY_LOG, _("x11osd: error creating window. unscaled overlay disabled.\n")); - goto error3; - } + XSync(osd->display, False); + if( x11_error ) { + xprintf(osd->xine, XINE_VERBOSITY_LOG, _("x11osd: error creating window. unscaled overlay disabled.\n")); + goto error_window; + } - osd->mask_bitmap = - XCreatePixmap (osd->display, osd->window, osd->width, + osd->u.shaped.mask_bitmap = XCreatePixmap (osd->display, osd->u.shaped.window, osd->width, osd->height, 1); - XSync(osd->display, False); - if( x11_error ) { - xprintf(osd->xine, XINE_VERBOSITY_LOG, _("x11osd: error creating pixmap. unscaled overlay disabled.\n")); - goto error4; - } + XSync(osd->display, False); + if( x11_error ) { + xprintf(osd->xine, XINE_VERBOSITY_LOG, _("x11osd: error creating pixmap. unscaled overlay disabled.\n")); + goto error_aftermaskbitmap; + } - osd->bitmap = - XCreatePixmap (osd->display, osd->window, osd->width, + osd->bitmap = XCreatePixmap (osd->display, osd->u.shaped.window, osd->width, osd->height, osd->depth); - XSync(osd->display, False); - if( x11_error ) { - xprintf(osd->xine, XINE_VERBOSITY_LOG, _("x11osd: error creating pixmap. unscaled overlay disabled.\n")); - goto error5; - } - - osd->gc = XCreateGC (osd->display, osd->window, 0, NULL); - osd->mask_gc = XCreateGC (osd->display, osd->mask_bitmap, 0, NULL); - osd->mask_gc_back = XCreateGC (osd->display, osd->mask_bitmap, 0, NULL); + osd->gc = XCreateGC (osd->display, osd->u.shaped.window, 0, NULL); - XSetForeground (osd->display, osd->mask_gc_back, - BlackPixel (osd->display, osd->screen)); - XSetBackground (osd->display, osd->mask_gc_back, + osd->u.shaped.mask_gc = XCreateGC (osd->display, osd->u.shaped.mask_bitmap, 0, NULL); + XSetForeground (osd->display, osd->u.shaped.mask_gc, WhitePixel (osd->display, osd->screen)); + XSetBackground (osd->display, osd->u.shaped.mask_gc, + BlackPixel (osd->display, osd->screen)); - XSetForeground (osd->display, osd->mask_gc, - WhitePixel (osd->display, osd->screen)); - XSetBackground (osd->display, osd->mask_gc, + + osd->u.shaped.mask_gc_back = XCreateGC (osd->display, osd->u.shaped.mask_bitmap, 0, NULL); + XSetForeground (osd->display, osd->u.shaped.mask_gc_back, BlackPixel (osd->display, osd->screen)); + XSetBackground (osd->display, osd->u.shaped.mask_gc_back, + WhitePixel (osd->display, osd->screen)); - osd->cmap = XCreateColormap(osd->display, osd->window, + XSelectInput (osd->display, osd->u.shaped.window, ExposureMask); + osd->u.shaped.mapped = 0; + osd->cmap = XCreateColormap(osd->display, osd->u.shaped.window, + osd->visual, AllocNone); + break; + case X11OSD_COLORKEY: + osd->bitmap = XCreatePixmap (osd->display, osd->window, osd->width, + osd->height, osd->depth); + /*x11osd_colorkey_compute_borders(osd); done in x11osd_colorkey */ + osd->gc = XCreateGC (osd->display, osd->window, 0, NULL); + osd->cmap = XCreateColormap(osd->display, osd->window, osd->visual, AllocNone); + /* FIXME: the expose event doesn't seem to happen? */ + /*XSelectInput (osd->display, osd->window, ExposureMask);*/ + break; + default: + goto error2; + } - XSelectInput (osd->display, osd->window, ExposureMask); + XSync(osd->display, False); + if( x11_error ) { + xprintf(osd->xine, XINE_VERBOSITY_LOG, _("x11osd: error creating pixmap. unscaled overlay disabled.\n")); + goto error_pixmap; + } - osd->clean = 0; - x11osd_clear(osd); - osd->mapped = 0; - x11osd_expose(osd); + osd->clean = UNDEFINED; + if(mode==X11OSD_SHAPED) { + x11osd_expose(osd); + } XSetErrorHandler(old_handler); + xprintf(osd->xine, XINE_VERBOSITY_DEBUG, + _("x11osd: unscaled overlay created (%s mode).\n"), + (mode==X11OSD_SHAPED) ? "XShape" : "Colorkey" ); + return osd; /* @@ -272,18 +386,32 @@ x11osd_create (xine_t *xine, Display *display, int screen, Window window) XFreeGC (osd->display, osd->mask_gc_back); */ -error5: +error_pixmap: XFreePixmap (osd->display, osd->bitmap); -error4: - XFreePixmap (osd->display, osd->mask_bitmap); -error3: - XDestroyWindow (osd->display, osd->window); +error_aftermaskbitmap: + if(mode==X11OSD_SHAPED) + XFreePixmap (osd->display, osd->u.shaped.mask_bitmap); +error_window: + if(mode==X11OSD_SHAPED) + XDestroyWindow (osd->display, osd->u.shaped.window); XSetErrorHandler(old_handler); error2: free (osd); return NULL; } +void x11osd_colorkey(x11osd * osd, uint32_t colorkey, vo_scale_t *scaling) +{ + assert (osd); + assert (osd->mode==X11OSD_COLORKEY); + + osd->u.colorkey.colorkey=colorkey; + osd->u.colorkey.scaling=scaling; + /*x11osd_colorkey_compute_borders(osd); + x11osd_clear(osd); Workaround: we clear on the first blend instead. + x11osd_expose(osd);*/ +} + void x11osd_destroy (x11osd * osd) { @@ -291,22 +419,43 @@ x11osd_destroy (x11osd * osd) assert (osd); XFreeGC (osd->display, osd->gc); - XFreeGC (osd->display, osd->mask_gc); - XFreeGC (osd->display, osd->mask_gc_back); XFreePixmap (osd->display, osd->bitmap); - XFreePixmap (osd->display, osd->mask_bitmap); XFreeColormap (osd->display, osd->cmap); - XDestroyWindow (osd->display, osd->window); + if(osd->mode==X11OSD_SHAPED) { + XFreeGC (osd->display, osd->u.shaped.mask_gc); + XFreeGC (osd->display, osd->u.shaped.mask_gc_back); + XFreePixmap (osd->display, osd->u.shaped.mask_bitmap); + XDestroyWindow (osd->display, osd->u.shaped.window); + } free (osd); } void x11osd_clear(x11osd *osd) { - if( !osd->clean ) - XFillRectangle (osd->display, osd->mask_bitmap, osd->mask_gc_back, - 0, 0, osd->width, osd->height); - osd->clean = 1; + if( osd->clean!=WIPED ) + switch (osd->mode) { + case X11OSD_SHAPED: + XFillRectangle (osd->display, osd->u.shaped.mask_bitmap, osd->u.shaped.mask_gc_back, + 0, 0, osd->width, osd->height); + break; + case X11OSD_COLORKEY: + XSetForeground(osd->display, osd->gc, osd->u.colorkey.colorkey); + if(osd->u.colorkey.scaling) { + x11osd_colorkey_compute_borders(osd); + XFillRectangle (osd->display, osd->bitmap, osd->gc, + osd->u.colorkey.scaling->output_xoffset, + osd->u.colorkey.scaling->output_yoffset, + osd->u.colorkey.scaling->output_width, + osd->u.colorkey.scaling->output_height); + XSetForeground(osd->display, osd->gc, BlackPixel(osd->display, osd->screen)); + XFillRectangles (osd->display, osd->bitmap, osd->gc, + osd->u.colorkey.borders, osd->u.colorkey.bordercount); + } else + XFillRectangle (osd->display, osd->bitmap, osd->gc, 0, 0, osd->width, osd->height); + break; + } + osd->clean = WIPED; } #define TRANSPARENT 0xffffffff @@ -315,6 +464,8 @@ void x11osd_clear(x11osd *osd) void x11osd_blend(x11osd *osd, vo_overlay_t *overlay) { + if (osd->clean==UNDEFINED) + x11osd_clear(osd); /* Workaround. Colorkey mode needs scaling data before the clear. */ if (overlay->rle) { int i, x, y, len, width; int use_clip_palette, max_palette_colour[2]; @@ -405,7 +556,8 @@ void x11osd_blend(x11osd *osd, vo_overlay_t *overlay) if(palette[use_clip_palette][overlay->rle[i].color] != TRANSPARENT) { XSetForeground(osd->display, osd->gc, palette[use_clip_palette][overlay->rle[i].color]); XFillRectangle(osd->display, osd->bitmap, osd->gc, overlay->x + x, overlay->y + y, width, 1); - XFillRectangle(osd->display, osd->mask_bitmap, osd->mask_gc, overlay->x + x, overlay->y + y, width, 1); + if(osd->mode==X11OSD_SHAPED) + XFillRectangle(osd->display, osd->u.shaped.mask_bitmap, osd->u.shaped.mask_gc, overlay->x + x, overlay->y + y, width, 1); } x += width; @@ -415,7 +567,7 @@ void x11osd_blend(x11osd *osd, vo_overlay_t *overlay) } } } + osd->clean = DRAWN; } - osd->clean = 0; } diff --git a/src/video_out/x11osd.h b/src/video_out/x11osd.h index 23be5df11..3fae9968d 100644 --- a/src/video_out/x11osd.h +++ b/src/video_out/x11osd.h @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: x11osd.h,v 1.3 2003/12/05 15:55:04 f1rmb Exp $ + * $Id: x11osd.h,v 1.4 2004/04/10 15:31:10 miguelfreitas Exp $ * * x11osd.h, use X11 Nonrectangular Window Shape Extension to draw xine OSD * @@ -30,9 +30,14 @@ #ifndef X11OSD_H #define X11OSD_H +#include "vo_scale.h" + typedef struct x11osd x11osd; +enum x11osd_mode {X11OSD_SHAPED, X11OSD_COLORKEY}; + +x11osd *x11osd_create (xine_t *xine, Display *display, int screen, Window window, enum x11osd_mode mode); -x11osd *x11osd_create (xine_t *xine, Display *display, int screen, Window window); +void x11osd_colorkey(x11osd * osd, uint32_t colorkey, vo_scale_t *scaling); void x11osd_destroy (x11osd * osd); |