Revision: 1966
          http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=1966
Author:   chaac
Date:     2009-02-01 09:33:29 +0000 (Sun, 01 Feb 2009)

Log Message:
-----------
2009-02-01  Vesa J?\195?\164?\195?\164skel?\195?\164inen  <[email protected]>

        Base on patch on bug #24154 created by Tomas Tintera
        <[email protected]>.

        * video/i386/pc/vbe.c (grub_video_vbe_scroll): Fix downward scrolling.

Ticket Links:
:-----------
    http://savannah.gnu.org/bugs/?24154

Modified Paths:
--------------
    trunk/grub2/ChangeLog
    trunk/grub2/video/i386/pc/vbe.c

Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog       2009-02-01 09:03:15 UTC (rev 1965)
+++ trunk/grub2/ChangeLog       2009-02-01 09:33:29 UTC (rev 1966)
@@ -1,5 +1,12 @@
 2009-02-01  Vesa Jääskeläinen  <[email protected]>
 
+       Base on patch on bug #24154 created by Tomas Tintera
+       <[email protected]>.
+
+       * video/i386/pc/vbe.c (grub_video_vbe_scroll): Fix downward scrolling.
+
+2009-02-01  Vesa Jääskeläinen  <[email protected]>
+
        Based on patch on bug #25318 created by Bernhard Rosenkraenzer 
        <[email protected]>.
 

Modified: trunk/grub2/video/i386/pc/vbe.c
===================================================================
--- trunk/grub2/video/i386/pc/vbe.c     2009-02-01 09:03:15 UTC (rev 1965)
+++ trunk/grub2/video/i386/pc/vbe.c     2009-02-01 09:33:29 UTC (rev 1966)
@@ -709,7 +709,7 @@
 
       return minindex;
     }
-  else if ((render_target->mode_info.mode_type 
+  else if ((render_target->mode_info.mode_type
             & GRUB_VIDEO_MODE_TYPE_1BIT_BITMAP) != 0)
     {
        if (red == render_target->mode_info.fg_red
@@ -749,7 +749,7 @@
     /* No alpha available in index color modes, just use
        same value as in only RGB modes.  */
     return grub_video_vbe_map_rgb (red, green, blue);
-  else if ((render_target->mode_info.mode_type 
+  else if ((render_target->mode_info.mode_type
             & GRUB_VIDEO_MODE_TYPE_1BIT_BITMAP) != 0)
     {
       if (red == render_target->mode_info.fg_red
@@ -1399,13 +1399,25 @@
       target.mode_info = &render_target->mode_info;
       target.data = render_target->data;
 
-      for (j = 0; j < height; j++)
-        {
-          dst = grub_video_vbe_get_video_ptr (&target, dst_x, dst_y + j);
-          src = grub_video_vbe_get_video_ptr (&target, src_x, src_y + j);
-          grub_memmove (dst, src,
-                        width * target.mode_info->bytes_per_pixel);
-        }
+      /* Check vertical direction of the move.  */
+      if (dy <= 0)
+       /* 3a. Move data upwards.  */
+       for (j = 0; j < height; j++)
+         {
+           dst = grub_video_vbe_get_video_ptr (&target, dst_x, dst_y + j);
+           src = grub_video_vbe_get_video_ptr (&target, src_x, src_y + j);
+           grub_memmove (dst, src,
+                         width * target.mode_info->bytes_per_pixel);
+         }
+      else
+       /* 3b. Move data downwards.  */
+       for (j = (height - 1); j >= 0; j--)
+         {
+           dst = grub_video_vbe_get_video_ptr (&target, dst_x, dst_y + j);
+           src = grub_video_vbe_get_video_ptr (&target, src_x, src_y + j);
+           grub_memmove (dst, src,
+                         width * target.mode_info->bytes_per_pixel);
+         }
     }
 
   /* 4. Fill empty space with specified color.  In this implementation




Reply via email to