osd: some refactoring.
This commit is contained in:
12
menu.cpp
12
menu.cpp
@@ -1230,7 +1230,7 @@ void HandleUI(void)
|
|||||||
|
|
||||||
// set helptext with core display on top of basic info
|
// set helptext with core display on top of basic info
|
||||||
sprintf(helptext_custom, HELPTEXT_SPACER);
|
sprintf(helptext_custom, HELPTEXT_SPACER);
|
||||||
strcat(helptext_custom, OsdCoreName());
|
strcat(helptext_custom, OsdCoreNameGet());
|
||||||
strcat(helptext_custom, helptexts[HELPTEXT_MAIN]);
|
strcat(helptext_custom, helptexts[HELPTEXT_MAIN]);
|
||||||
helptext = helptext_custom;
|
helptext = helptext_custom;
|
||||||
break;
|
break;
|
||||||
@@ -1344,7 +1344,7 @@ void HandleUI(void)
|
|||||||
if (!p[0]) OsdCoreNameSet("8BIT");
|
if (!p[0]) OsdCoreNameSet("8BIT");
|
||||||
else OsdCoreNameSet(p);
|
else OsdCoreNameSet(p);
|
||||||
|
|
||||||
OsdSetTitle(OsdCoreName(), 0);
|
OsdSetTitle(OsdCoreNameGet());
|
||||||
dip_submenu = -1;
|
dip_submenu = -1;
|
||||||
|
|
||||||
// add options as requested by core
|
// add options as requested by core
|
||||||
@@ -1507,7 +1507,7 @@ void HandleUI(void)
|
|||||||
if (p[0] == 'V')
|
if (p[0] == 'V')
|
||||||
{
|
{
|
||||||
// get version string
|
// get version string
|
||||||
strcpy(s, OsdCoreName());
|
strcpy(s, OsdCoreNameGet());
|
||||||
strcat(s, " ");
|
strcat(s, " ");
|
||||||
substrcpy(s + strlen(s), p, 1);
|
substrcpy(s + strlen(s), p, 1);
|
||||||
OsdCoreNameSet(s);
|
OsdCoreNameSet(s);
|
||||||
@@ -1540,7 +1540,7 @@ void HandleUI(void)
|
|||||||
|
|
||||||
// set helptext with core display on top of basic info
|
// set helptext with core display on top of basic info
|
||||||
sprintf(helptext_custom, HELPTEXT_SPACER);
|
sprintf(helptext_custom, HELPTEXT_SPACER);
|
||||||
strcat(helptext_custom, OsdCoreName());
|
strcat(helptext_custom, OsdCoreNameGet());
|
||||||
strcat(helptext_custom, helptexts[HELPTEXT_MAIN]);
|
strcat(helptext_custom, helptexts[HELPTEXT_MAIN]);
|
||||||
helptext = helptext_custom;
|
helptext = helptext_custom;
|
||||||
|
|
||||||
@@ -2741,12 +2741,12 @@ void HandleUI(void)
|
|||||||
|
|
||||||
s[0] = 0;
|
s[0] = 0;
|
||||||
{
|
{
|
||||||
int len = strlen(OsdCoreName());
|
int len = strlen(OsdCoreNameGet());
|
||||||
if (len > 30) len = 30;
|
if (len > 30) len = 30;
|
||||||
int sp = (30 - len) / 2;
|
int sp = (30 - len) / 2;
|
||||||
for (int i = 0; i < sp; i++) strcat(s, " ");
|
for (int i = 0; i < sp; i++) strcat(s, " ");
|
||||||
char *s2 = s + strlen(s);
|
char *s2 = s + strlen(s);
|
||||||
char *s3 = OsdCoreName();
|
char *s3 = OsdCoreNameGet();
|
||||||
for (int i = 0; i < len; i++) *s2++ = *s3++;
|
for (int i = 0; i < len; i++) *s2++ = *s3++;
|
||||||
*s2++ = 0;
|
*s2++ = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
196
osd.cpp
196
osd.cpp
@@ -77,12 +77,12 @@ static int osdbufpos = 0;
|
|||||||
static int osdset = 0;
|
static int osdset = 0;
|
||||||
|
|
||||||
char framebuffer[16][256];
|
char framebuffer[16][256];
|
||||||
void framebuffer_clear()
|
static void framebuffer_clear()
|
||||||
{
|
{
|
||||||
memset(framebuffer, 0, sizeof(framebuffer));
|
memset(framebuffer, 0, sizeof(framebuffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
void framebuffer_plot(int x, int y)
|
static void framebuffer_plot(int x, int y)
|
||||||
{
|
{
|
||||||
framebuffer[y / 8][x] |= (1 << (y & 7));
|
framebuffer[y / 8][x] |= (1 << (y & 7));
|
||||||
}
|
}
|
||||||
@@ -221,6 +221,27 @@ static void osd_start(int line)
|
|||||||
osdbufpos = line * 256;
|
osdbufpos = line * 256;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void draw_title(const unsigned char *p)
|
||||||
|
{
|
||||||
|
// left white border
|
||||||
|
osdbuf[osdbufpos++] = 0xff;
|
||||||
|
osdbuf[osdbufpos++] = 0xff;
|
||||||
|
osdbuf[osdbufpos++] = 0xff;
|
||||||
|
|
||||||
|
for (int i = 0; i < 8; i++)
|
||||||
|
{
|
||||||
|
osdbuf[osdbufpos++] = 255 ^ *p;
|
||||||
|
osdbuf[osdbufpos++] = 255 ^ *p++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// right white border
|
||||||
|
osdbuf[osdbufpos++] = 0xff;
|
||||||
|
|
||||||
|
// blue gap
|
||||||
|
osdbuf[osdbufpos++] = 0;
|
||||||
|
osdbuf[osdbufpos++] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
// write a null-terminated string <s> to the OSD buffer starting at line <n>
|
// write a null-terminated string <s> to the OSD buffer starting at line <n>
|
||||||
void OsdWriteOffset(unsigned char n, const char *s, unsigned char invert, unsigned char stipple, char offset, char leftchar, char usebg, int maxinv)
|
void OsdWriteOffset(unsigned char n, const char *s, unsigned char invert, unsigned char stipple, char offset, char leftchar, char usebg, int maxinv)
|
||||||
{
|
{
|
||||||
@@ -252,7 +273,6 @@ void OsdWriteOffset(unsigned char n, const char *s, unsigned char invert, unsign
|
|||||||
if (invert && i / 8 >= maxinv) invert = 0;
|
if (invert && i / 8 >= maxinv) invert = 0;
|
||||||
if (i == 0 && (n < osd_size))
|
if (i == 0 && (n < osd_size))
|
||||||
{ // Render sidestripe
|
{ // Render sidestripe
|
||||||
unsigned char j;
|
|
||||||
unsigned char tmp[8];
|
unsigned char tmp[8];
|
||||||
|
|
||||||
if (leftchar)
|
if (leftchar)
|
||||||
@@ -267,23 +287,7 @@ void OsdWriteOffset(unsigned char n, const char *s, unsigned char invert, unsign
|
|||||||
p = &titlebuffer[(osd_size - 1 - n) * 8];
|
p = &titlebuffer[(osd_size - 1 - n) * 8];
|
||||||
}
|
}
|
||||||
|
|
||||||
// left white border
|
draw_title(p);
|
||||||
osdbuf[osdbufpos++] = 0xff;
|
|
||||||
osdbuf[osdbufpos++] = 0xff;
|
|
||||||
|
|
||||||
for (j = 0; j < 8; j++)
|
|
||||||
{
|
|
||||||
osdbuf[osdbufpos++] = 255 ^ *p;
|
|
||||||
osdbuf[osdbufpos++] = 255 ^ *p++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// right white border
|
|
||||||
osdbuf[osdbufpos++] = 0xff;
|
|
||||||
osdbuf[osdbufpos++] = 0xff;
|
|
||||||
|
|
||||||
// blue gap
|
|
||||||
osdbuf[osdbufpos++] = 0;
|
|
||||||
osdbuf[osdbufpos++] = 0;
|
|
||||||
i += 22;
|
i += 22;
|
||||||
}
|
}
|
||||||
else if (n == (osd_size-1) && (arrowmask & OSD_ARROW_LEFT)) { // Draw initial arrow
|
else if (n == (osd_size-1) && (arrowmask & OSD_ARROW_LEFT)) { // Draw initial arrow
|
||||||
@@ -362,10 +366,6 @@ void OsdWriteOffset(unsigned char n, const char *s, unsigned char invert, unsign
|
|||||||
|
|
||||||
void OsdDrawLogo(int row)
|
void OsdDrawLogo(int row)
|
||||||
{
|
{
|
||||||
unsigned short i;
|
|
||||||
const unsigned char *p;
|
|
||||||
int linelimit = OSDLINELEN;
|
|
||||||
|
|
||||||
int mag = (osd_size / 8);
|
int mag = (osd_size / 8);
|
||||||
uint n = row * mag;
|
uint n = row * mag;
|
||||||
|
|
||||||
@@ -380,30 +380,12 @@ void OsdDrawLogo(int row)
|
|||||||
|
|
||||||
char *bg = framebuffer[n + k];
|
char *bg = framebuffer[n + k];
|
||||||
|
|
||||||
i = 0;
|
int i = 0;
|
||||||
while(i < linelimit)
|
while(i < OSDLINELEN)
|
||||||
{
|
{
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
{
|
{
|
||||||
unsigned char j;
|
draw_title(&titlebuffer[(osd_size - 1 - n - k) * 8]);
|
||||||
p = &titlebuffer[(osd_size - 1 - n - k) * 8];
|
|
||||||
// left white border
|
|
||||||
osdbuf[osdbufpos++] = 0xff;
|
|
||||||
osdbuf[osdbufpos++] = 0xff;
|
|
||||||
|
|
||||||
for (j = 0; j < 8; j++)
|
|
||||||
{
|
|
||||||
osdbuf[osdbufpos++] = 255 ^ *p;
|
|
||||||
osdbuf[osdbufpos++] = 255 ^ *p++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// right white border
|
|
||||||
osdbuf[osdbufpos++] = 0xff;
|
|
||||||
osdbuf[osdbufpos++] = 0xff;
|
|
||||||
|
|
||||||
// blue gap
|
|
||||||
osdbuf[osdbufpos++] = 0;
|
|
||||||
osdbuf[osdbufpos++] = 0;
|
|
||||||
i += 22;
|
i += 22;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -424,80 +406,6 @@ void OsdDrawLogo(int row)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// write a null-terminated string <s> to the OSD buffer starting at line <n>
|
|
||||||
void OSD_PrintText(unsigned char line, const char *hdr, const char *text, unsigned long start, unsigned long width, unsigned long offset, unsigned char invert)
|
|
||||||
{
|
|
||||||
// line : OSD line number (0-7)
|
|
||||||
// text : pointer to null-terminated string
|
|
||||||
// start : start position (in pixels)
|
|
||||||
// width : printed text length in pixels
|
|
||||||
// offset : scroll offset in pixels counting from the start of the string (0-7)
|
|
||||||
// invert : invertion flag
|
|
||||||
|
|
||||||
const unsigned char *p;
|
|
||||||
int i, j;
|
|
||||||
|
|
||||||
// select buffer and line to write to
|
|
||||||
osd_start(line);
|
|
||||||
|
|
||||||
if (invert) invert = 0xff;
|
|
||||||
|
|
||||||
p = &titlebuffer[(osd_size - 1 - line) * 8];
|
|
||||||
if (start>2)
|
|
||||||
{
|
|
||||||
osdbuf[osdbufpos++] = 0xff;
|
|
||||||
osdbuf[osdbufpos++] = 0xff;
|
|
||||||
start -= 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = start>16 ? 16 : start;
|
|
||||||
for (j = 0; j<(i / 2); ++j)
|
|
||||||
{
|
|
||||||
osdbuf[osdbufpos++] = 255 ^ *p;
|
|
||||||
osdbuf[osdbufpos++] = 255 ^ *p++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i & 1) osdbuf[osdbufpos++] = 255 ^ *p;
|
|
||||||
start -= i;
|
|
||||||
|
|
||||||
if (start>2)
|
|
||||||
{
|
|
||||||
osdbuf[osdbufpos++] = 0xff;
|
|
||||||
osdbuf[osdbufpos++] = 0xff;
|
|
||||||
start -= 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (start--) osdbuf[osdbufpos++] = 0x00;
|
|
||||||
|
|
||||||
while(*hdr)
|
|
||||||
{
|
|
||||||
width -= 8;
|
|
||||||
p = charfont[(uint)(*hdr++)];
|
|
||||||
for (int i = 0; i < 8; i++) osdbuf[osdbufpos++] = *p++ ^ invert;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (offset)
|
|
||||||
{
|
|
||||||
width -= 8 - offset;
|
|
||||||
p = &charfont[(uint)(*text++)][offset];
|
|
||||||
for (; offset < 8; offset++) osdbuf[osdbufpos++] = *p++ ^ invert;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (width > 8)
|
|
||||||
{
|
|
||||||
unsigned char b;
|
|
||||||
p = &charfont[(uint)(*text++)][0];
|
|
||||||
for (b = 0; b < 8; b++) osdbuf[osdbufpos++] = *p++ ^ invert;
|
|
||||||
width -= 8;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (width)
|
|
||||||
{
|
|
||||||
p = &charfont[(uint)(*text++)][0];
|
|
||||||
while (width--) osdbuf[osdbufpos++] = *p++ ^ invert;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#define INFO_MAXW 32
|
#define INFO_MAXW 32
|
||||||
#define INFO_MAXH 16
|
#define INFO_MAXH 16
|
||||||
|
|
||||||
@@ -626,6 +534,52 @@ void OsdMenuCtl(int en)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// write a null-terminated string <s> to the OSD buffer starting at line <n>
|
||||||
|
static void print_line(unsigned char line, const char *hdr, const char *text, unsigned long width, unsigned long offset, unsigned char invert)
|
||||||
|
{
|
||||||
|
// line : OSD line number (0-7)
|
||||||
|
// text : pointer to null-terminated string
|
||||||
|
// start : start position (in pixels)
|
||||||
|
// width : printed text length in pixels
|
||||||
|
// offset : scroll offset in pixels counting from the start of the string (0-7)
|
||||||
|
// invert : invertion flag
|
||||||
|
|
||||||
|
const unsigned char *p;
|
||||||
|
|
||||||
|
if (invert) invert = 0xff;
|
||||||
|
|
||||||
|
// select buffer and line to write to
|
||||||
|
osd_start(line);
|
||||||
|
draw_title(&titlebuffer[(osd_size - 1 - line) * 8]);
|
||||||
|
|
||||||
|
while (*hdr)
|
||||||
|
{
|
||||||
|
width -= 8;
|
||||||
|
p = charfont[(uint)(*hdr++)];
|
||||||
|
for (int i = 0; i < 8; i++) osdbuf[osdbufpos++] = *p++ ^ invert;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (offset)
|
||||||
|
{
|
||||||
|
width -= 8 - offset;
|
||||||
|
p = &charfont[(uint)(*text++)][offset];
|
||||||
|
for (; offset < 8; offset++) osdbuf[osdbufpos++] = *p++ ^ invert;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (width > 8)
|
||||||
|
{
|
||||||
|
unsigned char b;
|
||||||
|
p = &charfont[(uint)(*text++)][0];
|
||||||
|
for (b = 0; b < 8; b++) osdbuf[osdbufpos++] = *p++ ^ invert;
|
||||||
|
width -= 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (width)
|
||||||
|
{
|
||||||
|
p = &charfont[(uint)(*text++)][0];
|
||||||
|
while (width--) osdbuf[osdbufpos++] = *p++ ^ invert;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ScrollText(char n, const char *str, int off, int len, int max_len, unsigned char invert)
|
void ScrollText(char n, const char *str, int off, int len, int max_len, unsigned char invert)
|
||||||
{
|
{
|
||||||
@@ -670,7 +624,7 @@ void ScrollText(char n, const char *str, int off, int len, int max_len, unsigned
|
|||||||
strncpy(s + len + BLANKSPACE, str, max_len - len - BLANKSPACE); // repeat the name after its end and predefined number of blank space
|
strncpy(s + len + BLANKSPACE, str, max_len - len - BLANKSPACE); // repeat the name after its end and predefined number of blank space
|
||||||
}
|
}
|
||||||
|
|
||||||
OSD_PrintText(n, hdr, s, 22, (max_len - 1) << 3, (scroll_offset & 0x7), invert); // OSD print function with pixel precision
|
print_line(n, hdr, s, (max_len - 1) << 3, (scroll_offset & 0x7), invert); // OSD print function with pixel precision
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -688,7 +642,7 @@ void OsdCoreNameSet(const char* str)
|
|||||||
sprintf(lastcorename, "%s", str);
|
sprintf(lastcorename, "%s", str);
|
||||||
}
|
}
|
||||||
|
|
||||||
char* OsdCoreName()
|
char* OsdCoreNameGet()
|
||||||
{
|
{
|
||||||
return lastcorename;
|
return lastcorename;
|
||||||
}
|
}
|
||||||
|
|||||||
2
osd.h
2
osd.h
@@ -34,7 +34,7 @@ void StarsUpdate();
|
|||||||
|
|
||||||
// get/set core currently loaded
|
// get/set core currently loaded
|
||||||
void OsdCoreNameSet(const char* str);
|
void OsdCoreNameSet(const char* str);
|
||||||
char* OsdCoreName();
|
char* OsdCoreNameGet();
|
||||||
void OsdSetSize(int n);
|
void OsdSetSize(int n);
|
||||||
int OsdGetSize();
|
int OsdGetSize();
|
||||||
|
|
||||||
|
|||||||
@@ -2063,7 +2063,7 @@ void sharpmz_ui(int idleState, int idle2State, int system
|
|||||||
|
|
||||||
// set helptext with core display on top of basic info
|
// set helptext with core display on top of basic info
|
||||||
sprintf(helptext_custom, " ");
|
sprintf(helptext_custom, " ");
|
||||||
strcat(helptext_custom, OsdCoreName());
|
strcat(helptext_custom, OsdCoreNameGet());
|
||||||
strcat(helptext_custom, " ");
|
strcat(helptext_custom, " ");
|
||||||
strcat(helptext_custom, SHARPMZ_HELPTEXT[0]);
|
strcat(helptext_custom, SHARPMZ_HELPTEXT[0]);
|
||||||
*helptext = helptext_custom;
|
*helptext = helptext_custom;
|
||||||
|
|||||||
@@ -455,7 +455,7 @@ static void parse_config()
|
|||||||
{
|
{
|
||||||
// get version string
|
// get version string
|
||||||
char s[128];
|
char s[128];
|
||||||
strcpy(s, OsdCoreName());
|
strcpy(s, OsdCoreNameGet());
|
||||||
strcat(s, " ");
|
strcat(s, " ");
|
||||||
substrcpy(s + strlen(s), p, 1);
|
substrcpy(s + strlen(s), p, 1);
|
||||||
OsdCoreNameSet(s);
|
OsdCoreNameSet(s);
|
||||||
|
|||||||
Reference in New Issue
Block a user