DAY 03작업 3일째
위젯 창 크기를 아예 바꾸지 않기로 했다
패널을 열고 닫을 때와 모니터를 넘을 때 위젯이 튀던 원인이 같아서, 창 크기를 고정하고 바꿔야 할 때는 안 보이는 사이에 바꾸게 했다.
사라지는 것들이 엉뚱한 곳으로 튀었다
배치를 정리한 뒤에도 튀는 장면이 남아 있었다.
- 코어에 마우스를 올려 사용량 카드가 뜬 상태에서 코어를 누르면, 목록이 열리면서 사용량 카드가 이상한 곳으로 순간이동했다가 사라졌다.
- 목록을 다시 눌러 닫으면 이번엔 목록이 이상한 곳으로 튀었다가 사라졌다.
- 듀얼 모니터에서 코어를 끌어 다른 모니터로 넘기면 아주 잠깐 이상한 위치로 튀었다가 돌아왔다.
원인은 하나였다
세 장면 모두 그 순간에 위젯 창의 크기가 바뀌고 있었다. 위젯은 코어 둘레에 카드와 패널이 들어갈 자리를 잡아 창 크기를 정하는데, 패널을 열고 닫거나 카드가 나올 방향이 뒤집히면 필요한 자리가 달라진다.
창을 옮기는 건 즉시 일어나고, 창 안의 내용은 다음 프레임에 다시 그려진다. 그래서 창이 새 자리로 간 그 한 프레임 동안 예전 내용이 새 위치에 그려진다. 사라지던 카드나 목록이 엉뚱한 곳에 보인 게 그 한 프레임이었다. 채팅 카드를 열고 닫을 때 튀던 문제를 잡을 때도 같은 원인이었는데, 그때는 채팅 자리만 비워 뒀었다.
크기를 바꿀 일을 없앴다
이번에는 창이 담아야 할 모든 자리를 항상 잡아 두기로 했다.
| 미리 잡아 두는 자리 | 크기 |
|---|---|
| 패널을 닫았을 때 코어 옆 카드 | 가장 넓고 긴 카드 |
| 패널 | 지금까지 열렸던 가장 큰 높이 |
| 채팅 카드와 그 바깥 카드 | 열려 있지 않아도 항상 |
패널은 닫혀 있으면 높이를 잴 수 없어서, 열릴 때 잰 높이를 기억해 두고 쓴다. 세션이 늘어 패널이 그보다 커지면 그때 한 번만 창이 커진다. 이렇게 하니 닫힘, 사용량 카드, 패널과 채팅, 패널만, 다시 닫힘으로 바꿔 가며 재도 창 좌표와 크기가 다섯 번 모두 같았다.
목록을 열 때 떠 있던 사용량 카드는 서서히 사라지는 대신 그 자리에서 바로 닫게 했다. 목록이 열리면 카드들의 자리도 바뀌는데, 사라지는 중인 카드가 그 새 자리로 미끄러져 가며 사라지는 게 이상해 보였다.
끄는 중에는 방향을 바꾸지 않는다
모니터를 넘을 때는 크기를 고정할 수 없었다. 카드가 나오는 방향은 코어가 있는 모니터의 가운데를 기준으로 정하는데, 왼쪽 모니터의 오른쪽 끝에서는 카드가 왼쪽으로, 오른쪽 모니터의 왼쪽 끝에서는 오른쪽으로 나와야 한다. 경계를 넘는 순간 방향이 뒤집히고 창 크기가 바뀐다.
그래서 끄는 동안에는 방향을 그대로 두고, 손을 놓았을 때 한 번만 다시 정하게 했다. 방향이 실제로 바뀔 때는 위젯을 잠깐 감추고 다시 배치한 뒤 보여 준다.
손을 놓음 → 0.06초 동안 흐려짐 → 방향 다시 정하고 재배치 → 0.12초 동안 다시 나타남
왼쪽 모니터 끝에서 오른쪽 모니터로 끌어 놓는 동작을 재현해 창 좌표를 따라가 보니, 끄는 동안은 크기를 유지한 채 위치만 따라왔고 놓은 뒤 감춰진 사이에 한 번만 재배치됐다.
감수한 것
위젯 창은 눈에 보이는 것보다 훨씬 크게 잡혀 있다. 끄는 동안 방향을 유지하니, 화면 가장자리에서는 놓기 전까지 카드가 화면 밖으로 잠깐 나갈 수 있다. 방향이 바뀔 때는 위젯이 한 번 깜빡인다. 튀는 것보다는 깜빡이는 쪽이 덜 거슬린다고 봤다.