Introduction
Introduction Statistics Contact Development Disclaimer Help
tRemoving the xclearborders() hack. St now cleans up the parts of the border, -…
git clone git://src.adamsgaard.dk/st
Log
Files
Refs
README
LICENSE
---
commit 0cc7ee5e737c9df5a41a4bca708e583117830085
parent 4eddf19fdc2f3845c927291b99d3faefe73f98f3
Author: Christoph Lohmann <[email protected]>
Date: Sat, 6 Oct 2012 13:43:01 +0200
Removing the xclearborders() hack. St now cleans up the parts of the border,
if something needs to be drawn close to it.
Diffstat:
M st.c | 59 ++++++++++++++++-------------…
1 file changed, 31 insertions(+), 28 deletions(-)
---
diff --git a/st.c b/st.c
t@@ -224,7 +224,9 @@ typedef struct {
int mode;
int bx, by;
int ex, ey;
- struct {int x, y;} b, e;
+ struct {
+ int x, y;
+ } b, e;
char *clip;
Atom xtarget;
bool alt;
t@@ -587,10 +589,10 @@ selected(int x, int y) {
return BETWEEN(x, bx, ex);
}
- return ((sel.b.y < y&&y < sel.e.y)
- || (y==sel.e.y && x<=sel.e.x))
- || (y==sel.b.y && x>=sel.b.x
- && (x<=sel.e.x || sel.b.y!=sel.e.y));
+ return ((sel.b.y < y && y < sel.e.y)
+ || (y == sel.e.y && x <= sel.e.x))
+ || (y == sel.b.y && x >= sel.b.x
+ && (x <= sel.e.x || sel.b.y != sel.e.y));
}
void
t@@ -803,12 +805,12 @@ brelease(XEvent *e) {
/* double click to select word */
sel.bx = sel.ex;
while(sel.bx > 0 && term.line[sel.ey][sel.bx-1…
- term.line[sel.ey][sel.bx-1].c[0] != …
+ term.line[sel.ey][sel.bx-1].c[…
sel.bx--;
}
sel.b.x = sel.bx;
while(sel.ex < term.col-1 && term.line[sel.ey]…
- term.line[sel.ey][sel.ex+1].c[0] != …
+ term.line[sel.ey][sel.ex+1].c[…
sel.ex++;
}
sel.e.x = sel.ex;
t@@ -1031,7 +1033,8 @@ treset(void) {
memset(term.tabs, 0, term.col * sizeof(*term.tabs));
for(i = TAB; i < term.col; i += TAB)
term.tabs[i] = 1;
- term.top = 0, term.bot = term.row - 1;
+ term.top = 0;
+ term.bot = term.row - 1;
term.mode = MODE_WRAP;
tclearregion(0, 0, term.col-1, term.row-1);
t@@ -1040,7 +1043,8 @@ treset(void) {
void
tnew(int col, int row) {
/* set screen size */
- term.row = row, term.col = col;
+ term.row = row;
+ term.col = col;
term.line = xmalloc(term.row * sizeof(Line));
term.alt = xmalloc(term.row * sizeof(Line));
term.dirty = xmalloc(term.row * sizeof(*term.dirty));
t@@ -1437,8 +1441,8 @@ tsetmode(bool priv, bool set, int *args, int narg) {
if(IS_SET(MODE_ALTSCREEN))
tclearregion(0, 0, term.col-1, term.ro…
if((set && !IS_SET(MODE_ALTSCREEN)) ||
- (!set && IS_SET(MODE_ALTSCREEN))) {
- tswapscreen();
+ (!set && IS_SET(MODE_ALTSCREEN…
+ tswapscreen();
}
if(*args != 1049)
break;
t@@ -1909,7 +1913,6 @@ tputc(char *c, int len) {
case 'c': /* RIS -- Reset to inital state */
treset();
term.esc = 0;
- xclearborders();
xresettitle();
break;
case '=': /* DECPAM -- Application keypad */
t@@ -2091,18 +2094,6 @@ xclear(int x1, int y1, int x2, int y2) {
}
void
-xclearborders(void) {
- /* top and left border */
- xclear(0, 0, BORDER, xw.h);
- xclear(0, 0, xw.w, BORDER);
-
- /* lower and right border */
- xclear(BORDER, xw.th - 1, xw.w, xw.h);
- /* Will just draw what hasn't been drawn by the previous call. */
- xclear(xw.tw - 1, BORDER, xw.w, xw.h - xw.th - 2);
-}
-
-void
xhints(void) {
XClassHint class = {opt_class ? opt_class : TNAME, TNAME};
XWMHints wm = {.flags = InputHint, .input = 1};
t@@ -2264,8 +2255,8 @@ xinit(void) {
void
xdraws(char *s, Glyph base, int x, int y, int charlen, int bytelen) {
- int winx = BORDER+x*xw.cw, winy = BORDER+y*xw.ch,
- width = charlen*xw.cw;
+ int winx = BORDER + x * xw.cw, winy = BORDER + y * xw.ch,
+ width = charlen * xw.cw;
Font *font = &dc.font;
XGlyphInfo extents;
XftColor *fg = &dc.xft_col[base.fg], *bg = &dc.xft_col[base.bg],
t@@ -2328,6 +2319,20 @@ xdraws(char *s, Glyph base, int x, int y, int charlen, …
&extents);
width = extents.xOff;
+ /* Intelligent cleaning up of the borders. */
+ if(x == 0) {
+ xclear(0, (y == 0)? 0 : winy, BORDER,
+ winy + xw.ch + (y == term.row-1)? xw.h : 0);
+ }
+ if(x + charlen >= term.col-1) {
+ xclear(winx + width, (y == 0)? 0 : winy, xw.w,
+ winy + xw.ch + (y == term.row-1)? xw.h : 0);
+ }
+ if(y == 0)
+ xclear(winx, 0, winx + width, BORDER);
+ if(y == term.row-1)
+ xclear(winx, winy + xw.ch, winx + width, xw.h);
+
XftDrawRect(xw.xft_draw, bg, winx, winy, width, xw.ch);
XftDrawStringUtf8(xw.xft_draw, fg, font->xft_set, winx,
winy + font->ascent, (FcChar8 *)s, bytelen);
t@@ -2382,7 +2387,6 @@ void
redraw(void) {
struct timespec tv = {0, REDRAW_TIMEOUT * 1000};
- xclearborders();
tfulldirt();
draw();
XSync(xw.dpy, False); /* necessary for a good tput flash */
t@@ -2598,7 +2602,6 @@ resize(XEvent *e) {
tresize(col, row);
xresize(col, row);
- xclearborders();
ttyresize();
}
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.