Skip to content
Snippets Groups Projects
Commit f0824206 authored by deuce's avatar deuce
Browse files

Add support for x_setfont(). Now both SDL and X11 support different fonts.

parent 22f9890d
Branches
Tags
No related merge requests found
...@@ -169,6 +169,7 @@ int try_x_init(int mode) ...@@ -169,6 +169,7 @@ int try_x_init(int mode)
cio_api.settitle=x_settitle; cio_api.settitle=x_settitle;
cio_api.copytext=x_copytext; cio_api.copytext=x_copytext;
cio_api.getcliptext=x_getcliptext; cio_api.getcliptext=x_getcliptext;
cio_api.setfont=x_setfont;
return(1); return(1);
} }
return(0); return(0);
......
...@@ -129,6 +129,10 @@ sem_t console_mode_changed; ...@@ -129,6 +129,10 @@ sem_t console_mode_changed;
sem_t copybuf_set; sem_t copybuf_set;
sem_t pastebuf_set; sem_t pastebuf_set;
sem_t pastebuf_request; sem_t pastebuf_request;
sem_t font_set;
int new_font;
int font_force;
int setfont_return;
pthread_mutex_t copybuf_mutex; pthread_mutex_t copybuf_mutex;
pthread_mutex_t lines_mutex; pthread_mutex_t lines_mutex;
char *copybuf=NULL; char *copybuf=NULL;
...@@ -1118,6 +1122,32 @@ video_async_event(void *crap) ...@@ -1118,6 +1122,32 @@ video_async_event(void *crap)
case 0: case 0:
if(console_new_mode!=NO_NEW_MODE) if(console_new_mode!=NO_NEW_MODE)
init_mode(console_new_mode); init_mode(console_new_mode);
if(x_current_font!=new_font) {
int oldfont=x_current_font;
x_current_font=new_font;
if(load_font(NULL,FW,FH,FontScale)) {
if(font_force) {
init_mode(3);
sem_wait(&console_mode_changed);
if(load_font(NULL,FW,FH,FontScale)) {
setfont_return=-1;
x_current_font=oldfont;
load_font(NULL,FW,FH,FontScale);
}
else
setfont_return=0;
}
else {
setfont_return=-1;
x_current_font=oldfont;
load_font(NULL,FW,FH,FontScale);
}
}
else
setfont_return=0;
resize_window();
sem_post(&font_set);
}
while(!sem_trywait(&x11_beep)) while(!sem_trywait(&x11_beep))
x11.XBell(dpy, 0); x11.XBell(dpy, 0);
if(!sem_trywait(&x11_name)) if(!sem_trywait(&x11_name))
...@@ -1314,6 +1344,7 @@ load_font(char *filename, int width, int height, int scale) ...@@ -1314,6 +1344,7 @@ load_font(char *filename, int width, int height, int scale)
} }
if(conio_fontdata[i].desc==NULL) if(conio_fontdata[i].desc==NULL)
x_current_font=0; x_current_font=0;
new_font=x_current_font;
} }
if(conio_fontdata[x_current_font].desc==NULL) if(conio_fontdata[x_current_font].desc==NULL)
return(-1); return(-1);
...@@ -1356,12 +1387,11 @@ load_font(char *filename, int width, int height, int scale) ...@@ -1356,12 +1387,11 @@ load_font(char *filename, int width, int height, int scale)
| ((fontdata[i*height+j] & 0x01) << 7); | ((fontdata[i*height+j] & 0x01) << 7);
} }
} }
if(pfnt!=0) if(pfnt!=0)
x11.XFreePixmap(dpy,pfnt); x11.XFreePixmap(dpy,pfnt);
scaledfont=scale_bitmap(font, FW, FH*256, &FontScale); scaledfont=scale_bitmap(fontdata, FW, FH*256, &FontScale);
if(scaledfont==NULL) if(scaledfont==NULL)
pfnt=x11.XCreateBitmapFromData(dpy, win, font, FW, FH*256); pfnt=x11.XCreateBitmapFromData(dpy, win, fontdata, FW, FH*256);
else { else {
FW*=scale; FW*=scale;
FH*=scale; FH*=scale;
...@@ -1662,6 +1692,7 @@ console_init() ...@@ -1662,6 +1692,7 @@ console_init()
sem_init(&x11_beep,0,0); sem_init(&x11_beep,0,0);
sem_init(&x11_title,0,0); sem_init(&x11_title,0,0);
sem_init(&x11_name,0,0); sem_init(&x11_name,0,0);
sem_init(&font_set,0,0);
pthread_mutex_init(&copybuf_mutex, NULL); pthread_mutex_init(&copybuf_mutex, NULL);
pthread_mutex_init(&lines_mutex, NULL); pthread_mutex_init(&lines_mutex, NULL);
......
...@@ -49,6 +49,10 @@ extern sem_t console_mode_changed; ...@@ -49,6 +49,10 @@ extern sem_t console_mode_changed;
extern sem_t copybuf_set; extern sem_t copybuf_set;
extern sem_t pastebuf_request; extern sem_t pastebuf_request;
extern sem_t pastebuf_set; extern sem_t pastebuf_set;
extern sem_t font_set;
extern int new_font;
extern int font_force;
extern int setfont_return;
extern pthread_mutex_t copybuf_mutex; extern pthread_mutex_t copybuf_mutex;
extern char *copybuf; extern char *copybuf;
extern char *pastebuf; extern char *pastebuf;
......
...@@ -317,3 +317,11 @@ char *x_getcliptext(void) ...@@ -317,3 +317,11 @@ char *x_getcliptext(void)
sem_post(&pastebuf_request); sem_post(&pastebuf_request);
return(ret); return(ret);
} }
int x_setfont(int font, int force)
{
font_force=force;
new_font=font;
sem_wait(&font_set);
return(setfont_return);
}
...@@ -65,6 +65,7 @@ void x_setname(const char *name); ...@@ -65,6 +65,7 @@ void x_setname(const char *name);
void x_settitle(const char *title); void x_settitle(const char *title);
void x_copytext(const char *text, size_t buflen); void x_copytext(const char *text, size_t buflen);
char *x_getcliptext(void); char *x_getcliptext(void);
int x_setfont(int font, int force);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment