X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/micropolis/blobdiff_plain/efad9d6d0b164bd37c84a9581dbf6397c7ffb3fa..06fa6a70a8ac0c94b675f748d91f968ed6c6578e:/src/sim/w_x.c diff --git a/src/sim/w_x.c b/src/sim/w_x.c index 513072e..ef42536 100644 --- a/src/sim/w_x.c +++ b/src/sim/w_x.c @@ -327,28 +327,43 @@ FindXDisplay(Tk_Window tkwin) color->pixel; \ break; \ case 15: \ + if (xd->visual->red_mask == 0x7c00) { \ xd->pixels[i] = \ (((color->red >> (8 + 3)) & 0x1f) << (5 + 5)) | \ (((color->green >> (8 + 2)) & 0x1f) << (5)) | \ (((color->blue >> (8 + 3)) & 0x1f) << (0)); \ + } else { \ + (((color->blue >> (8 + 3)) & 0x1f) << (5 + 5)) | \ + (((color->green >> (8 + 2)) & 0x1f) << (5)) | \ + (((color->red >> (8 + 3)) & 0x1f) << (0)); \ + } \ break; \ case 16: \ + if (xd->visual->red_mask == 0xf800) { \ xd->pixels[i] = \ (((color->red >> (8 + 3)) & 0x1f) << (6 + 5)) | \ (((color->green >> (8 + 2)) & 0x3f) << (5)) | \ (((color->blue >> (8 + 3)) & 0x1f) << (0)); \ + } else { \ + xd->pixels[i] = \ + (((color->blue >> (8 + 3)) & 0x1f) << (6 + 5)) | \ + (((color->green >> (8 + 2)) & 0x3f) << (5)) | \ + (((color->red >> (8 + 3)) & 0x1f) << (0)); \ + } \ break; \ case 24: \ + case 32: \ + if (xd->visual->red_mask == 0xff0000) { \ xd->pixels[i] = \ ((color->red & 0xff) << 16) | \ ((color->green & 0xff) << 8) | \ ((color->blue & 0xff) << 0); \ - break; \ - case 32: \ + } else { \ xd->pixels[i] = \ - ((color->red & 0xff) << 16) | \ + ((color->blue & 0xff) << 16) | \ ((color->green & 0xff) << 8) | \ - ((color->blue & 0xff) << 0); \ + ((color->red & 0xff) << 0); \ + } \ break; \ } \ } \ @@ -441,9 +456,7 @@ FindXDisplay(Tk_Window tkwin) } else { fprintf(stderr, "Cool, I found the shared memory extension!\n"); - fprintf(stderr, - "Disabled SHM, because it is currently broken!\n"); - xd->shared = 0; + xd->shared = 1; } } } @@ -585,10 +598,8 @@ InitNewView(SimView *view, char *title, int class, int w, int h) view->type = X_Mem_View; } - if ((ImageByteOrder(view->x->dpy) == MSBFirst) == !(*(unsigned char*) (&test))) - view->x->needs_swap = 0; - else - view->x->needs_swap = 1; + view->x->needs_swap = !(*(unsigned char*) (&test)); + view->x->x_big_endian = (ImageByteOrder(view->x->dpy) == MSBFirst); GetPixmaps(view->x); @@ -600,8 +611,6 @@ InitNewView(SimView *view, char *title, int class, int w, int h) view->pan_x = w / 2; view->pan_y = h / 2; DoResizeView(view, w, h); - GetViewTiles(view); - return (view); } @@ -1147,7 +1156,7 @@ DoResizeView(SimView *view, int w, int h) view->pixel_bytes = 2; view->depth = 15; bitmap_pad = 16; - bitmap_depth = 16; + bitmap_depth = 15; view->line_bytes8 = ((view->m_width * view->pixel_bytes) + 3) & (~3); break; @@ -1233,6 +1242,9 @@ DoResizeView(SimView *view, int w, int h) } } } + + GetViewTiles(view); + }