* 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:
parent
c6b755df45
commit
4db2250000
24 changed files with 536 additions and 34 deletions
|
@ -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. */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue