Ticket #1 (closed defect: fixed)

Opened 10 months ago

Last modified 10 months ago

Font mismatch and crashed characters in IME rendering box

Reported by: daybreaker Owned by: daybreaker
Priority: major Milestone: 0.1-beta
Component: Windows-specific Version: 1.0
Keywords: Cc:

Description (last modified by daybreaker) (diff)

한글 입력 등을 할 때 만들어지는 IME 상자에서 초성과 중성까지는 괜찮으나 종성을 치는 순간 글자가 깨져나오는 문제가 있고, 그 IME 상자 내부의 글꼴이 터미널 한글 글꼴을 따라가도록 해야 한다.

IME 버그 스크린샷

Attachments

putty-ime-bug.png (16.7 kB) - added by daybreaker 10 months ago.
IME 버그 스크린샷

Change History

Changed 10 months ago by daybreaker

  • summary changed from Font and crashed characters in IME rendering box to Font mismatch and crashed characters in IME rendering box

Changed 10 months ago by daybreaker

IME 버그 스크린샷

Changed 10 months ago by daybreaker

좀더 자세한 디버깅 결과, IME 컴포지션 박스 안의 글자를 그리는 루틴은 유니코드 글꼴 렌더링하는 곳이 아니라, 바로 그 위 if 블록의 DIRECT_FONT 조건에서 렌더링되는 부분이다. 또한 IME 관련 API를 통해 onthespot 버퍼에 채우는 것도 유니코드가 아닌 시스템 인코딩으로 되어 있으며, DIRECT_FONT로 렌더링하는 코드 또한 시스템 인코딩을 따르도록 되어 있다. PuTTY 소스코드에서는 DBCS라고 표현하는 것 같다.

여기서 시스템 인코딩이란 한글윈도우에서는 CP949를 가리킨다. DIRECT_FONT 렌더링 코드는 한글윈도우 환경에서 한글이나 한자가 아닌 대다수의 영문·숫자·기호를 출력하는 데 사용된다.

테스트 과정에서 한 가지 특이한 현상을 발견하였는데, 종성을 눌렀을 때 깨지는 경우는 되려 CP949 인코딩 안에 있는 문자인 경우였고 '뎭'과 같이 유니코드에만 존재하는 문자를 치려고 할 경우엔 깨지는 현상이 나타나지 않았다.
깨지는 원인은, terminal.c 쪽에서 합성되는 코드들을 별도의 파일로 찍어 검사해본 결과 정상적으로 합성 중인 한글 글자임을 알 수 있었기 때문에, directbuf에 text를 한 자 한 자 8byte씩만 잘라 쪼개넣은 상태에서 TextOutEx? API를 사용할 때 생기는 문제가 아닌가 싶으나 정확한 원인은 아직 모르겠다.

Changed 10 months ago by daybreaker

  • description modified (diff)

Changed 10 months ago by daybreaker

  • version set to 1.0
  • milestone set to 0.1-beta

Changed 10 months ago by daybreaker

  • owner changed from somebody to daybreaker
  • status changed from new to accepted

Changed 10 months ago by daybreaker

  • status changed from accepted to closed
  • resolution set to fixed

onthespot_buf를 wchar_t로 바꾸고 ImmGetCompositionString의 유니코드 버전 API를 사용함으로써 해결함. Side-effect로 UTF-8 모드에서 CP949 문자들이 튀어나온 경우 깨지는 형태가 조금 달라짐.

다만, 다음과 같은 경우는 조합 중인 한글이 문제 없이 표시되나(밑줄은 커서 위치)

  • _abc
  • abc

아래의 경우는 조합 중인 글자의 왼쪽 반과 뒷쪽의 첫 한글 글자가 겹쳐 나오는 문제가 있다. 다만 입력된 결과는 정상이다.

  • _a한글

Changed 10 months ago by daybreaker

  • component changed from User Interfaces to Windows-specific
Note: See TracTickets for help on using tickets.