ltofront.c

来自「这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易」· C语言 代码 · 共 81 行

C
81
字号
#include <u.h>#include <libc.h>#include <draw.h>#include <memdraw.h>#include <memlayer.h>/* * Pull i towards top of screen, just behind front*/staticvoid_memltofront(Memimage *i, Memimage *front, int fill){	Memlayer *l;	Memscreen *s;	Memimage *f, *ff, *rr;	Rectangle x;	int overlap;	l = i->layer;	s = l->screen;	while(l->front != front){		f = l->front;		x = l->screenr;		overlap = rectclip(&x, f->layer->screenr);		if(overlap){			memlhide(f, x);			f->layer->clear = 0;		}		/* swap l and f in screen's list */		ff = f->layer->front;		rr = l->rear;		if(ff == nil)			s->frontmost = i;		else			ff->layer->rear = i;		if(rr == nil)			s->rearmost = f;		else			rr->layer->front = f;		l->front = ff;		l->rear = f;		f->layer->front = i;		f->layer->rear = rr;		if(overlap && fill)			memlexpose(i, x);	}}void_memltofrontfill(Memimage *i, int fill){	_memltofront(i, nil, fill);	_memlsetclear(i->layer->screen);}voidmemltofront(Memimage *i){	_memltofront(i, nil, 1);	_memlsetclear(i->layer->screen);}voidmemltofrontn(Memimage **ip, int n){	Memimage *i, *front;	Memscreen *s;	if(n == 0)		return;	front = nil;	while(--n >= 0){		i = *ip++;		_memltofront(i, front, 1);		front = i;	}	s = front->layer->screen;	_memlsetclear(s);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?