]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Handle double redraw
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 21 Jun 2010 00:08:19 +0000 (02:08 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 21 Jun 2010 00:08:19 +0000 (02:08 +0200)
commands/videotest.c

index 390811a71cfe7df38adcb5016a9aa97aa8290dc9..f6a786e79b8773c23bb0eefd3cd0e15091786268 100644 (file)
@@ -38,15 +38,8 @@ grub_cmd_videotest (grub_command_t cmd __attribute__ ((unused)),
   unsigned int width;
   unsigned int height;
   int i;
-  grub_font_t sansbig;
-  grub_font_t sans;
-  grub_font_t sanssmall;
-  grub_font_t fixed;
-  struct grub_font_glyph *glyph;
   struct grub_video_render_target *text_layer;
   grub_video_color_t palette[16];
-  const char *str;
-  int texty;
 
   err = grub_video_set_mode ("auto", GRUB_VIDEO_MODE_TYPE_PURE_TEXT, 0);
   if (err)
@@ -54,102 +47,115 @@ grub_cmd_videotest (grub_command_t cmd __attribute__ ((unused)),
 
   grub_video_get_viewport (&x, &y, &width, &height);
 
-  grub_video_create_render_target (&text_layer, width, height,
-                                   GRUB_VIDEO_MODE_TYPE_RGB
-                                   | GRUB_VIDEO_MODE_TYPE_ALPHA);
+  {
+    const char *str;
+    int texty;
+    grub_font_t sansbig;
+    grub_font_t sans;
+    grub_font_t sanssmall;
+    grub_font_t fixed;
+    struct grub_font_glyph *glyph;
+
+    grub_video_create_render_target (&text_layer, width, height,
+                                    GRUB_VIDEO_MODE_TYPE_RGB
+                                    | GRUB_VIDEO_MODE_TYPE_ALPHA);
+
+    grub_video_set_active_render_target (text_layer);
+
+    color = grub_video_map_rgb (0, 255, 255);
+    sansbig = grub_font_get ("Unknown Regular 16");
+    sans = grub_font_get ("Unknown Regular 16");
+    sanssmall = grub_font_get ("Unknown Regular 16");
+    fixed = grub_font_get ("Fixed 20");
+    if (! sansbig || ! sans || ! sanssmall || ! fixed)
+      return grub_error (GRUB_ERR_BAD_FONT, "no font loaded");
+
+    glyph = grub_font_get_glyph (fixed, '*');
+    grub_font_draw_glyph (glyph, color, 200 ,0);
+
+    color = grub_video_map_rgb (255, 255, 255);
+
+    texty = 32;
+    grub_font_draw_string ("The quick brown fox jumped over the lazy dog.",
+                          sans, color, 16, texty);
+    texty += grub_font_get_descent (sans) + grub_font_get_leading (sans);
+
+    texty += grub_font_get_ascent (fixed);
+    grub_font_draw_string ("The quick brown fox jumped over the lazy dog.",
+                          fixed, color, 16, texty);
+    texty += grub_font_get_descent (fixed) + grub_font_get_leading (fixed);
+
+    /* To convert Unicode characters into UTF-8 for this test, the following
+       command is useful:
+       echo -ne '\x00\x00\x26\x3A' | iconv -f UTF-32BE -t UTF-8 | od -t x1
+       This converts the Unicode character U+263A to UTF-8.  */
+
+    /* Characters used:
+       Code point  Description                    UTF-8 encoding
+       ----------- ------------------------------ --------------
+       U+263A      unfilled smiley face           E2 98 BA
+       U+00A1      inverted exclamation point     C2 A1
+       U+00A3      British pound currency symbol  C2 A3
+       U+03C4      Greek tau                      CF 84
+       U+00E4      lowercase letter a with umlaut C3 A4
+       U+2124      set 'Z' symbol (integers)      E2 84 A4
+       U+2287      subset symbol                  E2 8A 87
+       U+211D      set 'R' symbol (real numbers)  E2 84 9D  */
+
+    str =
+      "Unicode test: happy\xE2\x98\xBA \xC2\xA3 5.00"
+      " \xC2\xA1\xCF\x84\xC3\xA4u! "
+      " \xE2\x84\xA4\xE2\x8A\x87\xE2\x84\x9D";
+    color = grub_video_map_rgb (128, 128, 255);
+
+    /* All characters in the string exist in the 'Fixed 20' (10x20) font.  */
+    texty += grub_font_get_ascent(fixed);
+    grub_font_draw_string (str, fixed, color, 16, texty);
+    texty += grub_font_get_descent (fixed) + grub_font_get_leading (fixed);
+
+    texty += grub_font_get_ascent(sansbig);
+    grub_font_draw_string (str, sansbig, color, 16, texty);
+    texty += grub_font_get_descent (sansbig) + grub_font_get_leading (sansbig);
+
+    texty += grub_font_get_ascent(sans);
+    grub_font_draw_string (str, sans, color, 16, texty);
+    texty += grub_font_get_descent (sans) + grub_font_get_leading (sans);
+
+    texty += grub_font_get_ascent(sanssmall);
+    grub_font_draw_string (str, sanssmall, color, 16, texty);
+    texty += (grub_font_get_descent (sanssmall)
+             + grub_font_get_leading (sanssmall));
+
+    glyph = grub_font_get_glyph (fixed, '*');
+
+    for (i = 0; i < 16; i++)
+      {
+       color = grub_video_map_color (i);
+       palette[i] = color;
+       grub_font_draw_glyph (glyph, color, 16 + i * 16, 220);
+      }
+  }
 
   grub_video_set_active_render_target (GRUB_VIDEO_RENDER_TARGET_DISPLAY);
 
-  color = grub_video_map_rgb (0, 0, 0);
-  grub_video_fill_rect (color, 0, 0, width, height);
-
-  color = grub_video_map_rgb (255, 0, 0);
-  grub_video_fill_rect (color, 0, 0, 100, 100);
-
-  color = grub_video_map_rgb (0, 255, 255);
-  grub_video_fill_rect (color, 100, 100, 100, 100);
-
-  sansbig = grub_font_get ("Unknown Regular 16");
-  sans = grub_font_get ("Unknown Regular 16");
-  sanssmall = grub_font_get ("Unknown Regular 16");
-  fixed = grub_font_get ("Fixed 20");
-  if (! sansbig || ! sans || ! sanssmall || ! fixed)
-    return grub_error (GRUB_ERR_BAD_FONT, "no font loaded");
-
-  glyph = grub_font_get_glyph (fixed, '*');
-  grub_font_draw_glyph (glyph, color, 200 ,0);
-
-  grub_video_set_viewport (x + 150, y + 150,
-                           width - 150 * 2, height - 150 * 2);
-  color = grub_video_map_rgb (77, 33, 77);
-  grub_video_fill_rect (color, 0, 0, width, height);
-
-  grub_video_set_active_render_target (text_layer);
-
-  color = grub_video_map_rgb (255, 255, 255);
-
-  texty = 32;
-  grub_font_draw_string ("The quick brown fox jumped over the lazy dog.",
-                         sans, color, 16, texty);
-  texty += grub_font_get_descent (sans) + grub_font_get_leading (sans);
+  for (i = 0; i < 2; i++)
+    {
+      color = grub_video_map_rgb (0, 0, 0);
+      grub_video_fill_rect (color, 0, 0, width, height);
 
-  texty += grub_font_get_ascent (fixed);
-  grub_font_draw_string ("The quick brown fox jumped over the lazy dog.",
-                         fixed, color, 16, texty);
-  texty += grub_font_get_descent (fixed) + grub_font_get_leading (fixed);
+      color = grub_video_map_rgb (255, 0, 0);
+      grub_video_fill_rect (color, 0, 0, 100, 100);
 
-  /* To convert Unicode characters into UTF-8 for this test, the following
-     command is useful:
-       echo -ne '\x00\x00\x26\x3A' | iconv -f UTF-32BE -t UTF-8 | od -t x1
-     This converts the Unicode character U+263A to UTF-8.  */
-
-  /* Characters used:
-     Code point  Description                    UTF-8 encoding
-     ----------- ------------------------------ --------------
-     U+263A      unfilled smiley face           E2 98 BA
-     U+00A1      inverted exclamation point     C2 A1
-     U+00A3      British pound currency symbol  C2 A3
-     U+03C4      Greek tau                      CF 84
-     U+00E4      lowercase letter a with umlaut C3 A4
-     U+2124      set 'Z' symbol (integers)      E2 84 A4
-     U+2287      subset symbol                  E2 8A 87
-     U+211D      set 'R' symbol (real numbers)  E2 84 9D  */
-
-  str =
-    "Unicode test: happy\xE2\x98\xBA \xC2\xA3 5.00"
-    " \xC2\xA1\xCF\x84\xC3\xA4u! "
-    " \xE2\x84\xA4\xE2\x8A\x87\xE2\x84\x9D";
-  color = grub_video_map_rgb (128, 128, 255);
-
-  /* All characters in the string exist in the 'Fixed 20' (10x20) font.  */
-  texty += grub_font_get_ascent(fixed);
-  grub_font_draw_string (str, fixed, color, 16, texty);
-  texty += grub_font_get_descent (fixed) + grub_font_get_leading (fixed);
-
-  texty += grub_font_get_ascent(sansbig);
-  grub_font_draw_string (str, sansbig, color, 16, texty);
-  texty += grub_font_get_descent (sansbig) + grub_font_get_leading (sansbig);
-
-  texty += grub_font_get_ascent(sans);
-  grub_font_draw_string (str, sans, color, 16, texty);
-  texty += grub_font_get_descent (sans) + grub_font_get_leading (sans);
-
-  texty += grub_font_get_ascent(sanssmall);
-  grub_font_draw_string (str, sanssmall, color, 16, texty);
-  texty += (grub_font_get_descent (sanssmall)
-            + grub_font_get_leading (sanssmall));
-
-  glyph = grub_font_get_glyph (fixed, '*');
+      color = grub_video_map_rgb (0, 255, 255);
+      grub_video_fill_rect (color, 100, 100, 100, 100);
 
-  for (i = 0; i < 16; i++)
-    {
-      color = grub_video_map_color (i);
-      palette[i] = color;
-      grub_font_draw_glyph (glyph, color, 16 + i * 16, 220);
+      grub_video_set_viewport (x + 150, y + 150,
+                              width - 150 * 2, height - 150 * 2);
+      color = grub_video_map_rgb (77, 33, 77);
+      grub_video_fill_rect (color, 0, 0, width, height);
+      grub_video_swap_buffers ();
     }
 
-  grub_video_set_active_render_target (GRUB_VIDEO_RENDER_TARGET_DISPLAY);
-
   for (i = 0; i < 5; i++)
     {
       color = grub_video_map_rgb (i, 33, 77);