From f39745860e66bfdc6a8d6e952a6bb382aec9d70b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Revol?= Date: Fri, 15 Mar 2013 00:41:20 +0000 Subject: [PATCH] Start of bitmap support for qemacs Unfortunately it seems bitmap support in qemacs depends on an antique version of ffmpeg, so it's currently broken. --- .../qemacs/patches/qemacs-0.3.2dev-cvs.patch | 98 ++++++++++++++++--- 1 file changed, 83 insertions(+), 15 deletions(-) diff --git a/app-editors/qemacs/patches/qemacs-0.3.2dev-cvs.patch b/app-editors/qemacs/patches/qemacs-0.3.2dev-cvs.patch index 3123689a4..221df31ba 100644 --- a/app-editors/qemacs/patches/qemacs-0.3.2dev-cvs.patch +++ b/app-editors/qemacs/patches/qemacs-0.3.2dev-cvs.patch @@ -4,7 +4,7 @@ RCS file: /sources/qemacs/qemacs/Makefile,v retrieving revision 1.50 diff -u -r1.50 Makefile --- Makefile 5 Jun 2008 07:14:12 -0000 1.50 -+++ Makefile 14 Mar 2013 18:56:51 -0000 ++++ Makefile 14 Mar 2013 23:32:46 -0000 @@ -63,7 +63,7 @@ endif @@ -35,6 +35,15 @@ diff -u -r1.50 Makefile endif ifdef CONFIG_QSCRIPT +@@ -143,7 +148,7 @@ + OBJS+= video.o image.o + DEP_LIBS+= $(FFMPEG_LIBDIR)/libavcodec/libavcodec.a $(FFMPEG_LIBDIR)/libavformat/libavformat.a + LIBS+= -L$(FFMPEG_LIBDIR)/libavcodec -L$(FFMPEG_LIBDIR)/libavformat -lavformat -lavcodec -lz -lpthread +- DEFINES+= -I$(FFMPEG_SRCDIR)/libavcodec -I$(FFMPEG_SRCDIR)/libavformat ++ DEFINES+= -I$(FFMPEG_SRCDIR) -I$(FFMPEG_SRCDIR)/libavcodec -I$(FFMPEG_SRCDIR)/libavformat + TARGETS+= ffplay$(EXE) + endif + @@ -226,6 +231,9 @@ $(OBJS_DIR)/%.o: %.c qe.h qestyles.h config.h config.mak Makefile $(CC) $(DEFINES) $(CFLAGS) -o $@ -c $< @@ -61,7 +70,7 @@ RCS file: /sources/qemacs/qemacs/cfb.c,v retrieving revision 1.8 diff -u -r1.8 cfb.c --- cfb.c 8 Apr 2008 06:55:44 -0000 1.8 -+++ cfb.c 14 Mar 2013 18:56:51 -0000 ++++ cfb.c 14 Mar 2013 23:32:46 -0000 @@ -50,7 +50,7 @@ static void cfb16_fill_rectangle(QEditScreen *s, int x1, int y1, int w, int h, QEColor color) @@ -122,7 +131,7 @@ RCS file: /sources/qemacs/qemacs/configure,v retrieving revision 1.15 diff -u -r1.15 configure --- configure 17 Apr 2008 15:06:44 -0000 1.15 -+++ configure 14 Mar 2013 18:56:51 -0000 ++++ configure 14 Mar 2013 23:32:46 -0000 @@ -45,9 +45,11 @@ ptsname="yes" gprof="no" @@ -207,7 +216,7 @@ RCS file: /sources/qemacs/qemacs/display.h,v retrieving revision 1.11 diff -u -r1.11 display.h --- display.h 11 Jan 2008 11:29:28 -0000 1.11 -+++ display.h 14 Mar 2013 18:56:52 -0000 ++++ display.h 14 Mar 2013 23:32:46 -0000 @@ -53,7 +53,7 @@ int refcount; int ascent; @@ -217,7 +226,14 @@ diff -u -r1.11 display.h int system_font; /* TRUE if system font */ /* cache data */ int style; -@@ -153,7 +153,7 @@ +@@ -148,12 +148,12 @@ + QECharset *charset; /* the charset of the TTY, XXX: suppress that, + use a system in fonts instead */ + int media; /* media type (see CSS_MEDIA_xxx) */ +- int bitmap_format; /* supported bitmap format */ +- int video_format; /* supported video format */ ++ QEBitmapFormat bitmap_format; /* supported bitmap format */ ++ QEBitmapFormat video_format; /* supported video format */ /* clip region handling */ int clip_x1, clip_y1; int clip_x2, clip_y2; @@ -232,7 +248,7 @@ RCS file: /sources/qemacs/qemacs/fbfrender.c,v retrieving revision 1.10 diff -u -r1.10 fbfrender.c --- fbfrender.c 8 Jan 2008 16:37:54 -0000 1.10 -+++ fbfrender.c 14 Mar 2013 18:56:52 -0000 ++++ fbfrender.c 14 Mar 2013 23:32:46 -0000 @@ -124,7 +124,7 @@ static GlyphCache *fbf_decode_glyph1(QEFont *font, int code) @@ -257,7 +273,7 @@ RCS file: /sources/qemacs/qemacs/html2png.c,v retrieving revision 1.12 diff -u -r1.12 html2png.c --- html2png.c 11 Jan 2008 11:29:28 -0000 1.12 -+++ html2png.c 14 Mar 2013 18:56:52 -0000 ++++ html2png.c 14 Mar 2013 23:32:47 -0000 @@ -135,7 +135,7 @@ /* realloc ppm bitmap */ static int ppm_resize(QEditScreen *s, int w, int h) @@ -319,7 +335,7 @@ RCS file: /sources/qemacs/qemacs/qe.h,v retrieving revision 1.96 diff -u -r1.96 qe.h --- qe.h 4 May 2008 15:54:39 -0000 1.96 -+++ qe.h 14 Mar 2013 18:56:53 -0000 ++++ qe.h 14 Mar 2013 23:32:48 -0000 @@ -267,11 +267,11 @@ int ustristart(const unsigned int *str, const char *val, const unsigned int **ptr); static inline unsigned int *umemmove(unsigned int *dest, @@ -340,7 +356,7 @@ RCS file: /sources/qemacs/qemacs/tty.c,v retrieving revision 1.50 diff -u -r1.50 tty.c --- tty.c 23 Apr 2008 15:30:33 -0000 1.50 -+++ tty.c 14 Mar 2013 18:56:54 -0000 ++++ tty.c 14 Mar 2013 23:32:49 -0000 @@ -118,7 +118,7 @@ tty_screen = s; @@ -436,7 +452,7 @@ RCS file: /sources/qemacs/qemacs/win32.c,v retrieving revision 1.15 diff -u -r1.15 win32.c --- win32.c 23 Apr 2008 15:29:35 -0000 1.15 -+++ win32.c 14 Mar 2013 18:56:54 -0000 ++++ win32.c 14 Mar 2013 23:32:49 -0000 @@ -139,7 +139,7 @@ if (!_hPrev) init_application(); @@ -461,7 +477,7 @@ RCS file: /sources/qemacs/qemacs/x11.c,v retrieving revision 1.28 diff -u -r1.28 x11.c --- x11.c 15 Apr 2008 23:24:04 -0000 1.28 -+++ x11.c 14 Mar 2013 18:56:54 -0000 ++++ x11.c 14 Mar 2013 23:32:49 -0000 @@ -194,7 +194,7 @@ QEStyleDef default_style; XGCValues gc_val; @@ -567,8 +583,8 @@ diff -u -r1.28 x11.c XSetFont(display, gc, xfont->fid); XDrawString16(display, dbuffer, gc, x_start, y, x11_str, l); --- /dev/null 2013-03-14 16:10:28.351668000 +0100 -+++ haiku.cpp 2013-03-14 19:43:57.698351616 +0100 -@@ -0,0 +1,831 @@ ++++ haiku.cpp 2013-03-14 20:51:17.995622912 +0100 +@@ -0,0 +1,883 @@ +/* + * Haiku driver for QEmacs + * Copyright (c) 2013 François Revol. @@ -593,6 +609,7 @@ diff -u -r1.28 x11.c +} + +#include ++#include +#include +#include +#include @@ -852,6 +869,10 @@ diff -u -r1.28 x11.c + s->priv_data = ctx; + s->media = CSS_MEDIA_SCREEN; + ++ s->bitmap_format = QEBITMAP_FORMAT_RGBA32; ++ /* BBitmap supports overlay, but not planar data */ ++ //s->video_format = QEBITMAP_FORMAT_RGBA32; ++ + int event_pipe[2]; + if (pipe(event_pipe) < 0) + return -1; @@ -1348,6 +1369,53 @@ diff -u -r1.28 x11.c + ctx->v->UnlockLooper(); +} + ++static int haiku_bmp_alloc(QEditScreen *s, QEBitmap *b) ++{ ++ BBitmap *bitmap; ++ color_space space = B_RGBA32; ++ uint32 flags = 0; ++ ++ b->format = s->bitmap_format; ++ if (b->flags & QEBITMAP_FLAG_VIDEO) { ++ b->format = s->video_format; ++ } ++fprintf(stderr, "%s(, [w %d, h %d])\n", __FUNCTION__, b->width, b->height); ++ switch (b->format) { ++ case QEBITMAP_FORMAT_RGB565: ++ space = B_RGB16; ++ break; ++ case QEBITMAP_FORMAT_RGB555: ++ space = B_RGB15; ++ break; ++ case QEBITMAP_FORMAT_RGB24: ++ space = B_RGB24; ++ break; ++ case QEBITMAP_FORMAT_RGBA32: ++ space = B_RGBA32; ++ break; ++ case QEBITMAP_FORMAT_YUV420P: ++ // we don't support planar overlays ++ default: ++ return -1; ++ } ++ ++ BRect bounds(0, 0, b->width - 1, b->height - 1); ++ bitmap = new BBitmap(bounds, flags, space); ++ if (bitmap->InitCheck() != B_OK) { ++ delete bitmap; ++ return -1; ++ } ++ b->priv_data = bitmap; ++ ++ return 0; ++} ++ ++static void haiku_bmp_free(__unused__ QEditScreen *s, QEBitmap *b) ++{ ++ BBitmap *bitmap = (BBitmap *)b->priv_data; ++ delete bitmap; ++} ++ +extern QEDisplay haiku_dpy = { + "haiku", + haiku_probe, @@ -1365,8 +1433,8 @@ diff -u -r1.28 x11.c + NULL, /* no selection handling */ + NULL, /* dpy_invalidate */ + NULL, /* dpy_cursor_at */ -+ NULL, /* dpy_bmp_alloc */ -+ NULL, /* dpy_bmp_free */ ++ haiku_bmp_alloc, /* dpy_bmp_alloc */ ++ haiku_bmp_free, /* dpy_bmp_free */ + NULL, /* dpy_bmp_draw */ + NULL, /* dpy_bmp_lock */ + NULL, /* dpy_bmp_unlock */