Merge "minui: Add constness to GRSurface* in gr_get_{width,height}."
This commit is contained in:
+18
-14
@@ -28,7 +28,7 @@
|
|||||||
#include "graphics_fbdev.h"
|
#include "graphics_fbdev.h"
|
||||||
#include "minui/minui.h"
|
#include "minui/minui.h"
|
||||||
|
|
||||||
static GRFont* gr_font = NULL;
|
static GRFont* gr_font = nullptr;
|
||||||
static MinuiBackend* gr_backend = nullptr;
|
static MinuiBackend* gr_backend = nullptr;
|
||||||
|
|
||||||
static int overscan_percent = OVERSCAN_PERCENT;
|
static int overscan_percent = OVERSCAN_PERCENT;
|
||||||
@@ -38,7 +38,8 @@ static int overscan_offset_y = 0;
|
|||||||
static uint32_t gr_current = ~0;
|
static uint32_t gr_current = ~0;
|
||||||
static constexpr uint32_t alpha_mask = 0xff000000;
|
static constexpr uint32_t alpha_mask = 0xff000000;
|
||||||
|
|
||||||
static GRSurface* gr_draw = NULL;
|
// gr_draw is owned by backends.
|
||||||
|
static const GRSurface* gr_draw = nullptr;
|
||||||
static GRRotation rotation = ROTATION_NONE;
|
static GRRotation rotation = ROTATION_NONE;
|
||||||
|
|
||||||
static bool outside(int x, int y) {
|
static bool outside(int x, int y) {
|
||||||
@@ -86,7 +87,7 @@ static inline uint32_t pixel_blend(uint8_t alpha, uint32_t pix) {
|
|||||||
return (out_r & 0xff) | (out_g & 0xff00) | (out_b & 0xff0000) | (gr_current & 0xff000000);
|
return (out_r & 0xff) | (out_g & 0xff00) | (out_b & 0xff0000) | (gr_current & 0xff000000);
|
||||||
}
|
}
|
||||||
|
|
||||||
// increments pixel pointer right, with current rotation.
|
// Increments pixel pointer right, with current rotation.
|
||||||
static void incr_x(uint32_t** p, int row_pixels) {
|
static void incr_x(uint32_t** p, int row_pixels) {
|
||||||
if (rotation % 2) {
|
if (rotation % 2) {
|
||||||
*p = *p + (rotation == 1 ? 1 : -1) * row_pixels;
|
*p = *p + (rotation == 1 ? 1 : -1) * row_pixels;
|
||||||
@@ -95,7 +96,7 @@ static void incr_x(uint32_t** p, int row_pixels) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// increments pixel pointer down, with current rotation.
|
// Increments pixel pointer down, with current rotation.
|
||||||
static void incr_y(uint32_t** p, int row_pixels) {
|
static void incr_y(uint32_t** p, int row_pixels) {
|
||||||
if (rotation % 2) {
|
if (rotation % 2) {
|
||||||
*p = *p + (rotation == 1 ? -1 : 1);
|
*p = *p + (rotation == 1 ? -1 : 1);
|
||||||
@@ -104,8 +105,8 @@ static void incr_y(uint32_t** p, int row_pixels) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns pixel pointer at given coordinates with rotation adjustment.
|
// Returns pixel pointer at given coordinates with rotation adjustment.
|
||||||
static uint32_t* pixel_at(GRSurface* surf, int x, int y, int row_pixels) {
|
static uint32_t* pixel_at(const GRSurface* surf, int x, int y, int row_pixels) {
|
||||||
switch (rotation) {
|
switch (rotation) {
|
||||||
case ROTATION_NONE:
|
case ROTATION_NONE:
|
||||||
return reinterpret_cast<uint32_t*>(surf->data) + y * row_pixels + x;
|
return reinterpret_cast<uint32_t*>(surf->data) + y * row_pixels + x;
|
||||||
@@ -172,7 +173,7 @@ void gr_text(const GRFont* font, int x, int y, const char* s, bool bold) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void gr_texticon(int x, int y, GRSurface* icon) {
|
void gr_texticon(int x, int y, GRSurface* icon) {
|
||||||
if (icon == NULL) return;
|
if (icon == nullptr) return;
|
||||||
|
|
||||||
if (icon->pixel_bytes != 1) {
|
if (icon->pixel_bytes != 1) {
|
||||||
printf("gr_texticon: source has wrong format\n");
|
printf("gr_texticon: source has wrong format\n");
|
||||||
@@ -243,7 +244,7 @@ void gr_fill(int x1, int y1, int x2, int y2) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void gr_blit(GRSurface* source, int sx, int sy, int w, int h, int dx, int dy) {
|
void gr_blit(GRSurface* source, int sx, int sy, int w, int h, int dx, int dy) {
|
||||||
if (source == NULL) return;
|
if (source == nullptr) return;
|
||||||
|
|
||||||
if (gr_draw->pixel_bytes != source->pixel_bytes) {
|
if (gr_draw->pixel_bytes != source->pixel_bytes) {
|
||||||
printf("gr_blit: source has wrong format\n");
|
printf("gr_blit: source has wrong format\n");
|
||||||
@@ -275,8 +276,7 @@ void gr_blit(GRSurface* source, int sx, int sy, int w, int h, int dx, int dy) {
|
|||||||
unsigned char* src_p = source->data + sy * source->row_bytes + sx * source->pixel_bytes;
|
unsigned char* src_p = source->data + sy * source->row_bytes + sx * source->pixel_bytes;
|
||||||
unsigned char* dst_p = gr_draw->data + dy * gr_draw->row_bytes + dx * gr_draw->pixel_bytes;
|
unsigned char* dst_p = gr_draw->data + dy * gr_draw->row_bytes + dx * gr_draw->pixel_bytes;
|
||||||
|
|
||||||
int i;
|
for (int i = 0; i < h; ++i) {
|
||||||
for (i = 0; i < h; ++i) {
|
|
||||||
memcpy(dst_p, src_p, w * source->pixel_bytes);
|
memcpy(dst_p, src_p, w * source->pixel_bytes);
|
||||||
src_p += source->row_bytes;
|
src_p += source->row_bytes;
|
||||||
dst_p += gr_draw->row_bytes;
|
dst_p += gr_draw->row_bytes;
|
||||||
@@ -284,15 +284,15 @@ void gr_blit(GRSurface* source, int sx, int sy, int w, int h, int dx, int dy) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int gr_get_width(GRSurface* surface) {
|
unsigned int gr_get_width(const GRSurface* surface) {
|
||||||
if (surface == NULL) {
|
if (surface == nullptr) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return surface->width;
|
return surface->width;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int gr_get_height(GRSurface* surface) {
|
unsigned int gr_get_height(const GRSurface* surface) {
|
||||||
if (surface == NULL) {
|
if (surface == nullptr) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return surface->height;
|
return surface->height;
|
||||||
@@ -372,6 +372,10 @@ int gr_init() {
|
|||||||
|
|
||||||
void gr_exit() {
|
void gr_exit() {
|
||||||
delete gr_backend;
|
delete gr_backend;
|
||||||
|
gr_backend = nullptr;
|
||||||
|
|
||||||
|
delete gr_font;
|
||||||
|
gr_font = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
int gr_fb_width() {
|
int gr_fb_width() {
|
||||||
|
|||||||
@@ -48,7 +48,13 @@ enum GRRotation {
|
|||||||
ROTATION_LEFT = 3,
|
ROTATION_LEFT = 3,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Initializes the graphics backend and loads font file. Returns 0 on success, or -1 on error. Note
|
||||||
|
// that the font initialization failure would be non-fatal, as caller may not need to draw any text
|
||||||
|
// at all. Caller can check the font initialization result via gr_sys_font() as needed.
|
||||||
int gr_init();
|
int gr_init();
|
||||||
|
|
||||||
|
// Frees the allocated resources. The function is idempotent, and safe to be called if gr_init()
|
||||||
|
// didn't finish successfully.
|
||||||
void gr_exit();
|
void gr_exit();
|
||||||
|
|
||||||
int gr_fb_width();
|
int gr_fb_width();
|
||||||
@@ -57,7 +63,8 @@ int gr_fb_height();
|
|||||||
void gr_flip();
|
void gr_flip();
|
||||||
void gr_fb_blank(bool blank);
|
void gr_fb_blank(bool blank);
|
||||||
|
|
||||||
void gr_clear(); // clear entire surface to current color
|
// Clears entire surface to current color.
|
||||||
|
void gr_clear();
|
||||||
void gr_color(unsigned char r, unsigned char g, unsigned char b, unsigned char a);
|
void gr_color(unsigned char r, unsigned char g, unsigned char b, unsigned char a);
|
||||||
void gr_fill(int x1, int y1, int x2, int y2);
|
void gr_fill(int x1, int y1, int x2, int y2);
|
||||||
|
|
||||||
@@ -66,16 +73,16 @@ void gr_texticon(int x, int y, GRSurface* icon);
|
|||||||
const GRFont* gr_sys_font();
|
const GRFont* gr_sys_font();
|
||||||
int gr_init_font(const char* name, GRFont** dest);
|
int gr_init_font(const char* name, GRFont** dest);
|
||||||
void gr_text(const GRFont* font, int x, int y, const char* s, bool bold);
|
void gr_text(const GRFont* font, int x, int y, const char* s, bool bold);
|
||||||
// Return -1 if font is nullptr.
|
// Returns -1 if font is nullptr.
|
||||||
int gr_measure(const GRFont* font, const char* s);
|
int gr_measure(const GRFont* font, const char* s);
|
||||||
// Return -1 if font is nullptr.
|
// Returns -1 if font is nullptr.
|
||||||
int gr_font_size(const GRFont* font, int* x, int* y);
|
int gr_font_size(const GRFont* font, int* x, int* y);
|
||||||
|
|
||||||
void gr_blit(GRSurface* source, int sx, int sy, int w, int h, int dx, int dy);
|
void gr_blit(GRSurface* source, int sx, int sy, int w, int h, int dx, int dy);
|
||||||
unsigned int gr_get_width(GRSurface* surface);
|
unsigned int gr_get_width(const GRSurface* surface);
|
||||||
unsigned int gr_get_height(GRSurface* surface);
|
unsigned int gr_get_height(const GRSurface* surface);
|
||||||
|
|
||||||
// Set rotation, flips gr_fb_width/height if 90 degree rotation difference
|
// Sets rotation, flips gr_fb_width/height if 90 degree rotation difference
|
||||||
void gr_rotate(GRRotation rotation);
|
void gr_rotate(GRRotation rotation);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
Reference in New Issue
Block a user