diff options
| -rw-r--r-- | ChangeLog | 17 | ||||
| -rw-r--r-- | display.c | 23 | ||||
| -rw-r--r-- | fm.h | 5 | ||||
| -rw-r--r-- | main.c | 83 | 
4 files changed, 96 insertions, 32 deletions
| @@ -1,3 +1,18 @@ +2002-11-22  Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp> + +	* [w3m-dev 03456] tiling of tab +	* display.c (displayBuffer): use LastTab->y +		(redrawNLine): fix column calculation +	* fm.h (TabBuffer): add x1, x2, y +	* main.c (calcTabPos): added +		(main): calcTabPos() +		(mouse_scroll_line): rewrite +		(process_mouse): use LastTab->y +		(_newT): calcTabPos() +		(calcTabPos): added +		(deleteTab): calcTabPos() +		(moveTab): calcTabPos() +  2002-11-22  Fumitoshi UKAI  <ukai@debian.or.jp>  	* doc/README.mouse_menu: added @@ -4978,4 +4993,4 @@ a	* [w3m-dev 03276] compile error on EWS4800  	* release-0-2-1  	* import w3m-0.2.1 -$Id: ChangeLog,v 1.542 2002/11/21 16:47:13 ukai Exp $ +$Id: ChangeLog,v 1.543 2002/11/21 17:05:00 ukai Exp $ @@ -1,4 +1,4 @@ -/* $Id: display.c,v 1.36 2002/11/21 16:32:29 ukai Exp $ */ +/* $Id: display.c,v 1.37 2002/11/21 17:05:01 ukai Exp $ */  #include <signal.h>  #include "fm.h" @@ -255,7 +255,7 @@ displayBuffer(Buffer *buf, int mode)  	buf->rootX = 0;      buf->COLS = COLS - buf->rootX;      if (nTab2 > 1) { -	ny = (nTab2 - 1) / nTabLine() + 2; +	ny = LastTab->y + 2;  	if (ny > LASTLINE)  	    ny = LASTLINE;      } @@ -447,7 +447,7 @@ redrawNLine(Buffer *buf, int n)  #endif				/* USE_COLOR */      if (nTab2 > 1) {  	TabBuffer *t; -	int nx = nTabLine(), col = COLS - 2, x, l; +	int l;  	i = 0;  	move(0, 0); @@ -456,31 +456,30 @@ redrawNLine(Buffer *buf, int n)  	    clrtoeolx();  	    i++;  	} -	for (t = FirstTab; t; t = t->nextTab, i++) { -	    x = col * (i % nx) / nx; -	    move(i / nx, x); +	clrtoeolx(); +	for (t = FirstTab; t; t = t->nextTab) { +	    move(t->y, t->x1);  	    if (t == CurrentTab)  		bold();  	    addch('[');  	    l = strlen(t->currentBuffer->buffername); -	    if (col / nx - 2 > l) -		addnstr_sup(" ", (col / nx - 2 - l) / 2); +	    if (t->x2 - t->x1 - 2 > l) +		addnstr_sup(" ", (t->x2 - t->x1 - 1 - l) / 2);  	    if (t == CurrentTab)  		EFFECT_ACTIVE_START;  	    addstr(t->currentBuffer->buffername);  	    if (t == CurrentTab)  		EFFECT_ACTIVE_END;  	    clrtoeolx(); -	    x = col * (i % nx + 1) / nx - 1; -	    move(i / nx, x); +	    move(t->y, t->x2);  	    addch(']');  	    if (t == CurrentTab)  		boldend();  	    clrtoeolx();  	} -	move(0, col); +	move(0, COLS - 2);  	addstr(" x"); -	move((nTab2 - 1) / nx + 1, 0); +	move(LastTab->y + 1, 0);  	for (i = 0; i < COLS; i++)  	    addch('~');      } @@ -1,4 +1,4 @@ -/* $Id: fm.h,v 1.85 2002/11/21 16:31:36 ukai Exp $ */ +/* $Id: fm.h,v 1.86 2002/11/21 17:05:01 ukai Exp $ */  /*    * w3m: WWW wo Miru utility   *  @@ -452,6 +452,9 @@ typedef struct _TabBuffer {      struct _TabBuffer *prevTab;      Buffer *currentBuffer;      Buffer *firstBuffer; +    short x1; +    short x2; +    short y;  } TabBuffer;  typedef struct _DownloadList { @@ -1,4 +1,4 @@ -/* $Id: main.c,v 1.147 2002/11/21 16:31:36 ukai Exp $ */ +/* $Id: main.c,v 1.148 2002/11/21 17:05:01 ukai Exp $ */  #define MAINPROGRAM  #include "fm.h"  #include <signal.h> @@ -101,6 +101,7 @@ void set_buffer_environ(Buffer *);  static void _followForm(int);  static void _goLine(char *);  static void _newT(void); +static void calcTabPos(void);  static void followTab(TabBuffer * tab);  static void moveTab(TabBuffer * t, TabBuffer * t2, int right);  static int check_target = TRUE; @@ -895,6 +896,7 @@ main(int argc, char **argv, char **envp)  	if (CurrentTab == NULL) {  	    FirstTab = LastTab = CurrentTab = newTab();  	    nTab = 1; +	    calcTabPos();  	    Firstbuf = Currentbuf = newbuf;  	}  	else { @@ -935,6 +937,7 @@ main(int argc, char **argv, char **envp)  	if (!FirstTab) {  	    FirstTab = LastTab = CurrentTab = newTab();  	    nTab = 1; +	    calcTabPos();  	}  	if (!Firstbuf || Firstbuf == NO_BUFFER) {  	    Firstbuf = Currentbuf = newBuffer(INIT_BUFFER_WIDTH); @@ -4785,21 +4788,13 @@ mouse_scroll_line(void)  static TabBuffer *  posTab(int x, int y)  { -    TabBuffer *t; -    int i, n, col = COLS - 2; - -    if (col <= 0) -	return NULL; -    n = nTabLine(); -    n = x * n / col + y * n; -    i = 0; -    if (mouse_menu) { -	if (n == 0) -	    return NO_TABBUFFER; -	i++; +    TabBuffer *tab; +   +    for (tab = FirstTab; tab; tab = tab->nextTab) { +	if (tab->x1 <= x && x <= tab->x2 && tab->y == y) +	    return tab;      } -    for (t = FirstTab; t && i < n; t = t->nextTab, i++) ; -    return t; +    return NULL;  }  static void @@ -4836,11 +4831,11 @@ process_mouse(int btn, int x, int y)      int ny = 0;      if (nTab2 > 1) -	ny = (nTab2 - 1) / nTabLine() + 1; +	ny = LastTab->y + 1;      if (btn == MOUSE_BTN_UP) {  	switch (press_btn) {  	case MOUSE_BTN1_DOWN: -	    if (nTab2 > 1 && y < ny) { +	    if (ny && y < ny) {  		if (press_y == y && press_x == x) {  		    if (y == 0 && x >= COLS - 2) {  			deleteTab(CurrentTab); @@ -4958,7 +4953,7 @@ process_mouse(int btn, int x, int y)  	    }  	    break;  	case MOUSE_BTN2_DOWN: -	    if (nTab2 > 1 && y < ny) { +	    if (ny && y < ny) {  		if (press_y == y && press_x == x) {  		    t = posTab(x, y);  		    if (t == NO_TABBUFFER) { @@ -5616,6 +5611,7 @@ _newT(void)      CurrentTab->nextTab = tag;      CurrentTab = tag;      nTab++; +    calcTabPos();  }  void @@ -5654,6 +5650,55 @@ numTab(int n)      return tab;  } +static void +calcTabPos(void) +{ +    TabBuffer *tab; +    int lcol = 0, rcol = 2, col; +    int n1, n2, na, nx, ny, ix, iy; + +    if (nTab <= 0) +	return; +    n1 = (COLS - rcol - lcol) / TabCols; +    if (n1 >= nTab) { +	n2 = 1; +	ny = 1; +    } +    else { +	if (n1 < 0) +	    n1 = 0; +	n2 = COLS / TabCols; +	if (n2 == 0) +	    n2 = 1; +	ny = (nTab - n1 - 1) / n2 + 2; +    } +    na = n1 + n2 * (ny - 1); +    n1 -= (na - nTab) / ny; +    if (n1 < 0) +	n1 = 0; +    na = n1 + n2 * (ny - 1); +    tab = FirstTab; +    for (iy = 0; iy < ny && tab; iy++) { +	if (iy == 0) { +	    nx = n1; +	    col = COLS - rcol - lcol; +	} +	else { +	    nx = n2 - (na - nTab + (iy - 1)) / (ny - 1); +	    col = COLS; +	} +	for (ix = 0; ix < nx && tab; ix++, tab = tab->nextTab) { +	    tab->x1 = col * ix / nx; +	    tab->x2 = col * (ix + 1) / nx - 1; +	    tab->y = iy; +	    if (iy == 0) { +		tab->x1 += lcol; +		tab->x2 += lcol; +	    } +	} +    } +} +  TabBuffer *  deleteTab(TabBuffer * tab)  { @@ -5677,6 +5722,7 @@ deleteTab(TabBuffer * tab)  	    CurrentTab = tab->nextTab;      }      nTab--; +    calcTabPos();      buf = tab->firstBuffer;      while (buf && buf != NO_BUFFER) {  	next = buf->nextBuffer; @@ -5875,6 +5921,7 @@ moveTab(TabBuffer * t, TabBuffer * t2, int right)  	    FirstTab = t;  	t2->prevTab = t;      } +    calcTabPos();      displayBuffer(Currentbuf, B_FORCE_REDRAW);  } | 
