Skip to content

Commit

Permalink
移动窗口
Browse files Browse the repository at this point in the history
  • Loading branch information
yourtion committed May 11, 2016
1 parent 991da3f commit d77f778
Showing 1 changed file with 30 additions and 12 deletions.
42 changes: 30 additions & 12 deletions 24_day/bootpack.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ void HariMain(void)
};
int key_to = 0, key_shift = 0, key_leds = (binfo->leds >> 4) & 7, keycmd_wait = -1;
struct CONSOLE *cons;
int j, x, y;
struct SHEET *sht;
int j, x, y, mmx = -1, mmy = -1;
struct SHEET *sht = 0;

init_gdtidt();
init_pic();
Expand Down Expand Up @@ -267,21 +267,39 @@ void HariMain(void)
if (my > binfo->scrny - 1) {
my = binfo->scrny - 1;
}

sheet_slide(sht_mouse, mx, my);/* 包含sheet_refresh含sheet_refresh */

if ((mdec.btn & 0x01) != 0) { /* 按下左键、移动sht_win */
for (j = shtctl->top - 1; j > 0; j--) {
sht = shtctl->sheets[j];
x = mx - sht->vx0;
y = my - sht->vy0;
if (0 <= x && x < sht->bxsize && 0 <= y && y < sht->bysize) {
if (sht->buf[y * sht->bxsize + x] != sht->col_inv) {
sheet_updown(sht, shtctl->top - 1);
break;
if ((mdec.btn & 0x01) != 0) { /* 按下左键 */
if (mmx < 0) {
/*如果处于通常模式*/
/*按照从上到下的顺序寻找鼠标所指向的图层*/
for (j = shtctl->top - 1; j > 0; j--) {
sht = shtctl->sheets[j];
x = mx - sht->vx0;
y = my - sht->vy0;
if (0 <= x && x < sht->bxsize && 0 <= y && y < sht->bysize) {
if (sht->buf[y * sht->bxsize + x] != sht->col_inv) {
sheet_updown(sht, shtctl->top - 1);
if (3 <= x && x < sht->bxsize - 3 && 3 <= y && y < 21) {
mmx = mx; /*进入窗口移动模式*/
mmy = my;
}
break;
}
}
}
} else {
/*如果处于窗口移动模式*/
x = mx - mmx; /*计算鼠标的移动距离*/
y = my - mmy;
sheet_slide(sht, sht->vx0 + x, sht->vy0 + y);
mmx = mx; /*更新为移动后的坐标*/
mmy = my;
}
} else {
/*没有按下左键*/
mmx = -1; /*返回通常模式*/
}

}
Expand Down

0 comments on commit d77f778

Please sign in to comment.