Smth like that?

(presumed "documentation update - draft" patch is applied)

On Friday, April 19, 2013 06:16:36 PM Andrey Borzenkov wrote:
> В Fri, 12 Apr 2013 11:27:21 +0400
> 
> Vladimir Testov <vladimir.tes...@rosalab.ru> пишет:
> > >I think "XXX deg" is enough. It avoids confusion with single/plural
> > >forms and we just need something to distinguish from plain number.
> > 
> > Maybe we should use all three keywords - "deg", "degree", "degrees" ?
> 
> I do not see any real need for it.
> 
> > >Please add also documentation for it.
> > 
> > Ok. Please tell me where and how should I do it. :)
> 
> docs/grub.texi, section Theme file format. I assume it should go
> somewhere in Component properties.
> 
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/grub-devel
-- 
With best regards,
_______________________________
Vladimir Testov, ROSA Laboratory.
www.rosalab.ru
diff -Naur grub-new/docs/grub.texi grub-new2/docs/grub.texi
--- grub-new/docs/grub.texi	2013-04-19 03:45:33.641661014 +0400
+++ grub-new2/docs/grub.texi	2013-04-19 03:55:05.026961965 +0400
@@ -2035,6 +2035,9 @@
    @item start_angle
       @tab The position of the first tick mark to appear or disappear. Measured in
       ``parrots``, where 1 ``parrot`` equals to 1 / 256 of the full circle.
+      The value of this property could be set in degrees if used value pattern
+      ``XXX deg``. Also the value could be set in rads if used value pattern
+      ``XXX rad``.
    @item theme_dir
       @tab The full path to the directory where bitmaps are holded.
       This property should be set if bitmaps are not placed in the
diff -Naur grub-new/grub-core/gfxmenu/gui_circular_progress.c grub-new2/grub-core/gfxmenu/gui_circular_progress.c
--- grub-new/grub-core/gfxmenu/gui_circular_progress.c	2013-04-08 13:00:36.000000000 +0400
+++ grub-new2/grub-core/gfxmenu/gui_circular_progress.c	2013-04-19 03:51:38.075342193 +0400
@@ -223,6 +223,32 @@
   self->end = end;
 }
 
+static int
+parse_angle (const char *value)
+{
+  int pos = 0;
+  int len = grub_strlen (value);
+  int angle = grub_strtol (value, 0, 10);
+  /* Find space symbol */
+  while (pos < len && value[pos] != ' ')
+    pos++;
+  /* Skip spaces */
+  while (pos < len && value[pos] == ' ')
+    pos++;
+  if (pos < len)
+    {
+      char *unit = grub_new_substring (value, pos, len);
+      if (!unit)
+        return angle;
+      if (grub_strcmp (unit, "deg") == 0)
+        angle = angle * 64 / 90;
+      else if (grub_strcmp (unit, "rad") == 0)
+        angle = angle * 64 / 100;
+      grub_free (unit);
+    }
+  return angle;
+}
+
 static grub_err_t
 circprog_set_property (void *vself, const char *name, const char *value)
 {
@@ -233,7 +259,7 @@
     }
   else if (grub_strcmp (name, "start_angle") == 0)
     {
-      self->start_angle = grub_strtol (value, 0, 10);
+      self->start_angle = parse_angle(value);
     }
   else if (grub_strcmp (name, "ticks_disappear") == 0)
     {
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to