diff options
| author | Anselm R. Garbe <garbeam@gmail.com> | 2007-08-04 10:51:39 +0200 | 
|---|---|---|
| committer | Anselm R. Garbe <garbeam@gmail.com> | 2007-08-04 10:51:39 +0200 | 
| commit | 4135e34dfa61d32625ef20e8e38064b465402f4a (patch) | |
| tree | beb8cfbcb846eb3a6a3172567ca70a67866d934f | |
| parent | 846128a498759bfcbf363fc014e50c1bf48bdf0c (diff) | |
I introduced {H,V}RATIO and inc{h,v,}ratio() functions - the default behaves like in dwm-4.3, config.arg.h shows how I prefer the ratio being handled (for the future I plan to change const char *arg into ..., and renaming Client into Win.)
| -rw-r--r-- | config.arg.h | 9 | ||||
| -rw-r--r-- | config.default.h | 7 | ||||
| -rw-r--r-- | dwm.h | 4 | ||||
| -rw-r--r-- | layout.c | 53 | 
4 files changed, 44 insertions, 29 deletions
| diff --git a/config.arg.h b/config.arg.h index 2720ce3..2a1a784 100644 --- a/config.arg.h +++ b/config.arg.h @@ -31,7 +31,8 @@ static Layout layout[] = { \  	{ "><>",		floating }, \  };  #define NMASTER			1	/* clients in master area */ -#define RATIO			.8	/* ratio of tile */ +#define HRATIO			.8	/* horizontal ratio of tile */ +#define VRATIO			.8	/* vertical ratio of tile */  #define SNAP			32	/* snap pixel */  /* key definitions */ @@ -46,8 +47,10 @@ static Key key[] = { \  		"exec urxvtcd -tr -bg '#222' -fg '#eee' -cr '#eee' +sb -fn '"FONT"'" }, \  	{ MODKEY,			XK_space,	setlayout,	NULL }, \  	{ MODKEY,			XK_b,		togglebar,	NULL }, \ -	{ MODKEY,			XK_h,		incratio,	".1" }, \ -	{ MODKEY,			XK_l,		incratio,	"-.1" }, \ +	{ MODKEY,			XK_h,		incvratio,	".1" }, \ +	{ MODKEY,			XK_h,		inchratio,	".1" }, \ +	{ MODKEY,			XK_l,		incvratio,	"-.1" }, \ +	{ MODKEY,			XK_l,		inchratio,	"-.1" }, \  	{ MODKEY|ShiftMask,		XK_j,		incnmaster,	"1" }, \  	{ MODKEY|ShiftMask,		XK_k,		incnmaster,	"-1" }, \  	{ MODKEY,			XK_j,		focusclient,	"1" }, \ diff --git a/config.default.h b/config.default.h index 5a8d594..9ea02a9 100644 --- a/config.default.h +++ b/config.default.h @@ -32,7 +32,8 @@ static Layout layout[] = { \  	{ "><>",		floating }, \  };  #define NMASTER			1	/* clients in master area */ -#define RATIO			.8	/* ratio of tile */ +#define HRATIO			.8	/* horizontal ratio of tile */ +#define VRATIO			1	/* vertical ratio of tile */  #define SNAP			32	/* snap pixel */  /* key definitions */ @@ -44,8 +45,8 @@ static Key key[] = { \  	{ MODKEY,			XK_p,		spawn, 		"exe=`dmenu_path | dmenu` && exec $exe" }, \  	{ MODKEY,			XK_space,	setlayout,	NULL }, \  	{ MODKEY,			XK_b,		togglebar,	NULL }, \ -	{ MODKEY,			XK_h,		incratio,	".1" }, \ -	{ MODKEY,			XK_l,		incratio,	"-.1" }, \ +	{ MODKEY,			XK_h,		incvratio,	".1" }, \ +	{ MODKEY,			XK_l,		incvratio,	"-.1" }, \  	{ MODKEY|ShiftMask,		XK_j,		incnmaster,	"1" }, \  	{ MODKEY|ShiftMask,		XK_k,		incnmaster,	"-1" }, \  	{ MODKEY,			XK_j,		focusclient,	"1" }, \ @@ -44,7 +44,6 @@ enum { WMProtocols, WMDelete, WMState, WMLast };	/* default atoms */  typedef struct Client Client;  struct Client {  	char name[256]; -	float scale;  	int x, y, w, h;  	int rx, ry, rw, rh; /* revert geometry */  	int basew, baseh, incw, inch, maxw, maxh, minw, minh; @@ -123,7 +122,8 @@ void grabkeys(void);			/* grab all keys defined in config.h */  /* layout.c */  void floating(void);			/* arranges all windows floating */  void focusclient(const char *arg);	/* focuses next(1)/previous(-1) visible client */ -void incratio(const char *arg);		/* increments the tile ratio with arg's value */ +void inchratio(const char *arg);	/* increments the horizontal tile ratio with arg's value */ +void incvratio(const char *arg);	/* increments the vertical tile ratio with arg's value */  void incnmaster(const char *arg);	/* increments nmaster with arg's index value */  void initlayouts(void);			/* initialize layout array */  Client *nexttiled(Client *c);		/* returns tiled successor of c */ @@ -8,10 +8,29 @@ Layout *lt = NULL;  /* static */ -static double ratio = RATIO; +static double hratio = HRATIO; +static double vratio = VRATIO;  static unsigned int nlayouts = 0;  static unsigned int nmaster = NMASTER; +static void +incratio(const char *arg, double *ratio, double def) { +	double delta; + +	if(lt->arrange != tile) +		return; +	if(!arg) +		*ratio = def; +	else { +		if(1 == sscanf(arg, "%lf", &delta)) { +			if(delta + (*ratio) < .1 || delta + (*ratio) > 1.9) +				return; +			*ratio += delta; +		} +	} +	lt->arrange(); +} +  static double /* simple pow() */  spow(double x, double y)  { @@ -31,21 +50,21 @@ tile(void) {  	for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next))  		n++; -	mw = (n <= nmaster) ? waw :  waw / (1 + ratio); +	mw = (n <= nmaster) ? waw :  waw / (1 + hratio);  	tw = waw - mw;  	if(n > 0) {  		if(n < nmaster) {  			for(i = 0; i < n; i++) -				sum += spow(ratio, i); +				sum += spow(vratio, i);  			mscale = wah / sum;  		}  		else {  			for(i = 0; i < nmaster; i++) -				sum += spow(ratio, i); +				sum += spow(vratio, i);  			mscale = wah / sum;  			for(sum = 0, i = 0; i < (n - nmaster); i++) -				sum += spow(ratio, i); +				sum += spow(vratio, i);  			tscale = wah / sum;  		}  	} @@ -62,7 +81,7 @@ tile(void) {  				if(i + 1 == n || i + 1 == nmaster)  					nh = (way + wah) - ny - (2 * c->border);  				else -					nh = (mscale * spow(ratio, i)) - (2 * c->border); +					nh = (mscale * spow(vratio, i)) - (2 * c->border);  			}  			else { /* tile window */  				if(i == nmaster) { @@ -73,7 +92,7 @@ tile(void) {  				if(i + 1 == n)  					nh = (way + wah) - ny - (2 * c->border);  				else -					nh = (tscale * spow(ratio, i - nmaster)) - (2 * c->border); +					nh = (tscale * spow(vratio, i - nmaster)) - (2 * c->border);  			}  			if(nh < bh) {  				nh = bh; @@ -133,21 +152,13 @@ focusclient(const char *arg) {  }  void -incratio(const char *arg) { -	double delta; +inchratio(const char *arg) { +	incratio(arg, &hratio, HRATIO); +} -	if(lt->arrange != tile) -		return; -	if(!arg) -		ratio = RATIO; -	else { -		if(1 == sscanf(arg, "%lf", &delta)) { -			if(delta + ratio < .1 || delta + ratio > 1.9) -				return; -			ratio += delta; -		} -	} -	lt->arrange(); +void +incvratio(const char *arg) { +	incratio(arg, &vratio, VRATIO);  }  void | 
