* grub-core/gfxmenu/gui_box.c: Updated to work with area status.

* grub-core/gfxmenu/gui_canvas.c: Likewise.
        * grub-core/gfxmenu/view.c: Likewise.
        * grub-core/video/fb/video_fb.c: Introduce new functions:
        grub_video_set_area_status, grub_video_get_area_status,
        grub_video_set_region, grub_video_get_region.
        * grub-core/video/bochs.c: Likewise.
        * grub-core/video/capture.c: Likewise.
        * grub-core/video/video.c: Likewise.
        * grub-core/video/cirrus.c: Likewise.
        * grub-core/video/efi_gop.c: Likewise.
        * grub-core/video/efi_uga.c: Likewise.
        * grub-core/video/emu/sdl.c: Likewise.
        * grub-core/video/radeon_fuloong2e.c: Likewise.
        * grub-core/video/sis315pro.c: Likewise.
        * grub-core/video/sm712.c: Likewise.
        * grub-core/video/i386/pc/vbe.c: Likewise.
        * grub-core/video/i386/pc/vga.c: Likewise.
        * grub-core/video/ieee1275.c: Likewise.
        * grub-core/video/i386/coreboot/cbfb.c: Likewise.
        * include/grub/video.h: Likewise.
        * include/grub/video_fb.h: Likewise.
        * include/grub/fbfill.h: Updated render_target structure.
        grub_video_rect_t viewport, region, area
        int area_offset_x, area_offset_y, area_enabled
        * include/grub/gui.h: New helper function
        grub_video_bounds_inside_region.
        * docs/grub-dev.texi: Added information about new functions.
This commit is contained in:
Vladimir Testov 2013-11-08 15:42:38 +04:00
parent c6b755df45
commit 4db2250000
24 changed files with 536 additions and 34 deletions

View file

@ -30,13 +30,17 @@ struct grub_video_fbrender_target
mode_type has been re-adjusted to requested render target settings. */
struct grub_video_mode_info mode_info;
struct
{
unsigned int x;
unsigned int y;
unsigned int width;
unsigned int height;
} viewport;
/* We should not draw outside of viewport. */
grub_video_rect_t viewport;
/* Set region to make a re-draw of a part of the screen. */
grub_video_rect_t region;
/* Should be set to 0 if the viewport is inside of the region. */
int area_enabled;
/* Internal structure - intersection of the viewport and the region. */
grub_video_rect_t area;
/* Internal values - offsets from the left top point of the viewport. */
int area_offset_x;
int area_offset_y;
/* Indicates whether the data has been allocated by us and must be freed
when render target is destroyed. */

View file

@ -248,4 +248,15 @@ grub_video_have_common_points (const grub_video_rect_t *a,
return 1;
}
static inline int
grub_video_bounds_inside_region (const grub_video_rect_t *b,
const grub_video_rect_t *r)
{
if (r->x > b->x || r->x + r->width < b->x + b->width)
return 0;
if (r->y > b->y || r->y + r->height < b->y + b->height)
return 0;
return 1;
}
#endif /* ! GRUB_GUI_H */

View file

@ -301,6 +301,11 @@ typedef enum grub_video_adapter_prio
GRUB_VIDEO_ADAPTER_PRIO_NATIVE = 100
} grub_video_adapter_prio_t;
typedef enum grub_video_area_status
{
GRUB_VIDEO_AREA_DISABLED,
GRUB_VIDEO_AREA_ENABLED
} grub_video_area_status_t;
struct grub_video_adapter
{
@ -341,6 +346,16 @@ struct grub_video_adapter
grub_err_t (*get_viewport) (unsigned int *x, unsigned int *y,
unsigned int *width, unsigned int *height);
grub_err_t (*set_region) (unsigned int x, unsigned int y,
unsigned int width, unsigned int height);
grub_err_t (*get_region) (unsigned int *x, unsigned int *y,
unsigned int *width, unsigned int *height);
grub_err_t (*set_area_status) (grub_video_area_status_t area_status);
grub_err_t (*get_area_status) (grub_video_area_status_t *area_status);
grub_video_color_t (*map_color) (grub_uint32_t color_name);
grub_video_color_t (*map_rgb) (grub_uint8_t red, grub_uint8_t green,
@ -447,6 +462,22 @@ grub_err_t EXPORT_FUNC (grub_video_get_viewport) (unsigned int *x,
unsigned int *width,
unsigned int *height);
grub_err_t EXPORT_FUNC (grub_video_set_region) (unsigned int x,
unsigned int y,
unsigned int width,
unsigned int height);
grub_err_t EXPORT_FUNC (grub_video_get_region) (unsigned int *x,
unsigned int *y,
unsigned int *width,
unsigned int *height);
grub_err_t EXPORT_FUNC (grub_video_set_area_status)
(grub_video_area_status_t area_status);
grub_err_t EXPORT_FUNC (grub_video_get_area_status)
(grub_video_area_status_t *area_status);
grub_video_color_t EXPORT_FUNC (grub_video_map_color) (grub_uint32_t color_name);
grub_video_color_t EXPORT_FUNC (grub_video_map_rgb) (grub_uint8_t red,

View file

@ -58,6 +58,22 @@ EXPORT_FUNC(grub_video_fb_get_viewport) (unsigned int *x, unsigned int *y,
unsigned int *width,
unsigned int *height);
grub_err_t
EXPORT_FUNC(grub_video_fb_set_region) (unsigned int x, unsigned int y,
unsigned int width, unsigned int height);
grub_err_t
EXPORT_FUNC(grub_video_fb_get_region) (unsigned int *x, unsigned int *y,
unsigned int *width,
unsigned int *height);
grub_err_t
EXPORT_FUNC(grub_video_fb_set_area_status)
(grub_video_area_status_t area_status);
grub_err_t
EXPORT_FUNC(grub_video_fb_get_area_status)
(grub_video_area_status_t *area_status);
grub_video_color_t
EXPORT_FUNC(grub_video_fb_map_color) (grub_uint32_t color_name);