コード例 #1
0
ファイル: windw.c プロジェクト: 8l/inferno
void
tkgeomchg(Tk *tk, TkGeom *g, int bd)
{
	int w, h;
	void (*geomfn)(Tk*);
	if(memcmp(&tk->req, g, sizeof(TkGeom)) == 0 && bd == tk->borderwidth)
		return;

	geomfn = tkmethod[tk->type]->geom;
	if(geomfn != nil)
		geomfn(tk);

	if(tk->master != nil) {
		tkpackqit(tk->master);
		tkrunpack(tk->env->top);
	}
	else
	if(tk->geom != nil) {
		w = tk->req.width;
		h = tk->req.height;
		tk->req.width = 0;
		tk->req.height = 0;
		tk->geom(tk, tk->act.x, tk->act.y, w, h);
		if (tk->slave) {
			tkpackqit(tk);
			tkrunpack(tk->env->top);
		}
	}
	tkdeliver(tk, TkConfigure, g);
}
コード例 #2
0
ファイル: packr.c プロジェクト: BGCX261/znos-git
void
tksetslavereq(Tk *slave, TkGeom frame)
{
	Point border;
	TkGeom pos, old;
	int slave2BW;
	void (*geomfn)(Tk*);

	border.x = slave->pad.x;
	border.y = slave->pad.y;

	slave2BW = slave->borderwidth * 2;

	pos.width = slave->req.width + slave2BW + slave->ipad.x;
	if((slave->flag&Tkfillx) || (pos.width > (frame.width - border.x)))
		pos.width = frame.width - border.x;

	pos.height = slave->req.height + slave2BW + slave->ipad.y;
	if((slave->flag&Tkfilly) || (pos.height > (frame.height - border.y)))
    		pos.height = frame.height - border.y;

	border.x /= 2;
	border.y /= 2;

	if(slave->flag & Tknorth)
		pos.y = frame.y + border.y;
	else
	if(slave->flag & Tksouth)
		pos.y = frame.y + frame.height - pos.height - border.y;
	else
		pos.y = frame.y + (frame.height - pos.height)/2;

	if(slave->flag & Tkwest)
		pos.x = frame.x + border.x;
	else
	if(slave->flag & Tkeast)
		pos.x = frame.x + frame.width - pos.width - border.x;
	else
		pos.x = frame.x + (frame.width - pos.width)/2;

	pos.width -= slave2BW;
	pos.height -= slave2BW;

	if(memcmp(&slave->act, &pos, sizeof(TkGeom)) != 0) {
		old = slave->act;
		slave->act = pos;
		geomfn = tkmethod[slave->type]->geom;
		if(geomfn != nil)
			geomfn(slave);
		if(slave->slave)
			tkpackqit(slave);
		tkdeliver(slave, TkConfigure, &old);

		slave->dirty = tkrect(slave, 1);
		slave->flag |= Tkrefresh;
	}
}