Ticket #1 (closed defect: fixed)

Opened 2 years ago

Last modified 2 years 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 Download (16.7 KB) - added by daybreaker 2 years ago.
IME 버그 스크린샷

Change History

Changed 2 years 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 2 years ago by daybreaker

IME 버그 스크린샷

Changed 2 years 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 2 years ago by daybreaker

  • description modified (diff)

Changed 2 years ago by daybreaker

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

Changed 2 years ago by daybreaker

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

Changed 2 years 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 2 years ago by daybreaker

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