[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemacs-commit] qemacs haiku.cpp haiku-pe2qe.sh
From: |
Charlie Gordon |
Subject: |
[Qemacs-commit] qemacs haiku.cpp haiku-pe2qe.sh |
Date: |
Tue, 17 Dec 2013 16:01:12 +0000 |
CVSROOT: /sources/qemacs
Module name: qemacs
Changes by: Charlie Gordon <chqrlie> 13/12/17 16:01:12
Removed files:
. : haiku.cpp haiku-pe2qe.sh
Log message:
revert haiku patch
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/qemacs/haiku.cpp?cvsroot=qemacs&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/qemacs/haiku-pe2qe.sh?cvsroot=qemacs&r1=1.1&r2=0
Patches:
Index: haiku.cpp
===================================================================
RCS file: haiku.cpp
diff -N haiku.cpp
--- haiku.cpp 17 Dec 2013 14:55:44 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,883 +0,0 @@
-/*
- * Haiku driver for QEmacs
- * Copyright (c) 2013 Francois Revol.
- * Copyright (c) 2002 Fabrice Bellard.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-extern "C" {
-#include "qe.h"
-}
-
-#include <Application.h>
-#include <Bitmap.h>
-#include <FindDirectory.h>
-#include <Font.h>
-#include <InterfaceDefs.h>
-#include <Path.h>
-#include <Region.h>
-#include <String.h>
-#include <View.h>
-#include <Window.h>
-
-extern QEDisplay haiku_dpy;
-
-static int force_tty = 0;
-
-static int font_xsize;
-
-class QEWindow;
-class QEView;
-
-/* state of a single window */
-typedef struct WindowState {
- BWindow *w;
- BView *v;
- BFont font;
- int events_rd;
- int events_wr;
-} WindowState;
-
-WindowState haiku_ctx;
-static thread_id bapp_thid;
-static int bapp_ref_count = 0;
-static int events_wr;
-
-/* count of pending repaints */
-static vint32 repaints = 0;
-//TODO:use double-buffering with a BBitmap
-
-static void haiku_handle_event(void *opaque);
-
-static status_t bmessage_input(QEWindow *win, QEView *view, BMessage *message)
-{
- if (!message)
- return EINVAL;
- /* push the message into the pipe */
- if (write(events_wr, &message, sizeof(BMessage *)) < 0)
- return errno;
- return B_OK;
-}
-
-class QEWindow : public BWindow {
- public:
- QEWindow(BRect frame, const char *name, QEView *view)
- : BWindow(frame, name, B_TITLED_WINDOW, 0)
- , fView(view)
- {}
-
- virtual ~QEWindow() {}
-
- //virtual void Show();
- //virtual void Hide();
- //virtual void Minimize(bool minimize);
- virtual bool QuitRequested();
- virtual void DispatchMessage(BMessage *message, BHandler *handler);
-
- private:
- QEView *fView;
-};
-
-class QEView : public BView {
- public:
- QEView(BRect frame, const char *name);
- virtual ~QEView();
-
- virtual void MouseDown(BPoint where);
- virtual void MouseUp(BPoint where);
- virtual void MouseMoved(BPoint where, uint32 code, const BMessage
*a_message);
- virtual void KeyDown(const char *bytes, int32 numBytes);
- virtual void KeyUp(const char *bytes, int32 numBytes);
- virtual void Draw(BRect updateRect);
- virtual void FrameResized(float new_width, float new_height);
-#if 0
- virtual void WindowActivated(bool state);
- virtual void MessageReceived(BMessage *message);
-#endif
-};
-
-
-bool QEWindow::QuitRequested()
-{
- BMessage *message = new BMessage(B_QUIT_REQUESTED);
- bmessage_input(this, NULL, message);
- return false;
-}
-
-void QEWindow::DispatchMessage(BMessage *message, BHandler *handler)
-{
- uint32 mods;
-
- switch (message->what) {
- case B_MOUSE_WHEEL_CHANGED:
- {
- BMessage *message = DetachCurrentMessage();
- bmessage_input(this, NULL, message);
- }
- break;
- case B_KEY_DOWN:
- if ((message->FindInt32("modifiers", (int32 *)&mods) == B_OK) &&
- (mods & B_COMMAND_KEY)) {
- /* BWindow swallows KEY_DOWN when ALT is down...
- * so this hack is needed.
- */
- fView->KeyDown(NULL, 0);
- return;
- }
- break;
- case B_UNMAPPED_KEY_DOWN:
- case B_UNMAPPED_KEY_UP:
- case B_KEY_UP:
- //message->PrintToStream();
- break;
- }
- BWindow::DispatchMessage(message, handler);
-}
-
-QEView::QEView(BRect frame, const char *name)
- : BView(frame, name, B_FOLLOW_ALL_SIDES, B_WILL_DRAW|B_FRAME_EVENTS)
-{
- SetViewColor(ui_color(B_DOCUMENT_BACKGROUND_COLOR));
- //SetViewColor(0, 255, 0);
-}
-
-QEView::~QEView()
-{
-}
-
-void QEView::MouseDown(BPoint where)
-{
- BMessage *message = Window()->DetachCurrentMessage();
- bmessage_input(NULL, this, message);
-}
-
-void QEView::MouseUp(BPoint where)
-{
- BMessage *message = Window()->DetachCurrentMessage();
- bmessage_input(NULL, this, message);
-}
-
-void QEView::MouseMoved(BPoint where, uint32 code, const BMessage *a_message)
-{
- BMessage *message = Window()->DetachCurrentMessage();
- bmessage_input(NULL, this, message);
-}
-
-void QEView::KeyDown(const char *bytes, int32 numBytes)
-{
- BMessage *message = Window()->DetachCurrentMessage();
- //message->PrintToStream();
- bmessage_input(NULL, this, message);
-}
-
-void QEView::KeyUp(const char *bytes, int32 numBytes)
-{
- uint32 mods;
- BMessage *message = Window()->DetachCurrentMessage();
- //message->PrintToStream();
- bmessage_input(NULL, this, message);
-}
-
-void QEView::Draw(BRect updateRect)
-{
- BMessage *message = new BMessage(_UPDATE_);
- message->AddRect("update_rect", updateRect);
- atomic_add(&repaints, 1);
- bmessage_input(NULL, this, message);
-}
-
-void QEView::FrameResized(float new_width, float new_height)
-{
- BMessage *message = Window()->DetachCurrentMessage();
- atomic_set(&repaints, 0);
- bmessage_input(NULL, this, message);
- BView::FrameResized(new_width, new_height);
-}
-
-static int haiku_probe(void)
-{
- if (force_tty)
- return 0;
- return 2;
-}
-
-static int32 bapp_quit_thread(void *arg)
-{
- be_app->Lock();
- be_app->Quit();
- return 0;
-}
-
-static int32 bapp_thread(void *arg)
-{
- be_app->Lock();
- be_app->Run();
- return 0;
-}
-
-static void init_application(void)
-{
- bapp_ref_count++;
-
- if (be_app)
- return; /* done already! */
-
- new BApplication("application/x-vnd.Bellard-QEmacs");
- //new XEmacsApp;
- bapp_thid = spawn_thread(bapp_thread, "BApplication(QEmacs)",
- B_NORMAL_PRIORITY, (void *)find_thread(NULL));
- if (bapp_thid < B_OK)
- return; /* #### handle errors */
- if (resume_thread(bapp_thid) < B_OK)
- return;
- // This way we ensure we don't create BWindows before be_app is created
- // (creating it in the thread doesn't ensure this)
- be_app->Unlock();
-}
-
-static void uninit_application(void)
-{
- status_t err;
- if (--bapp_ref_count)
- return;
- be_app->Lock();
- be_app->Quit();
- //XXX:HACK
- be_app->Unlock();
- //be_app_messenger.SendMessage(B_QUIT_REQUESTED);
- wait_for_thread(bapp_thid, &err);
- //FIXME:leak or crash
- //delete be_app;
- be_app = NULL;
-}
-
-static int haiku_init(QEditScreen *s, int w, int h)
-{
- int xsize, ysize, font_ysize;
- WindowState *ctx;
-
- if (!be_app)
- init_application();
-
- memcpy(&s->dpy, &haiku_dpy, sizeof(QEDisplay));
-
- ctx = (WindowState *)malloc(sizeof(WindowState));
- if (ctx == NULL)
- return -1;
- 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;
-
- fcntl(event_pipe[0], F_SETFD, FD_CLOEXEC);
- fcntl(event_pipe[1], F_SETFD, FD_CLOEXEC);
-
- ctx->events_rd = event_pipe[0];
- ctx->events_wr = events_wr = event_pipe[1];
-
- set_read_handler(event_pipe[0], haiku_handle_event, s);
-
- ctx->font = BFont(be_fixed_font);
-
- font_height height;
- ctx->font.GetHeight(&height);
-
- font_xsize = (int)ctx->font.StringWidth("n");
- font_ysize = (int)(height.ascent + height.descent + height.leading + 1);
-
- if (w == 0)
- w = 80;
- if (h == 0)
- h = 25;
- xsize = w * font_xsize;
- ysize = h * font_ysize;
-
- s->width = xsize;
- s->height = ysize;
- s->charset = &charset_utf8;
-
- s->clip_x1 = 0;
- s->clip_y1 = 0;
- s->clip_x2 = s->width;
- s->clip_y2 = s->height;
-
- BRect frame(0, 0, s->width - 1, s->height - 1);
-
- QEView *v = new QEView(frame, "qemacs");
- ctx->v = v;
-
- frame.OffsetTo(200, 200);
-
- ctx->w = new QEWindow(frame, "qemacs", v);
- ctx->w->AddChild(ctx->v);
- ctx->v->MakeFocus();
- //ctx->v->SetViewColor(B_TRANSPARENT_COLOR);
- ctx->v->SetDrawingMode(B_OP_OVER);
-
- ctx->w->Show();
-
- return 0;
-}
-
-static void haiku_close(QEditScreen *s)
-{
- WindowState *ctx = (WindowState *)s->priv_data;
- ctx->w->Lock();
- ctx->w->Quit();
- free(s->priv_data);
-}
-
-static void haiku_flush(QEditScreen *s)
-{
- WindowState *ctx = (WindowState *)s->priv_data;
- //fprintf(stderr, "%s()\n", __FUNCTION__);
-
- ctx->v->LockLooper();
-
- // doesn't really help
- ctx->v->Sync();
-
- ctx->v->UnlockLooper();
-}
-
-static int haiku_is_user_input_pending(QEditScreen *s)
-{
- /* XXX: do it */
- return 0;
-}
-
-/* called when an BMessage is forwarded. dispatch events to qe_handle_event()
*/
-static void haiku_handle_event(void *opaque)
-{
- QEditScreen *s = (QEditScreen *)opaque;
- WindowState *ctx = (WindowState *)s->priv_data;
- unsigned char buf[16];
- bigtime_t timestamp_ms;
- BMessage *event;
- //fprintf(stderr, "%s()\n", __FUNCTION__);
- /*
- KeySym keysym;
- */
- int shift, ctrl, meta, len, key = 0;
- QEEvent ev1, *ev = &ev1;
-
- if (read(ctx->events_rd, &event, sizeof(BMessage *)) < sizeof(BMessage *))
- return;
- //event->PrintToStream();
-
- switch(event->what) {
- case B_QUIT_REQUESTED:
- // cancel pending operation
- ev->key_event.type = QE_KEY_EVENT;
- ev->key_event.key = KEY_CTRL('g');
- qe_handle_event(ev);
-
- // simulate C-x C-c
- ev->key_event.type = QE_KEY_EVENT;
- ev->key_event.key = KEY_CTRL('x');
- qe_handle_event(ev);
- ev->key_event.type = QE_KEY_EVENT;
- ev->key_event.key = KEY_CTRL('c');
- qe_handle_event(ev);
- break;
-
- case _UPDATE_:
- // flush queued repaints
- if (atomic_set(&repaints, 0)) {
- ev->expose_event.type = QE_EXPOSE_EVENT;
- qe_handle_event(ev);
- }
- break;
-
- case B_VIEW_RESIZED:
- {
- int32 width, height;
- int columns, rows;
- //event->PrintToStream();
-/*
- if (event->FindInt32("width", &width) < B_OK)
- break;
- if (event->FindInt32("height", &height) < B_OK)
- break;
-*/
- ctx->v->LockLooper();
-
- width = ctx->v->Bounds().IntegerWidth() + 1;
- height = ctx->v->Bounds().IntegerHeight() + 1;
-
- if (width != s->width || height != s->height)
- ctx->v->Invalidate(ctx->v->Bounds());
-
- s->width = width;
- s->height = height;
-
- ctx->v->UnlockLooper();
-
- //ev->expose_event.type = QE_EXPOSE_EVENT;
- //qe_handle_event(ev);
- }
- break;
-
- case B_MOUSE_MOVED:
- {
- BPoint pt;
-
- ev->button_event.type = QE_MOTION_EVENT;
- ev->button_event.x = (int)pt.x;
- ev->button_event.y = (int)pt.y;
- qe_handle_event(ev);
- }
- break;
-
- case B_MOUSE_DOWN:
- case B_MOUSE_UP:
- {
- BPoint pt;
- uint32 buttons;
-
- if (event->what == B_MOUSE_DOWN)
- ev->button_event.type = QE_BUTTON_PRESS_EVENT;
- else
- ev->button_event.type = QE_BUTTON_RELEASE_EVENT;
-
- if (event->FindPoint("where", &pt) < B_OK)
- pt = BPoint(0,0);
- ev->button_event.x = (int)pt.x;
- ev->button_event.y = (int)pt.y;
-
- if (event->FindInt32("buttons", (int32 *)&buttons) < B_OK)
- buttons = (event->what == B_MOUSE_UP)?0:B_PRIMARY_MOUSE_BUTTON;
-
-
- if (buttons & B_PRIMARY_MOUSE_BUTTON)
- ev->button_event.button = QE_BUTTON_LEFT;
- else if (buttons & B_SECONDARY_MOUSE_BUTTON)
- ev->button_event.button = QE_BUTTON_MIDDLE;
- else if (buttons & B_TERTIARY_MOUSE_BUTTON)
- ev->button_event.button = QE_BUTTON_RIGHT;
-
- qe_handle_event(ev);
- }
- break;
-
- case B_MOUSE_WHEEL_CHANGED:
- {
- float delta;
-
- ev->button_event.type = QE_BUTTON_PRESS_EVENT;
-
- if (event->FindFloat("be:wheel_delta_y", &delta) < B_OK)
- delta = 0.0;
-
- if (delta > 0)
- ev->button_event.button = QE_WHEEL_DOWN;
- else if (delta < 0)
- ev->button_event.button = QE_WHEEL_UP;
- else
- break;
-
- qe_handle_event(ev);
- }
- break;
-
- case B_KEY_UP:
- break;
-
- case B_KEY_DOWN:
- {
- unsigned int mods = 0;
- uint32 state;
- //event->PrintToStream();
- uint32 scancode;
- uint32 raw_char;
- const char *bytes;
- char buff[6];
- int numbytes = 0;
- int i;
-
- if (event->FindInt64("when", ×tamp_ms) < B_OK)
- timestamp_ms = 0LL;
- if (event->FindInt32("modifiers", (int32 *)&state) < B_OK)
- state = modifiers();
- if (event->FindInt32("key", (int32 *)&scancode) < B_OK)
- scancode = 0;
- if (event->FindInt32("raw_char", (int32 *)&raw_char) < B_OK)
- raw_char = 0;
-
- /* check for byte[] first,
- * because C-space gives bytes="" (and byte[0] = '\0')
- */
- for (i = 0; i < 5; i++) {
- buff[i] = '\0';
- if (event->FindInt8("byte", i, (int8 *)&buff[i]) < B_OK)
- break;
- }
-
- if (i) {
- bytes = buff;
- numbytes = i;
- } else
- if (event->FindString("bytes", &bytes) < B_OK) {
- bytes = "";
- }
-
- if (!numbytes)
- numbytes = strlen(bytes);
-
- shift = (state & B_SHIFT_KEY);
- ctrl = (state & B_CONTROL_KEY);
- meta = (state & (B_LEFT_OPTION_KEY | B_COMMAND_KEY));
-
- //fprintf(stderr, "%cshift %cctrl %cmeta numbytes %d \n",
- // shift ? ' ' : '!', ctrl ? ' ' : '!', meta ? ' ' : '!',
numbytes);
-
- char byte = 0;
- if (numbytes == 1) {
- byte = bytes[0];
- if (state & B_CONTROL_KEY)
- byte = (char)raw_char;
- switch (byte) {
- case B_BACKSPACE:
- key = KEY_BS;
- if (meta)
- key = KEY_META(KEY_BS);
- break;
- case B_TAB:
- key = KEY_TAB;
- break;
- case B_ENTER:
- key = KEY_RET;
- break;
- case B_ESCAPE:
- key = KEY_ESC;
- break;
- case B_SPACE:
- key = KEY_SPC;
- break;
- case B_DELETE:
- key = KEY_DELETE;
- break;
- case B_INSERT:
- key = KEY_INSERT;
- break;
- case B_HOME:
- key = ctrl ? KEY_CTRL_HOME : KEY_HOME;
- break;
- case B_END:
- key = ctrl ? KEY_CTRL_END : KEY_END;
- break;
- case B_PAGE_UP:
- key = KEY_PAGEUP;
- break;
- case B_PAGE_DOWN:
- key = KEY_PAGEDOWN;
- break;
- case B_LEFT_ARROW:
- key = ctrl ? KEY_CTRL_LEFT : KEY_LEFT;
- break;
- case B_RIGHT_ARROW:
- key = ctrl ? KEY_CTRL_RIGHT : KEY_RIGHT;
- break;
- case B_UP_ARROW:
- key = KEY_UP;
- break;
- case B_DOWN_ARROW:
- key = KEY_DOWN;
- break;
- case B_FUNCTION_KEY:
- switch (scancode) {
- case B_F1_KEY:
- case B_F2_KEY:
- case B_F3_KEY:
- case B_F4_KEY:
- case B_F5_KEY:
- case B_F6_KEY:
- case B_F7_KEY:
- case B_F8_KEY:
- case B_F9_KEY:
- case B_F10_KEY:
- case B_F11_KEY:
- case B_F12_KEY:
- key = KEY_F1 + scancode - B_F1_KEY;
- break;
- case B_PRINT_KEY:
- case B_SCROLL_KEY:
- case B_PAUSE_KEY:
- default:
- break;
- }
- break;
- case 0:
- break;
- default:
- if (byte >= ' ' && byte <= '~') {
- if (meta)
- key = KEY_META(' ') + byte - ' ';
- else if (ctrl)
- key = KEY_CTRL(byte);
- else
- key = byte;
- }
- }
- } else {
- const char *p = bytes;
- key = utf8_decode(&p);
- }
-
- got_key:
- if (key) {
- ev->key_event.type = QE_KEY_EVENT;
- ev->key_event.key = key;
- qe_handle_event(ev);
- }
- }
- break;
- }
-
- delete event;
-}
-
-static void haiku_fill_rectangle(QEditScreen *s,
- int x1, int y1, int w, int h, QEColor color)
-{
- WindowState *ctx = (WindowState *)s->priv_data;
- //fprintf(stderr, "%s()\n", __FUNCTION__);
- drawing_mode oldMode;
-
- BRect r(x1, y1, x1 + w - 1, y1 + h - 1);
- rgb_color c = { (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff,
0xff };
-
- ctx->v->LockLooper();
-
- oldMode = ctx->v->DrawingMode();
-
- /* XXX: suppress XOR mode */
- if (color == QECOLOR_XOR)
- ctx->v->SetDrawingMode(B_OP_INVERT);
- else
- ctx->v->SetHighColor(c);
- ctx->v->FillRect(r);
-
- /* XXX: suppress XOR mode */
- if (color == QECOLOR_XOR)
- ctx->v->SetDrawingMode(oldMode);
-
- ctx->v->UnlockLooper();
-}
-
-static QEFont *haiku_open_font(QEditScreen *s, int style, int size)
-{
- WindowState *ctx = (WindowState *)s->priv_data;
- //fprintf(stderr, "%s()\n", __FUNCTION__);
- QEFont *font;
-
- font = (QEFont *)malloc(sizeof(QEFont));
- if (!font)
- return NULL;
-
- // TODO: use style / size
- BFont *f = new BFont(ctx->font);
-
- font_height height;
- f->GetHeight(&height);
- font->ascent = (int)height.ascent;
- font->descent = (int)(height.descent + height.leading + 1);
- font->priv_data = f;
- return font;
-}
-
-static void haiku_close_font(QEditScreen *s, QEFont *font)
-{
- BFont *f = (BFont *)font->priv_data;
- delete f;
- free(font);
-}
-
-static void haiku_text_metrics(QEditScreen *s, QEFont *font,
- QECharMetrics *metrics,
- const unsigned int *str, int len)
-{
- //TODO: use BFont::GetEscapements() or StringWidth()
- int i, x;
-
- metrics->font_ascent = font->ascent;
- metrics->font_descent = font->descent;
- x = 0;
- for (i = 0; i < len; i++)
- x += font_xsize;
- metrics->width = x;
-}
-
-static void haiku_draw_text(QEditScreen *s, QEFont *font,
- int x1, int y, const unsigned int *str, int len,
- QEColor color)
-{
- WindowState *ctx = (WindowState *)s->priv_data;
- BFont *f = (BFont *)(font->priv_data);
- int i;
- //fprintf(stderr, "%s()\n", __FUNCTION__);
-
- /* XXX: suppress XOR mode */
- if (color == QECOLOR_XOR)
- color = QERGB(0xff, 0xff, 0xff);
-
- rgb_color c = { (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff,
0xff };
-
- ctx->v->LockLooper();
-
- ctx->v->SetHighColor(c);
- ctx->v->SetLowColor(B_TRANSPARENT_COLOR);
- ctx->v->SetFont(f);
- ctx->v->MovePenTo(x1, y - 1);
-
- char buf[10];
- unsigned int cc;
-
- BString text;
- for (i = 0; i < len; i++) {
- cc = str[i];
- unicode_to_charset(buf, cc, &charset_utf8);
- text << buf;
- //ctx->v->DrawString(buf);
- }
- ctx->v->DrawString(text.String());
-
- ctx->v->UnlockLooper();
-
- //TextOutW(haiku_ctx.hdc, x1, y - font->ascent, buf, len);
-}
-
-static void haiku_set_clip(QEditScreen *s,
- int x, int y, int w, int h)
-{
- WindowState *ctx = (WindowState *)s->priv_data;
- //fprintf(stderr, "%s(,%d, %d, %d, %d)\n", __FUNCTION__, x, y, w, h);
-
- BRegion clip(BRect(x, y, x + w - 1, y + h - 1));
-
- ctx->v->LockLooper();
-
- ctx->v->ConstrainClippingRegion(&clip);
-
- 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;
- b->priv_data = NULL;
-}
-
-extern QEDisplay haiku_dpy = {
- "haiku",
- haiku_probe,
- haiku_init,
- haiku_close,
- haiku_flush,
- haiku_is_user_input_pending,
- haiku_fill_rectangle,
- haiku_open_font,
- haiku_close_font,
- haiku_text_metrics,
- haiku_draw_text,
- haiku_set_clip,
- NULL, /* no selection handling */
- NULL, /* no selection handling */
- NULL, /* dpy_invalidate */
- NULL, /* dpy_cursor_at */
- haiku_bmp_alloc, /* dpy_bmp_alloc */
- haiku_bmp_free, /* dpy_bmp_free */
- NULL, /* dpy_bmp_draw */
- NULL, /* dpy_bmp_lock */
- NULL, /* dpy_bmp_unlock */
- NULL, /* dpy_full_screen */
- NULL, /* next */
-};
-
-static CmdOptionDef cmd_options[] = {
- { "no-windows", "nw", NULL, CMD_OPT_BOOL, "force tty terminal usage",
- { int_ptr: &force_tty }},
- { NULL, NULL, NULL, 0, NULL, { NULL }},
-};
-
-static int haiku_init(void)
-{
- QEmacsState *qs = &qe_state;
-
- /* override default res path, to find config file at native location */
- BPath path;
- BString old(":");
- old << qs->res_path;
- qs->res_path[0] = '\0';
- if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) == B_OK) {
- path.Append("qemacs");
- pstrcat(qs->res_path, sizeof(qs->res_path), path.Path());
- }
- pstrcat(qs->res_path, sizeof(qs->res_path), old.String());
-
- qe_register_cmd_line_options(cmd_options);
- return qe_register_display(&haiku_dpy);
-}
-
-qe_module_init(haiku_init);
Index: haiku-pe2qe.sh
===================================================================
RCS file: haiku-pe2qe.sh
diff -N haiku-pe2qe.sh
--- haiku-pe2qe.sh 17 Dec 2013 14:55:44 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,85 +0,0 @@
-#!/bin/sh
-
-pesettings=`finddir B_USER_SETTINGS_DIRECTORY`/pe/settings
-
-fgmap=(
-"alt comment:"
-"alt error:"
-"alt keyword:"
-"alt number:"
-"alt operator:"
-"alt separator:"
-"altprocessor:"
-"attribute:"
-"char constant:html-entity"
-"comment:comment html-comment"
-"error:"
-"highlight:highlight"
-"invisibles:"
-"keyword:keyword preprocess"
-"low:window-border"
-"mark:status"
-"number:number"
-"operator:function"
-"preprocessor:"
-"selection:selection"
-"separator:"
-"string:string string-q html-string"
-"system identifier:type"
-"tag:tag"
-"tagstring:html-tag"
-"text:default mode-line minibuf"
-"user identifier:variable"
-)
-
-bgmap=(
-"low:default"
-"selection:mode-line window-border region-hilite"
-)
-
-map_pe_fg () {
- for item in "address@hidden"; do
- if [ "$1" = "${item%:*}" ]; then
- echo "${item#*:}"
- return
- fi
- done
-}
-
-map_pe_bg () {
- for item in "address@hidden"; do
- if [ "$1" = "${item%:*}" ]; then
- echo "${item#*:}"
- return
- fi
- done
-}
-
-out_style () {
- echo "set_style(\"$1\", \"$2\", \"$3\")"
-}
-
-echo "// map Pe settings to QEmacs"
-echo "// generated by $(basename "$0") on `date`"
-
-while read line; do
- token="${line%=*}"
- value="${line#*=}"
- case "$token" in
- *color)
- name="${token% color}"
- qenames="$(map_pe_fg "$name")"
- for qename in ${qenames}; do
- #echo "color: $name -> $qename" >&2
- out_style "$qename" "color" "$value"
- done
- qenames="$(map_pe_bg "$name")"
- for qename in ${qenames}; do
- #echo "bgcolor: $name -> $qename" >&2
- out_style "$qename" "background-color" "$value"
- done
- ;;
- *)
- ;;
- esac
-done < "$pesettings"
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemacs-commit] qemacs haiku.cpp haiku-pe2qe.sh,
Charlie Gordon <=