diff options
author | Aurélien Aptel <aurelien.aptel@gmail.com> | 2010-09-11 15:59:54 +0200 |
---|---|---|
committer | Aurélien Aptel <aurelien.aptel@gmail.com> | 2010-09-11 15:59:54 +0200 |
commit | 8c3757986a41ff8fa95b175be40f67d67d7e27b1 (patch) | |
tree | 009e98e5b362683230a9dced765c33d07bb4ab3a /st.c | |
parent | 273d4ba938dc6bf7edb2b1154ea36c19bfcd22d1 (diff) | |
download | st-8c3757986a41ff8fa95b175be40f67d67d7e27b1.tar.gz st-8c3757986a41ff8fa95b175be40f67d67d7e27b1.zip |
use XCreateWindow(), set gravity bit.
Diffstat (limited to 'st.c')
-rw-r--r-- | st.c | 42 |
1 files changed, 25 insertions, 17 deletions
@@ -104,6 +104,7 @@ typedef struct { | |||
104 | /* Purely graphic info */ | 104 | /* Purely graphic info */ |
105 | typedef struct { | 105 | typedef 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 | |||
1121 | xloadcols(void) { | 1122 | xloadcols(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 | ||
1185 | void | 1185 | void |
1186 | xinit(void) { | 1186 | xinit(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 | ||
1438 | void | 1446 | void |