Landscape mode

This commit is contained in:
balika011 2018-08-25 18:18:04 +02:00
commit 3140169fb8
5 changed files with 54 additions and 62 deletions

View file

@ -117,12 +117,13 @@ static const u8 _gfx_font[] = {
0x00, 0x00, 0x00, 0x4C, 0x32, 0x00, 0x00, 0x00 // Char 126 (~) 0x00, 0x00, 0x00, 0x4C, 0x32, 0x00, 0x00, 0x00 // Char 126 (~)
}; };
void gfx_init_ctxt(gfx_ctxt_t *ctxt, u32 *fb, u32 width, u32 height, u32 stride) void gfx_init_ctxt(gfx_ctxt_t *ctxt, u32 *fb, u32 width, u32 height, u32 stride, bool landscape)
{ {
ctxt->fb = fb; ctxt->fb = fb;
ctxt->width = width; ctxt->width = landscape ? height : width;
ctxt->height = height; ctxt->height = landscape ? width : height;
ctxt->stride = stride; ctxt->stride = stride;
ctxt->landscape = landscape;
} }
void gfx_clear_grey(gfx_ctxt_t *ctxt, u8 color) void gfx_clear_grey(gfx_ctxt_t *ctxt, u8 color)
@ -132,13 +133,16 @@ void gfx_clear_grey(gfx_ctxt_t *ctxt, u8 color)
void gfx_clear_color(gfx_ctxt_t *ctxt, u32 color) void gfx_clear_color(gfx_ctxt_t *ctxt, u32 color)
{ {
for (u32 i = 0; i < ctxt->height * ctxt->stride; i++) for (u32 x = 0; x < ctxt->width; x++)
ctxt->fb[i] = color; for (u32 y = 0; y < ctxt->height; y++)
gfx_set_pixel(ctxt, x, y, color);
} }
void gfx_clear_partial_grey(gfx_ctxt_t *ctxt, u8 color, u32 pos_x, u32 height) void gfx_clear_partial_grey(gfx_ctxt_t *ctxt, u8 color, u32 pos_x, u32 height)
{ {
memset(ctxt->fb + pos_x * ctxt->stride, color, height * 4 * ctxt->stride); for (u32 x = 0; x < ctxt->width; x++)
for (u32 y = 0; y < height; y++)
gfx_set_pixel(ctxt, x, pos_x + y, color << 24 | color << 16 | color << 8 | color);
} }
void gfx_con_init(gfx_con_t *con, gfx_ctxt_t *ctxt) void gfx_con_init(gfx_con_t *con, gfx_ctxt_t *ctxt)
@ -183,33 +187,22 @@ void gfx_putc(gfx_con_t *con, char c)
if (c >= 32 && c <= 126) if (c >= 32 && c <= 126)
{ {
u8 *cbuf = (u8 *)&_gfx_font[8 * (c - 32)]; u8 *cbuf = (u8 *)&_gfx_font[8 * (c - 32)];
u32 *fb = con->gfx_ctxt->fb + con->x + con->y * con->gfx_ctxt->stride;
for (u32 i = 0; i < 16; i += 2) for (u32 i = 0; i < 16; i += 2)
{ {
u8 v = *cbuf++; u8 v = *cbuf++;
for (u32 k = 0; k < 2; k++) for (u32 k = 0; k < 2; k++)
{ {
for (u32 j = 0; j < 8; j++) for (u32 j = 0; j < 16; j += 2)
{
for (u32 l = 0; l < 2; l++)
{ {
if (v & 1) if (v & 1)
{ gfx_set_pixel(con->gfx_ctxt, con->x + j + l, con->y + i + k, con->fgcol);
*fb = con->fgcol;
fb++;
*fb = con->fgcol;
}
else if (con->fillbg) else if (con->fillbg)
{ gfx_set_pixel(con->gfx_ctxt, con->x + j + l, con->y + i + k, con->bgcol);
*fb = con->bgcol;
fb++;
*fb = con->bgcol;
} }
else
fb++;
v >>= 1; v >>= 1;
fb++;
} }
fb += con->gfx_ctxt->stride - 16;
v = *cbuf; v = *cbuf;
} }
} }
@ -228,20 +221,17 @@ void gfx_putc(gfx_con_t *con, char c)
if (c >= 32 && c <= 126) if (c >= 32 && c <= 126)
{ {
u8 *cbuf = (u8 *)&_gfx_font[8 * (c - 32)]; u8 *cbuf = (u8 *)&_gfx_font[8 * (c - 32)];
u32 *fb = con->gfx_ctxt->fb + con->x + con->y * con->gfx_ctxt->stride;
for (u32 i = 0; i < 8; i++) for (u32 i = 0; i < 8; i++)
{ {
u8 v = *cbuf++; u8 v = *cbuf++;
for (u32 j = 0; j < 8; j++) for (u32 j = 0; j < 8; j++)
{ {
if (v & 1) if (v & 1)
*fb = con->fgcol; gfx_set_pixel(con->gfx_ctxt, con->x + j, con->y + i, con->fgcol);
else if (con->fillbg) else if (con->fillbg)
*fb = con->bgcol; gfx_set_pixel(con->gfx_ctxt, con->x + j, con->y + i, con->bgcol);
v >>= 1; v >>= 1;
fb++;
} }
fb += con->gfx_ctxt->stride - 8;
} }
con->x += 8; con->x += 8;
} }
@ -444,13 +434,14 @@ void gfx_hexdump(gfx_con_t *con, u32 base, const u8 *buf, u32 len)
static int abs(int x) static int abs(int x)
{ {
if (x < 0) return x < 0 ? -x : x;
return -x;
return x;
} }
void gfx_set_pixel(gfx_ctxt_t *ctxt, u32 x, u32 y, u32 color) void gfx_set_pixel(gfx_ctxt_t *ctxt, u32 x, u32 y, u32 color)
{ {
if (ctxt->landscape)
ctxt->fb[y + (ctxt->width - x) * ctxt->stride] = color;
else
ctxt->fb[x + y * ctxt->stride] = color; ctxt->fb[x + y * ctxt->stride] = color;
} }
@ -486,7 +477,7 @@ void gfx_set_rect_grey(gfx_ctxt_t *ctxt, const u8 *buf, u32 size_x, u32 size_y,
{ {
for (u32 x = pos_x; x < (pos_x + size_x); x++) for (u32 x = pos_x; x < (pos_x + size_x); x++)
{ {
memset(&ctxt->fb[x + y*ctxt->stride], buf[pos], 4); gfx_set_pixel(ctxt, x, y, buf[pos] << 24 | buf[pos] << 16 | buf[pos] << 8 | buf[pos]);
pos++; pos++;
} }
} }
@ -500,7 +491,7 @@ void gfx_set_rect_rgb(gfx_ctxt_t *ctxt, const u8 *buf, u32 size_x, u32 size_y, u
{ {
for (u32 x = pos_x; x < (pos_x + size_x); x++) for (u32 x = pos_x; x < (pos_x + size_x); x++)
{ {
ctxt->fb[x + y*ctxt->stride] = buf[pos + 2] | (buf[pos + 1] << 8) | (buf[pos] << 16); gfx_set_pixel(ctxt, x, y, buf[pos + 2] | (buf[pos + 1] << 8) | (buf[pos] << 16));
pos += 3; pos += 3;
} }
} }
@ -513,7 +504,7 @@ void gfx_set_rect_argb(gfx_ctxt_t *ctxt, const u32 *buf, u32 size_x, u32 size_y,
{ {
for (u32 x = pos_x; x < (pos_x + size_x); x++) for (u32 x = pos_x; x < (pos_x + size_x); x++)
{ {
ctxt->fb[x + y*ctxt->stride] = buf[pos]; gfx_set_pixel(ctxt, x, y, buf[pos]);
pos+=1; pos+=1;
} }
} }
@ -524,6 +515,6 @@ void gfx_render_bmp_argb(gfx_ctxt_t *ctxt, const u32 *buf, u32 size_x, u32 size_
for (u32 y = pos_y; y < (pos_y + size_y); y++) for (u32 y = pos_y; y < (pos_y + size_y); y++)
{ {
for (u32 x = pos_x; x < (pos_x + size_x); x++) for (u32 x = pos_x; x < (pos_x + size_x); x++)
ctxt->fb[x + y*ctxt->stride] = buf[(size_y + pos_y - 1 - y ) * size_x + x - pos_x]; gfx_set_pixel(ctxt, x, y, buf[(size_y + pos_y - 1 - y ) * size_x + x - pos_x]);
} }
} }

View file

@ -21,7 +21,7 @@
#include "../../common/common_gfx.h" #include "../../common/common_gfx.h"
void gfx_init_ctxt(gfx_ctxt_t *ctxt, u32 *fb, u32 width, u32 height, u32 stride); void gfx_init_ctxt(gfx_ctxt_t *ctxt, u32 *fb, u32 width, u32 height, u32 stride, bool landscape);
void gfx_clear_grey(gfx_ctxt_t *ctxt, u8 color); void gfx_clear_grey(gfx_ctxt_t *ctxt, u8 color);
void gfx_clear_partial_grey(gfx_ctxt_t *ctxt, u8 color, u32 pos_x, u32 height); void gfx_clear_partial_grey(gfx_ctxt_t *ctxt, u8 color, u32 pos_x, u32 height);
void gfx_clear_color(gfx_ctxt_t *ctxt, u32 color); void gfx_clear_color(gfx_ctxt_t *ctxt, u32 color);

View file

@ -25,8 +25,8 @@
extern u8 *Kc_MENU_LOGO; extern u8 *Kc_MENU_LOGO;
#define X_MENU_LOGO 119 #define X_MENU_LOGO 119
#define Y_MENU_LOGO 57 #define Y_MENU_LOGO 57
#define X_POS_MENU_LOGO 577 #define X_POS_MENU_LOGO (con->gfx_ctxt->width - 143)
#define Y_POS_MENU_LOGO 1179 #define Y_POS_MENU_LOGO (con->gfx_ctxt->height - 101)
#endif //MENU_LOGO_ENABLE #endif //MENU_LOGO_ENABLE
extern hekate_config h_cfg; extern hekate_config h_cfg;
@ -48,12 +48,12 @@ void tui_sbar(gfx_con_t *con, bool force_update)
int battVoltCurr = 0; int battVoltCurr = 0;
gfx_con_getpos(con, &cx, &cy); gfx_con_getpos(con, &cx, &cy);
gfx_con_setpos(con, 0, 1260); gfx_con_setpos(con, 0, con->gfx_ctxt->height - 20);
max17050_get_property(MAX17050_RepSOC, (int *)&battPercent); max17050_get_property(MAX17050_RepSOC, (int *)&battPercent);
max17050_get_property(MAX17050_VCELL, &battVoltCurr); max17050_get_property(MAX17050_VCELL, &battVoltCurr);
gfx_clear_partial_grey(con->gfx_ctxt, 0x30, 1256, 24); gfx_clear_partial_grey(con->gfx_ctxt, 0x30, con->gfx_ctxt->height - 24, 24);
gfx_printf(con, "%K%k Battery: %d.%d%% (%d mV) - Charge:", 0xFF303030, 0xFF888888, gfx_printf(con, "%K%k Battery: %d.%d%% (%d mV) - Charge:", 0xFF303030, 0xFF888888,
(battPercent >> 8) & 0xFF, (battPercent & 0xFF) / 26, battVoltCurr); (battPercent >> 8) & 0xFF, (battPercent & 0xFF) / 26, battVoltCurr);
@ -99,7 +99,7 @@ void *tui_do_menu(gfx_con_t *con, menu_t *menu)
{ {
int idx = 0, prev_idx = 0, cnt = 0x7FFFFFFF; int idx = 0, prev_idx = 0, cnt = 0x7FFFFFFF;
gfx_clear_partial_grey(con->gfx_ctxt, 0x1B, 0, 1256); gfx_clear_partial_grey(con->gfx_ctxt, 0x1B, 0, con->gfx_ctxt->height - 24);
tui_sbar(con, true); tui_sbar(con, true);
#ifdef MENU_LOGO_ENABLE #ifdef MENU_LOGO_ENABLE
@ -158,7 +158,7 @@ void *tui_do_menu(gfx_con_t *con, menu_t *menu)
// Print help and battery status. // Print help and battery status.
gfx_con_getpos(con, &con->savedx, &con->savedy); gfx_con_getpos(con, &con->savedx, &con->savedy);
gfx_con_setpos(con, 0, 1191); gfx_con_setpos(con, 0, con->gfx_ctxt->height - 89);
gfx_printf(con, "%k VOL: Move up/down\n PWR: Select option%k", 0xFF555555, 0xFFCCCCCC); gfx_printf(con, "%k VOL: Move up/down\n PWR: Select option%k", 0xFF555555, 0xFFCCCCCC);
// Wait for user command. // Wait for user command.
@ -196,7 +196,7 @@ void *tui_do_menu(gfx_con_t *con, menu_t *menu)
break; break;
} }
con->fntsz = 16; con->fntsz = 16;
gfx_clear_partial_grey(con->gfx_ctxt, 0x1B, 0, 1256); gfx_clear_partial_grey(con->gfx_ctxt, 0x1B, 0, con->gfx_ctxt->height - 24);
#ifdef MENU_LOGO_ENABLE #ifdef MENU_LOGO_ENABLE
gfx_set_rect_rgb(con->gfx_ctxt, Kc_MENU_LOGO, gfx_set_rect_rgb(con->gfx_ctxt, Kc_MENU_LOGO,
X_MENU_LOGO, Y_MENU_LOGO, X_POS_MENU_LOGO, Y_POS_MENU_LOGO); X_MENU_LOGO, Y_MENU_LOGO, X_POS_MENU_LOGO, Y_POS_MENU_LOGO);

View file

@ -424,7 +424,7 @@ void reconfig_hw_workaround(bool extra_reconfig)
void print_fuseinfo() void print_fuseinfo()
{ {
gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, 1256); gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, gfx_ctxt.height - 24);
gfx_con_setpos(&gfx_con, 0, 0); gfx_con_setpos(&gfx_con, 0, 0);
u32 burntFuses = 0; u32 burntFuses = 0;
@ -472,7 +472,7 @@ void print_fuseinfo()
void print_kfuseinfo() void print_kfuseinfo()
{ {
gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, 1256); gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, gfx_ctxt.height - 24);
gfx_con_setpos(&gfx_con, 0, 0); gfx_con_setpos(&gfx_con, 0, 0);
gfx_printf(&gfx_con, "%kKFuse contents:\n\n%k", 0xFF00DDFF, 0xFFCCCCCC); gfx_printf(&gfx_con, "%kKFuse contents:\n\n%k", 0xFF00DDFF, 0xFFCCCCCC);
@ -502,7 +502,7 @@ void print_kfuseinfo()
void print_mmc_info() void print_mmc_info()
{ {
gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, 1256); gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, gfx_ctxt.height - 24);
gfx_con_setpos(&gfx_con, 0, 0); gfx_con_setpos(&gfx_con, 0, 0);
static const u32 SECTORS_TO_MIB_COEFF = 11; static const u32 SECTORS_TO_MIB_COEFF = 11;
@ -660,7 +660,7 @@ void print_sdcard_info()
{ {
static const u32 SECTORS_TO_MIB_COEFF = 11; static const u32 SECTORS_TO_MIB_COEFF = 11;
gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, 1256); gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, gfx_ctxt.height - 24);
gfx_con_setpos(&gfx_con, 0, 0); gfx_con_setpos(&gfx_con, 0, 0);
if (sd_mount()) if (sd_mount())
@ -712,7 +712,7 @@ void print_sdcard_info()
void print_tsec_key() void print_tsec_key()
{ {
gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, 1256); gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, gfx_ctxt.height - 24);
gfx_con_setpos(&gfx_con, 0, 0); gfx_con_setpos(&gfx_con, 0, 0);
sdmmc_storage_t storage; sdmmc_storage_t storage;
@ -1228,7 +1228,7 @@ static void dump_emmc_selected(emmcPartType_t dumpType)
{ {
int res = 0; int res = 0;
u32 timer = 0; u32 timer = 0;
gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, 1256); gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, gfx_ctxt.height - 24);
tui_sbar(&gfx_con, true); tui_sbar(&gfx_con, true);
gfx_con_setpos(&gfx_con, 0, 0); gfx_con_setpos(&gfx_con, 0, 0);
@ -1467,7 +1467,7 @@ static void restore_emmc_selected(emmcPartType_t restoreType)
{ {
int res = 0; int res = 0;
u32 timer = 0; u32 timer = 0;
gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, 1256); gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, gfx_ctxt.height - 24);
tui_sbar(&gfx_con, true); tui_sbar(&gfx_con, true);
gfx_con_setpos(&gfx_con, 0, 0); gfx_con_setpos(&gfx_con, 0, 0);
@ -1600,7 +1600,7 @@ void dump_packages12()
u8 *loader = (u8 *)calloc(1, 0x40000); u8 *loader = (u8 *)calloc(1, 0x40000);
u8 *pkg2 = NULL; u8 *pkg2 = NULL;
gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, 1256); gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, gfx_ctxt.height - 24);
gfx_con_setpos(&gfx_con, 0, 0); gfx_con_setpos(&gfx_con, 0, 0);
if (!sd_mount()) if (!sd_mount())
@ -2428,7 +2428,7 @@ void toggle_autorcm(bool enable)
sdmmc_storage_t storage; sdmmc_storage_t storage;
sdmmc_t sdmmc; sdmmc_t sdmmc;
gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, 1256); gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, gfx_ctxt.height - 24);
gfx_con_setpos(&gfx_con, 0, 0); gfx_con_setpos(&gfx_con, 0, 0);
if (!sdmmc_storage_init_mmc(&storage, &sdmmc, SDMMC_4, SDMMC_BUS_WIDTH_8, 4)) if (!sdmmc_storage_init_mmc(&storage, &sdmmc, SDMMC_4, SDMMC_BUS_WIDTH_8, 4))
@ -2600,7 +2600,7 @@ int fix_attributes(char *path, u32 *total, u32 is_root, u32 check_first_run)
void fix_sd_attr(u32 type) void fix_sd_attr(u32 type)
{ {
gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, 1256); gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, gfx_ctxt.height - 24);
gfx_con_setpos(&gfx_con, 0, 0); gfx_con_setpos(&gfx_con, 0, 0);
char path[256]; char path[256];
@ -2756,7 +2756,7 @@ void print_battery_charger_info()
void print_battery_info() void print_battery_info()
{ {
gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, 1256); gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, gfx_ctxt.height - 24);
gfx_con_setpos(&gfx_con, 0, 0); gfx_con_setpos(&gfx_con, 0, 0);
print_fuel_gauge_info(); print_fuel_gauge_info();
@ -2799,7 +2799,7 @@ void print_battery_info()
/* void fix_fuel_gauge_configuration() /* void fix_fuel_gauge_configuration()
{ {
gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, 1256); gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, gfx_ctxt.height - 24);
gfx_con_setpos(&gfx_con, 0, 0); gfx_con_setpos(&gfx_con, 0, 0);
int battVoltage, avgCurrent; int battVoltage, avgCurrent;
@ -2852,7 +2852,7 @@ void print_battery_info()
{ {
int avgCurrent; int avgCurrent;
gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, 1256); gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, gfx_ctxt.height - 24);
gfx_con_setpos(&gfx_con, 0, 0); gfx_con_setpos(&gfx_con, 0, 0);
gfx_printf(&gfx_con, "%k\nThis will wipe your battery stats completely!\n" gfx_printf(&gfx_con, "%k\nThis will wipe your battery stats completely!\n"
@ -2863,7 +2863,7 @@ void print_battery_info()
u32 btn = btn_wait(); u32 btn = btn_wait();
if (btn & BTN_POWER) if (btn & BTN_POWER)
{ {
gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, 1256); gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, gfx_ctxt.height - 24);
gfx_con_setpos(&gfx_con, 0, 0); gfx_con_setpos(&gfx_con, 0, 0);
gfx_printf(&gfx_con, "%kKeep the USB cable connected!%k\n\n", 0xFFFFDD00, 0xFFCCCCCC); gfx_printf(&gfx_con, "%kKeep the USB cable connected!%k\n\n", 0xFFFFDD00, 0xFFCCCCCC);
gfx_con_getpos(&gfx_con, &gfx_con.savedx, &gfx_con.savedy); gfx_con_getpos(&gfx_con, &gfx_con.savedx, &gfx_con.savedy);
@ -2898,7 +2898,7 @@ void print_battery_info()
void fix_battery_desync() void fix_battery_desync()
{ {
gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, 1256); gfx_clear_partial_grey(&gfx_ctxt, 0x1B, 0, gfx_ctxt.height - 24);
gfx_con_setpos(&gfx_con, 0, 0); gfx_con_setpos(&gfx_con, 0, 0);
max77620_low_battery_monitor_config(); max77620_low_battery_monitor_config();
@ -3099,7 +3099,7 @@ void ipl_main()
display_init(); display_init();
u32 *fb = display_init_framebuffer(); u32 *fb = display_init_framebuffer();
gfx_init_ctxt(&gfx_ctxt, fb, 720, 1280, 768); gfx_init_ctxt(&gfx_ctxt, fb, 720, 1280, 768, true);
#ifdef MENU_LOGO_ENABLE #ifdef MENU_LOGO_ENABLE
Kc_MENU_LOGO = (u8 *)malloc(0x6000); Kc_MENU_LOGO = (u8 *)malloc(0x6000);

View file

@ -27,6 +27,7 @@ typedef struct _gfx_ctxt_t
u32 width; u32 width;
u32 height; u32 height;
u32 stride; u32 stride;
bool landscape;
} gfx_ctxt_t; } gfx_ctxt_t;
typedef struct _gfx_con_t typedef struct _gfx_con_t