Received: from list by lists.gnu.org with archive (Exim 4.71) id 1Uyisq-0000Uu-Mc for mharc-grub-devel@gnu.org; Mon, 15 Jul 2013 09:32:08 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34171) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uyisi-0000UV-Uo for grub-devel@gnu.org; Mon, 15 Jul 2013 09:32:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Uyisg-0003ME-WF for grub-devel@gnu.org; Mon, 15 Jul 2013 09:32:00 -0400 Received: from collab.rosalab.ru ([195.19.76.181]:38023) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uyisg-0003Lp-FC for grub-devel@gnu.org; Mon, 15 Jul 2013 09:31:58 -0400 Received: from localhost (localhost.localdomain [127.0.0.1]) by collab.rosalab.ru (Postfix) with ESMTP id D2ED129C233 for ; Mon, 15 Jul 2013 17:31:57 +0400 (MSK) X-Virus-Scanned: amavisd-new at rosalab.ru Received: from collab.rosalab.ru ([127.0.0.1]) by localhost (collab.rosalab.ru [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 5SbB5pjihm3N for ; Mon, 15 Jul 2013 17:31:57 +0400 (MSK) Received: from icedphoenix.localnet (unknown [217.199.216.178]) by collab.rosalab.ru (Postfix) with ESMTPSA id 53C2029C230 for ; Mon, 15 Jul 2013 17:31:57 +0400 (MSK) From: Vladimir Testov To: grub-devel@gnu.org Subject: Re: [PATCH] [3/?] grub-core/gfxmenu/gui_list.c - some code cleaning Date: Mon, 15 Jul 2013 17:31:56 +0400 Message-ID: <3685549.UdAN4IxoBL@icedphoenix> User-Agent: KMail/4.10.2 (Linux/3.8.0-19-generic; KDE/4.10.2; x86_64; ; ) In-Reply-To: <8981891.3POqYUAcJJ@icedphoenix> References: <8981891.3POqYUAcJJ@icedphoenix> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="nextPart1655488.smf4yHJGco" Content-Transfer-Encoding: 7Bit X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 195.19.76.181 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jul 2013 13:32:07 -0000 This is a multi-part message in MIME format. --nextPart1655488.smf4yHJGco Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Yeah, the patch. On Monday, July 15, 2013 05:31:11 PM Vladimir Testov wrote: > First. The structure should be changed a little to apply the 4th patch and > some of the following patches. > Second. After applying the patch GRUB won't count some values during every > redrawing of the boot menu. > Third. For me, source code became a little more human-readable. > -- > With best regards, > _______________________________ > Vladimir Testov, ROSA Laboratory. > www.rosalab.ru > > _______________________________________________ > 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 --nextPart1655488.smf4yHJGco Content-Disposition: attachment; filename="grub-list-code-cleaning.patch" Content-Transfer-Encoding: 7Bit Content-Type: text/x-patch; charset="UTF-8"; name="grub-list-code-cleaning.patch" diff -Naur grub-new2/grub-core/gfxmenu/gui_list.c grub-new3/grub-core/gfxmenu/gui_list.c --- grub-new2/grub-core/gfxmenu/gui_list.c 2013-07-11 18:17:38.856943765 +0400 +++ grub-new3/grub-core/gfxmenu/gui_list.c 2013-07-15 15:30:26.585116409 +0400 @@ -42,9 +42,13 @@ int item_spacing; grub_font_t item_font; grub_font_t selected_item_font; - grub_video_rgba_color_t item_color; + int selected_item_font_set; + grub_video_rgba_color_t item_color_name; + grub_video_color_t item_color; int selected_item_color_set; - grub_video_rgba_color_t selected_item_color; + grub_video_rgba_color_t selected_item_color_name; + grub_video_color_t selected_item_color; + int need_to_recreate_colors; int draw_scrollbar; int need_to_recreate_scrollbar; @@ -149,6 +153,21 @@ return (self->scrollbar_frame != 0 && self->scrollbar_thumb != 0); } +static void +check_colors (list_impl_t self) +{ + if (self->need_to_recreate_colors) + { + self->item_color = grub_video_map_rgba_color (self->item_color_name); + self->selected_item_color = + (self->selected_item_color_set + ? grub_video_map_rgba_color (self->selected_item_color_name) + : self->item_color); + + self->need_to_recreate_colors = 0; + } +} + static const char * list_get_id (void *vself) { @@ -262,17 +281,27 @@ sviewport.width = cwidth - string_left_offset; sviewport.height = item_height; + check_colors (self); + for (visible_index = 0, menu_index = self->first_shown_index; visible_index < num_shown_items && menu_index < self->view->menu->size; visible_index++, menu_index++) { int is_selected = (menu_index == self->view->selected); struct grub_video_bitmap *icon; + grub_font_t font; + grub_video_color_t color; if (is_selected) { - selbox->draw (selbox, 0, - item_top - sel_toppad); + selbox->draw (selbox, 0, item_top - sel_toppad); + font = self->selected_item_font; + color = self->selected_item_color; + } + else + { + font = self->item_font; + color = self->item_color; } icon = get_item_icon (self, menu_index); @@ -284,20 +313,12 @@ const char *item_title = grub_menu_get_entry (self->view->menu, menu_index)->title; - grub_font_t font = - (is_selected && self->selected_item_font - ? self->selected_item_font - : self->item_font); - grub_video_rgba_color_t text_color = - ((is_selected && self->selected_item_color_set) - ? self->selected_item_color - : self->item_color); sviewport.y = item_top; grub_gui_set_viewport (&sviewport, &svpsave); grub_font_draw_string (item_title, font, - grub_video_map_rgba_color (text_color), + color, 0, string_top_offset); grub_gui_restore_viewport (&svpsave); @@ -445,17 +466,23 @@ if (grub_strcmp (name, "item_font") == 0) { self->item_font = grub_font_get (value); + if (!self->selected_item_font_set) + self->selected_item_font = self->item_font; } else if (grub_strcmp (name, "selected_item_font") == 0) { if (! value || grub_strcmp (value, "inherit") == 0) - self->selected_item_font = 0; + self->selected_item_font = self->item_font; else - self->selected_item_font = grub_font_get (value); + { + self->selected_item_font = grub_font_get (value); + self->selected_item_font_set = 1; + } } else if (grub_strcmp (name, "item_color") == 0) { - grub_video_parse_color (value, &self->item_color); + if (grub_video_parse_color (value, &self->item_color_name) == GRUB_ERR_NONE) + self->need_to_recreate_colors = 1; } else if (grub_strcmp (name, "selected_item_color") == 0) { @@ -465,9 +492,12 @@ } else { - if (grub_video_parse_color (value, &self->selected_item_color) + if (grub_video_parse_color (value, &self->selected_item_color_name) == GRUB_ERR_NONE) - self->selected_item_color_set = 1; + { + self->selected_item_color_set = 1; + self->need_to_recreate_colors = 1; + } } } else if (grub_strcmp (name, "icon_width") == 0) @@ -620,10 +650,15 @@ self->item_icon_space = 4; self->item_spacing = 16; self->item_font = default_font; - self->selected_item_font = 0; /* Default to using the item_font. */ - self->item_color = default_fg_color; + self->selected_item_font = default_font; + self->selected_item_font_set = 0; /* Default to using the item_font. */ + self->item_color_name = default_fg_color; + self->item_color = grub_video_map_rgba_color (self->item_color_name); self->selected_item_color_set = 0; /* Default to using the item_color. */ - self->selected_item_color = default_fg_color; + self->selected_item_color_name = default_fg_color; + self->selected_item_color = + grub_video_map_rgba_color (self->selected_item_color_name); + self->need_to_recreate_colors = 0; self->draw_scrollbar = 1; self->need_to_recreate_scrollbar = 1; --nextPart1655488.smf4yHJGco--