DAY 02작업 2일째

덜컹거리던 위젯 배치를 붙잡았다

카드가 나올 때마다 창 크기가 바뀌며 코어가 튀던 문제를, 고정된 캔버스와 서로 비켜 서는 배치 규칙으로 정리했다.

마우스를 올리면 위젯이 흔들렸다

메인 모니터에서 코어에 마우스를 올리거나 끌었다 놓으면 위젯이 위아래로 깨지듯 흔들렸다. 그 뒤로도 카드가 서로 밀어내거나 패널을 가리고, 채팅 카드를 열고 닫을 때마다 순간 튀는 일이 이어졌다. 원인을 따라가 보니 대부분 같은 뿌리였다. 창 크기가 바뀌는 순간과 내용이 다시 그려지는 순간이 어긋났다.

창 크기를 고정하고 코어를 못 박았다

처음에는 창이 내용 크기에 맞춰 늘었다 줄었다(SizeToContent) 했다. 호버 카드가 나오면 창이 커지면서 코어가 마우스 아래에서 비켜났고, 마우스가 코어를 벗어나니 카드가 들어가고, 창이 줄면서 코어가 다시 마우스 아래로 와서 카드가 또 나왔다. 이게 흔들림의 정체였다.

창을 카드가 들어갈 자리까지 넉넉하게 고정 크기로 잡고, 그 안에서 코어는 항상 같은 점에 두었다. 카드가 오가도 창은 그대로다. 창 크기가 꼭 바뀌어야 할 때(패널을 열 때)는 위치와 크기를 SetWindowPos 한 번으로 같이 바꿔서, 화면에서 코어 자리가 움직이지 않게 했다.

서로 비켜 서는 규칙

채팅 카드, 세션 패널, 코어가 나란히 선 화면
패널을 열면 채팅과 패널이 코어 쪽 가장자리에 맞춰 한 줄로 선다

카드 하나하나의 자리는 다른 카드 때문에 움직이지 않게 규칙을 정했다.

상황자리
패널을 닫았을 때카드는 코어 옆에서, 패널이 열릴 쪽의 반대 방향으로 자란다
패널을 열었을 때패널, 채팅, 카드가 코어 쪽 가장자리에 맞춰 바깥쪽으로 한 줄로 선다
질문이 떠 있을 때질문 카드가 코어에 가장 가깝고, 알림은 그 바깥에 붙는다. 호버 카드는 나오지 않는다

패널이 열릴 방향은 패널을 닫아 둔 동안에도 계속 계산해 둔다. 그래야 카드가 미리 패널 반대쪽에 서 있어서, 패널을 열어도 카드가 자리를 옮기지 않는다. 화면 끝에 막혀 어쩔 수 없이 옮겨야 할 때는 순간이동하지 않고 0.2초 동안 미끄러지게 했다.

감수한 것

움직이지 않는 대신 창이 눈에 보이는 것보다 크게 잡혀 있다. 패널 자체를 열고 닫을 때는 여전히 창 크기가 바뀐다. 모니터 구성이 바뀌어 저장된 위치가 어느 화면에도 없으면 코어가 보이지 않았던 일도 있어서, 켤 때 그런 위치면 주 모니터 오른쪽 아래에서 시작하게 했다.

기록 #05 · 2026.10.04