2006-12-19 Matthew Allum <mallum@openedhand.com>
authorMatthew Allum <mallum@openedhand.com>
Tue, 19 Dec 2006 12:54:46 +0000 (12:54 +0000)
committerMatthew Allum <mallum@openedhand.com>
Tue, 19 Dec 2006 12:54:46 +0000 (12:54 +0000)
        * psplash-fb.c:
        * psplash-fb.h:
        * psplash.c:
        Add some as yet tested basic rotation code.
        * psplash.h:
        Disable DBG output by default.

ChangeLog
psplash-fb.c
psplash-fb.h
psplash.c
psplash.h

index 696244c..a5fb38e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2006-12-19  Matthew Allum  <mallum@openedhand.com>
+
+       * psplash-fb.c:
+       * psplash-fb.h:
+       * psplash.c:
+       Add some as yet tested basic rotation code.
+       * psplash.h:
+       Disable DBG output by default.
+
 2006-11-21  Richard Purdie  <rpurdie@openedhand.com>
 
        * psplash-write.c:
index d6f8975..f95583c 100644 (file)
@@ -69,8 +69,8 @@ psplash_fb_new (void)
              fb_var.bits_per_pixel);
     }
 
-  fb->width  = fb_var.xres;
-  fb->height = fb_var.yres;
+  fb->real_width  = fb->width  = fb_var.xres;
+  fb->real_height = fb->height = fb_var.yres;
   fb->bpp    = fb_var.bits_per_pixel;
   fb->stride = fb_fix.line_length;
   fb->type   = fb_fix.type;
@@ -79,7 +79,6 @@ psplash_fb_new (void)
   DBG("width: %i, height: %i, bpp: %i, stride: %i", 
       fb->width, fb->height, fb->bpp, fb->stride);
 
-
   fb->base = (char *) mmap ((caddr_t) NULL,
                            /*fb_fix.smem_len */
                            fb->stride * fb->height,
@@ -119,6 +118,19 @@ psplash_fb_new (void)
   status = 2;
 #endif
 
+  switch (fb->angle)
+    {
+    case 270:
+    case 90:
+      fb->width  = fb->real_height;
+      fb->height = fb->real_width;
+      break;
+    case 180:
+    case 0:
+    default:
+      break;
+    }
+
   return fb;
 
  fail:
@@ -139,10 +151,24 @@ psplash_fb_plot_pixel (PSplashFB    *fb,
 {
   int off;
 
-  if (x < 0 || x > fb->width-1 || y < 0 || y > fb->height-1)
-    return;
-
-  off = (y * fb->stride) + (x * (fb->bpp >> 3));
+  switch (fb->angle)
+    {
+    case 270:
+      off = ((fb->width - x) * fb->stride) + (y * (fb->bpp >> 3));
+      break;
+    case 180:
+      off = ((fb->height - y) * fb->stride) + ((fb->width - x) * (fb->bpp >> 3));
+      break;
+    case 90:
+      off = (x * fb->stride) + (y * (fb->bpp >> 3));
+      break;
+    case 0:
+    default:
+      if (x < 0 || x > fb->width-1 || y < 0 || y > fb->height-1)
+       return;
+      off = (y * fb->stride) + (x * (fb->bpp >> 3));
+      break;
+    }
 
   /* FIXME: handle no RGB orderings */
   switch (fb->bpp)
index 8567b19..ceb7b3f 100644 (file)
@@ -30,6 +30,8 @@ typedef struct PSplashFB
   char         *data;
   char         *base;
 
+  int            angle;
+  int            real_width, real_height;
 }
 PSplashFB;
 
index f831222..685c28c 100644 (file)
--- a/psplash.c
+++ b/psplash.c
@@ -40,7 +40,7 @@ psplash_draw_msg (PSplashFB *fb, const char *msg)
 
   psplash_fb_text_size (fb, &w, &h, &radeon_font, msg);
 
-  DBG("displaying '%s' %ix%i\n", msg, w, h) 
+  DBG("displaying '%s' %ix%i\n", msg, w, h);
 
   /* Clear */
 
@@ -248,7 +248,6 @@ main (int argc, char** argv)
                         BAR_IMG_BYTES_PER_PIXEL,
                         BAR_IMG_RLE_PIXEL_DATA);
 
-
   psplash_draw_progress (fb, 0);
 
   psplash_draw_msg (fb, MSG);
index 8cb0f47..36d63c5 100644 (file)
--- a/psplash.h
+++ b/psplash.h
@@ -59,7 +59,7 @@ typedef int            bool;
 #define CLAMP(x, low, high) \
    (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
 
-#define DEBUG 1
+#define DEBUG 0
 
 #if DEBUG
 #define DBG(x, a...) \