more big endian fixes (overlays on minimaps)
authorMichael Gernoth <michael@gernoth.net>
Tue, 15 Jan 2008 21:10:35 +0000 (22:10 +0100)
committerMichael Gernoth <michael@gernoth.net>
Tue, 15 Jan 2008 21:10:35 +0000 (22:10 +0100)
src/sim/g_map.c
src/sim/headers/view.h
src/sim/w_x.c

index 87c7e27..667cfae 100644 (file)
@@ -406,25 +406,15 @@ drawRect(SimView *view, int pixel, int solid,
        unsigned char *image = 
          &data[(line * y) + (x * pixelBytes)];
 
-       if (solid) {
-         for (i = h; i > 0; i--) {
-           for (j = w; j > 0; j--) {
+       for (i = h; i > 0; i--) {
+         for (j = w; j > 0; j--) {
+           if (solid || stipple++ & 1)
              *image = pixel;
-             image++;
-           }
-           image += line - w;
-         }
-       } else {
-         for (i = h; i > 0; i--) {
-           for (j = w; j > 0; j--) {
-             if (stipple++ & 1)
-               *image = pixel;
-             image++;
-           }
-           if (!(w & 1))
-             stipple++;
-           image += line - w;
+           image++;
          }
+         if (!(w & 1))
+           stipple++;
+         image += line - w;
        }
       }
       break;
@@ -438,26 +428,22 @@ drawRect(SimView *view, int pixel, int solid,
        image = 
          &data[(line * y) + x];
 
-       if (solid) {
-         for (i = h; i > 0; i--) {
-           for (j = w; j > 0; j--) {
-             *image = pixel;
-             image++;
-           }
-           image += line - w;
-         }
-       } else {
-         for (i = h; i > 0; i--) {
-           for (j = w; j > 0; j--) {
-             if (stipple++ & 1)
-               *image = pixel;
-             image++;
+       for (i = h; i > 0; i--) {
+         for (j = w; j > 0; j--) {
+           if (solid || stipple++ & 1) {
+             if (view->x->x_big_endian) {
+               *image = ((pixel & 0xff) << 8) | ((pixel & 0xff00) >> 8);
+             } else {
+               *image = pixel;
+             }
            }
-           if (!(w & 1))
-             stipple++;
-           image += line - w;
+           image++;
          }
+         if (!(w & 1))
+           stipple++;
+         image += line - w;
        }
+
       }
       break;
 
@@ -470,37 +456,36 @@ drawRect(SimView *view, int pixel, int solid,
        image = 
          &data[(line * y) + x * pixelBytes];
 
-       if (solid) {
-         for (i = h; i > 0; i--) {
-           for (j = w; j > 0; j--) {
-             *(image++) = (pixel >> 0) & 0xff;
-             *(image++) = (pixel >> 8) & 0xff;
-             *(image++) = (pixel >> 16) & 0xff;
+       for (i = h; i > 0; i--) {
+         for (j = w; j > 0; j--) {
+           if (view->x->x_big_endian) {
              if (pixelBytes == 4) {
                image++;
              }
-           }
-           image += line - w * pixelBytes;
-         }
-       } else {
-         for (i = h; i > 0; i--) {
-           for (j = w; j > 0; j--) {
+             if (solid || stipple++ & 1) {
+               *(image++) = (pixel >> 16) & 0xff;
+               *(image++) = (pixel >> 8) & 0xff;
+               *(image++) = (pixel >> 0) & 0xff;
+             } else {
+               image += 3;
+             }
+           } else {
              if (stipple++ & 1) {
-               *(image++) = (pixel >> 0) & 0xff;
-               *(image++) = (pixel >> 8) & 0xff;
-               *(image++) = (pixel >> 16) & 0xff;
+               *(image++) = (pixel >> 0) & 0xff;
+               *(image++) = (pixel >> 8) & 0xff;
+               *(image++) = (pixel >> 16) & 0xff;
              } else {
                image += 3;
              }
              if (pixelBytes == 4) {
-               image++;
+               image++;
              }
            }
-           if (!(w & 1)) {
-             stipple++;
-           }
-           image += line - w * pixelBytes;
          }
+         if (!(w & 1)) {
+           stipple++;
+         }
+         image += line - w * pixelBytes;
        }
       }
       break;
index 8f87fe0..744e0b3 100644 (file)
@@ -114,6 +114,7 @@ typedef struct XDisplay {
   Pixmap horiz_stipple;
   Pixmap diag_stipple;
   int needs_swap;
+  int x_big_endian;
 } XDisplay;
 
 
index 3d8dd48..e32aeed 100644 (file)
@@ -601,6 +601,7 @@ InitNewView(SimView *view, char *title, int class, int w, int h)
   }
 
   view->x->needs_swap = !(*(unsigned char*) (&test));
+  view->x->x_big_endian = (ImageByteOrder(view->x->dpy) == MSBFirst);
 
 
   GetPixmaps(view->x);
Impressum, Datenschutz