aboutsummaryrefslogtreecommitdiff
path: root/st.c
diff options
context:
space:
mode:
authorAurélien Aptel <aurelien.aptel@gmail.com>2010-09-11 15:59:54 +0200
committerAurélien Aptel <aurelien.aptel@gmail.com>2010-09-11 15:59:54 +0200
commit8c3757986a41ff8fa95b175be40f67d67d7e27b1 (patch)
tree009e98e5b362683230a9dced765c33d07bb4ab3a /st.c
parent273d4ba938dc6bf7edb2b1154ea36c19bfcd22d1 (diff)
downloadst-8c3757986a41ff8fa95b175be40f67d67d7e27b1.tar.gz
st-8c3757986a41ff8fa95b175be40f67d67d7e27b1.zip
use XCreateWindow(), set gravity bit.
Diffstat (limited to 'st.c')
-rw-r--r--st.c42
1 files changed, 25 insertions, 17 deletions
diff --git a/st.c b/st.c
index 261612f..7974629 100644
--- a/st.c
+++ b/st.c
@@ -104,6 +104,7 @@ typedef struct {
104/* Purely graphic info */ 104/* Purely graphic info */
105typedef struct { 105typedef struct {
106 Display* dis; 106 Display* dis;
107 Colormap cmap;
107 Window win; 108 Window win;
108 Pixmap buf; 109 Pixmap buf;
109 int scr; 110 int scr;
@@ -1121,11 +1122,10 @@ void
1121xloadcols(void) { 1122xloadcols(void) {
1122 int i, r, g, b; 1123 int i, r, g, b;
1123 XColor color; 1124 XColor color;
1124 Colormap cmap = DefaultColormap(xw.dis, xw.scr);
1125 unsigned long white = WhitePixel(xw.dis, xw.scr); 1125 unsigned long white = WhitePixel(xw.dis, xw.scr);
1126 1126
1127 for(i = 0; i < 16; i++) { 1127 for(i = 0; i < 16; i++) {
1128 if (!XAllocNamedColor(xw.dis, cmap, colorname[i], &color, &color)) { 1128 if (!XAllocNamedColor(xw.dis, xw.cmap, colorname[i], &color, &color)) {
1129 dc.col[i] = white; 1129 dc.col[i] = white;
1130 fprintf(stderr, "Could not allocate color '%s'\n", colorname[i]); 1130 fprintf(stderr, "Could not allocate color '%s'\n", colorname[i]);
1131 } else 1131 } else
@@ -1139,7 +1139,7 @@ xloadcols(void) {
1139 color.red = r == 0 ? 0 : 0x3737 + 0x2828 * r; 1139 color.red = r == 0 ? 0 : 0x3737 + 0x2828 * r;
1140 color.green = g == 0 ? 0 : 0x3737 + 0x2828 * g; 1140 color.green = g == 0 ? 0 : 0x3737 + 0x2828 * g;
1141 color.blue = b == 0 ? 0 : 0x3737 + 0x2828 * b; 1141 color.blue = b == 0 ? 0 : 0x3737 + 0x2828 * b;
1142 if (!XAllocColor(xw.dis, cmap, &color)) { 1142 if (!XAllocColor(xw.dis, xw.cmap, &color)) {
1143 dc.col[i] = white; 1143 dc.col[i] = white;
1144 fprintf(stderr, "Could not allocate color %d\n", i); 1144 fprintf(stderr, "Could not allocate color %d\n", i);
1145 } else 1145 } else
@@ -1149,7 +1149,7 @@ xloadcols(void) {
1149 1149
1150 for(r = 0; r < 24; r++, i++) { 1150 for(r = 0; r < 24; r++, i++) {
1151 color.red = color.green = color.blue = 0x0808 + 0x0a0a * r; 1151 color.red = color.green = color.blue = 0x0808 + 0x0a0a * r;
1152 if (!XAllocColor(xw.dis, cmap, &color)) { 1152 if (!XAllocColor(xw.dis, xw.cmap, &color)) {
1153 dc.col[i] = white; 1153 dc.col[i] = white;
1154 fprintf(stderr, "Could not allocate color %d\n", i); 1154 fprintf(stderr, "Could not allocate color %d\n", i);
1155 } else 1155 } else
@@ -1184,6 +1184,8 @@ xhints(void)
1184 1184
1185void 1185void
1186xinit(void) { 1186xinit(void) {
1187 XSetWindowAttributes attrs;
1188
1187 if(!(xw.dis = XOpenDisplay(NULL))) 1189 if(!(xw.dis = XOpenDisplay(NULL)))
1188 die("Can't open display\n"); 1190 die("Can't open display\n");
1189 xw.scr = XDefaultScreen(xw.dis); 1191 xw.scr = XDefaultScreen(xw.dis);
@@ -1197,25 +1199,32 @@ xinit(void) {
1197 xw.ch = dc.font->ascent + dc.font->descent; 1199 xw.ch = dc.font->ascent + dc.font->descent;
1198 1200
1199 /* colors */ 1201 /* colors */
1202 xw.cmap = XDefaultColormap(xw.dis, xw.scr);
1200 xloadcols(); 1203 xloadcols();
1201 1204
1202 /* windows */ 1205 /* window - default size */
1203 xw.bufh = term.row * xw.ch; 1206 xw.bufh = 24 * xw.ch;
1204 xw.bufw = term.col * xw.cw; 1207 xw.bufw = 80 * xw.cw;
1205 xw.h = xw.bufh + 2*BORDER; 1208 xw.h = xw.bufh + 2*BORDER;
1206 xw.w = xw.bufw + 2*BORDER; 1209 xw.w = xw.bufw + 2*BORDER;
1207 xw.win = XCreateSimpleWindow(xw.dis, XRootWindow(xw.dis, xw.scr), 0, 0, 1210
1208 xw.w, xw.h, 0, 1211 attrs.background_pixel = dc.col[DefaultBG];
1209 dc.col[DefaultBG], 1212 attrs.border_pixel = dc.col[DefaultBG];
1210 dc.col[DefaultBG]); 1213 attrs.bit_gravity = NorthWestGravity;
1214 attrs.event_mask = ExposureMask | KeyPressMask
1215 | StructureNotifyMask | FocusChangeMask | PointerMotionMask
1216 | ButtonPressMask | ButtonReleaseMask;
1217 attrs.colormap = xw.cmap;
1218
1219 xw.win = XCreateWindow(xw.dis, XRootWindow(xw.dis, xw.scr), 0, 0,
1220 xw.w, xw.h, 0, XDefaultDepth(xw.dis, xw.scr), InputOutput,
1221 XDefaultVisual(xw.dis, xw.scr),
1222 CWBackPixel | CWBorderPixel | CWBitGravity | CWEventMask
1223 | CWColormap,
1224 &attrs);
1211 xw.buf = XCreatePixmap(xw.dis, xw.win, xw.bufw, xw.bufh, XDefaultDepth(xw.dis, xw.scr)); 1225 xw.buf = XCreatePixmap(xw.dis, xw.win, xw.bufw, xw.bufh, XDefaultDepth(xw.dis, xw.scr));
1212 /* gc */ 1226 /* gc */
1213 dc.gc = XCreateGC(xw.dis, xw.win, 0, NULL); 1227 dc.gc = XCreateGC(xw.dis, xw.win, 0, NULL);
1214
1215 /* event mask */
1216 XSelectInput(xw.dis, xw.win, ExposureMask | KeyPressMask
1217 | StructureNotifyMask | FocusChangeMask | PointerMotionMask
1218 | ButtonPressMask | ButtonReleaseMask);
1219 1228
1220 XMapWindow(xw.dis, xw.win); 1229 XMapWindow(xw.dis, xw.win);
1221 xhints(); 1230 xhints();
@@ -1432,7 +1441,6 @@ resize(XEvent *e) {
1432 xw.bufw = MAX(1, xw.bufw); 1441 xw.bufw = MAX(1, xw.bufw);
1433 XFreePixmap(xw.dis, xw.buf); 1442 XFreePixmap(xw.dis, xw.buf);
1434 xw.buf = XCreatePixmap(xw.dis, xw.win, xw.bufw, xw.bufh, XDefaultDepth(xw.dis, xw.scr)); 1443 xw.buf = XCreatePixmap(xw.dis, xw.win, xw.bufw, xw.bufh, XDefaultDepth(xw.dis, xw.scr));
1435 draw(SCREEN_REDRAW);
1436} 1444}
1437 1445
1438void 1446void