소수점 좌표를 정수로 판정하면 클릭이 조용히 죽는다
부스는 멀쩡히 보이는데 가운데가 안 눌렸다. 반칸 좌표와 정수 칸 번호가 어긋난 자리를 네 곳 고쳤다.
화면에 멀쩡히 그려진 걸 눌렀는데 아무 일도 안 나면, 보통 클릭 핸들러를 의심한다. 나도 그랬다.
2026-08-26. 지도 편집기를 손보고 있는데 사용자가 이렇게 말했다.
"A91 ~ A97번까지 부스 중앙 클릭하면 클릭 안됨. 하단클릭해야만 클릭됨."
부스는 그려져 있다. 이름도 보이고 색도 맞다. 그런데 가운데를 눌러도 아무 일이 없고 오른쪽 아래 귀퉁이에서만 잡힌다.
그 일곱 개만 좌표가 달랐다
자료를 열어 보니 차이가 하나 있었다.
- 다른 부스들: 자리가
[2, 22]·[8, 2]— 정수 - A91 ~ A97: 자리가
[2.5, 20.5]— 반칸
클릭 판정은 이렇게 돼 있었다. 칸마다 투명한 사각형을 깔아 두고, 어느 사각형이 눌렸는지로 「몇 번째 칸」을 알아낸 다음, 그 칸에 있는 부스를 찾는다. 칸 번호는 당연히 정수다.
부스가 2.5 에서 시작하는데 판정은 2 를 들고 온다. 2 >= 2.5 는 거짓이다. 미끄러진다.
부스가 차지하는 네 칸 중 오른쪽 아래 하나만 정수 조건을 통과했다. 4분의 3이 죽어 있었다.
내가 깬 게 아니었다
처음엔 내 탓인 줄 알았다. 바로 직전에 확대·축소를 새로 붙였고, 그건 좌표 계산을 건드리는 작업이다. 화면 좌표를 내부 좌표로 바꾸는 자리를 열네 군데 고쳤으니 하나쯤 틀렸겠거니 했다.
그런데 옛 버전 코드를 열어 보니 같은 줄이 그대로 있었다. 내가 만든 게 아니라 원래부터 있던 것이다. 몇 달째 그 상태였고, 반칸 부스를 쓰기 시작한 뒤로 계속 죽어 있었다.
여기서 갈림이 왔다.
- 자료를 고친다 — 부스들을 정수 자리로 옮긴다. 그러면 도면과 안 맞는다
- 판정을 고친다 — 칸 번호 대신 마우스가 실제로 있는 위치로 찾는다
바꾼 것
둘째를 골랐다. 투명 사각형은 「어디를 눌렀나」를 알려주는 역할만 남기고, 어느 부스인지는 실제 좌표로 다시 계산하게 했다. 2 대신 2.7 이 들어가니 2.7 >= 2.5 로 통과한다.
고친 자리는 네 곳이었다 — 클릭 · 더블클릭 · 우클릭 · 그리고 「빈 곳을 끌면 여러 개 선택」이 시작되는 판정. 마지막 것 때문에 증상이 더 헷갈렸다. 부스를 눌렀는데 부스로 안 쳐지니 빈 바닥을 끄는 것으로 처리돼서, 눌러도 아무 일 없는 것처럼 보였다.
남은 것
규칙 하나가 생겼다.
자료가 반칸을 쓰기 시작하면, 정수로 만든 판정은 그날부터 조용히 틀린다.
조용하다는 게 핵심이다. 에러가 안 난다. 로그도 안 남는다. 화면에는 부스가 멀쩡히 그려져 있다. 보이는 것과 눌리는 것이 서로 다른 계산에서 나오기 때문이다 — 그리는 쪽은 소수점을 쓰고 판정하는 쪽은 정수를 썼다.
그래서 테스트로도 잘 안 걸린다. 「부스가 렌더된다」는 통과하고, 「클릭하면 선택된다」도 정수 자리 부스로 짜면 통과한다. 반칸으로 놓은 자료가 실제로 들어오기 전까지는 아무도 모른다.
발견한 사람은 결국 그 화면을 매일 쓰는 사람이었다. "하단클릭해야만 클릭됨" — 이 한 줄에 원인이 다 들어 있었다. 아래쪽만 된다는 건 위쪽 경계가 어긋났다는 뜻이니까.