이번에 오픈소스SW입문의 기말과제 주제로 Audacity 프로그램의 Windows버전의 폰트를 변경해 가독성을 개선하는 보완 과제를 교수님께 추천받았고, 이 기회를 활용해 'Audacity 한글 가독성 개선'이라는 주제로 프로젝트를 진행하게되었다. 프로젝트의 초기 개선 목표는 두 가지로 설정했다.
이번에 오픈소스SW입문의 기말과제 주제로 Audacity 프로그램의 Windows버전의 폰트를 변경해 가독성을 개선하는 보완 과제를 교수님께 추천받았고, 이 기회를 활용해 'Audacity 한글 가독성 개선'이라는 주제로 프로젝트를 진행하게되었다. 프로젝트의 초기 개선 목표는 두 가지로 설정했다.
첫째로 폰트 개선이다. Audacity를 사용하면서 Audacity Mac버전과 다르게 Windows버전에서는 폰트 가독성이 더 좋지 못하다고 느꼈고, 프로그램에서 사용되는 폰트를 윈도우에서 기본적 사용되고 가독성이 높은 '맑은 고딕'으로 적용하는 것을 목표로 설정했다.
첫째로 폰트 개선이다. Audacity를 사용하면서 Audacity Mac버전과 다르게 Windows버전에서는 폰트 가독성이 더 좋지 못하다고 느꼈고, 프로그램에서 사용되는 폰트를 윈도우에서 기본적으로 사용되고 가독성이 높은 '맑은 고딕'으로 적용하는 것을 목표로 설정했다.
둘째는 해상도 개선이다. Audacity를 사용할 때 글자가 흐리게 보이는 문제가 있었는데, 이는 디스플레이 설정이나 프로그램 자체의 해상도 설정에 기인한 문제일 수 있다. 이를 해결하기 위해 프로그램의 해상도를 조정하여 글자가 보다 선명하게 보이도록 하고, 사용자 경험을 개선하고자 한다.
둘째는 해상도 개선이다. Audacity를 사용할 때 글자가 흐리게 보이는 문제가 있었는데, 이는 디스플레이 설정이나 프로그램 자체의 해상도 설정에 기인한 문제일 수 있다. 이를 해결하기 위해 프로그램의 해상도를 조정하여 글자가 보다 선명하게 보이도록 하고, 사용자 경험을 개선하고자 한다.
두 가지 방법을 통해 Audacity Windows버전의 한글 가독성을 개선시킨다면 작업의 효율성을 높일뿐만 아니라 장시간 작업 시에도 눈의 피로를 줄일 수 있을 것으로 기대된다.
두 가지 방법을 통해 Audacity Windows버전의 한글 가독성을 개선시킨다면 작업의 효율성을 높일뿐만 아니라 장시간 작업 시에도 눈의 피로를 줄일 수 있을 것으로 기대된다.
...
@@ -35,19 +35,20 @@ Audacity 원본코드에 직접적으로 적용하기 전에 wxPython을 활용
...
@@ -35,19 +35,20 @@ Audacity 원본코드에 직접적으로 적용하기 전에 wxPython을 활용
우선, 간단한 창(wxWindow)에 텍스트(wxStaticText)를 추가하고 이 텍스트의 폰트(wxFont)를 변경하는 것으로 시작했다. 이 단순한 예제를 활용해 wxFont와 SetFont()를 통한 폰트 설정이 제대로 동작하는지 확인했다.
우선, 간단한 창(wxWindow)에 텍스트(wxStaticText)를 추가하고 이 텍스트의 폰트(wxFont)를 변경하는 것으로 시작했다. 이 단순한 예제를 활용해 wxFont와 SetFont()를 통한 폰트 설정이 제대로 동작하는지 확인했다.
main_panel에 폰트변경을 설정하여 static text가 변하는 것을 확인할 수 있었다.
main_panel에 폰트를 변경하는 코드를 추가하여 wxStaticText가 변하는 것을 확인할 수 있었다.
그 다음으로는 패널(wxPanel)과 그 안에 추가적인 패널이 포함된 복잡한 구조에서도 동일한 폰트 변경이 가능한지, MenuBar의 폰트도 변경이 가능한 지 실험을 진행했다. 이 과정을 통해 폰트 변경 코드를 어느 위치에 넣어야 전체 프로그램에 일괄적으로 적용되는지를 확인하고자 했다.
그 다음으로는 패널(wxPanel)과 그 안에 추가적인 패널이 포함된 복잡한 구조에서도 동일한 폰트 변경이 가능한지, MenuBar의 폰트도 변경이 가능한 지 실험을 진행했다. 이 과정을 통해 폰트 변경 코드를 어느 위치에 넣어야 전체 프로그램에 일괄적으로 적용되는지를 확인하고자 했다.
main_panel에 폰트변경을 설정하여 panel 내부의 text와 button이 바뀌는 것을 확인할 수 있었다.
wxButton마다 각각 SetFont()를 추가 하지 않고도 main_panel에만 폰트를 변경하는 코드를 추가하여 wxPanel 내부의 wxStaticText와 wxButton이 바뀌는 것을 확인할 수 있었다.
하지만 MenuBar의 경우에는 폰트를 바꿀 수 있는 방법이 확인되지 않았다. wxMenuBar는 wxWindow에 붙어 상단의 메뉴바를 표시해주는데, wxMenuBar의 함수에는 폰트를 설정할 수 있는 SetFont가 없었고 상위의 wxWindow의 폰트를 변경해도 MenuBar의 폰트가 변경되지는 않았다. wxMenuBar 하위의 wxMenu는 내부에 wxMenuItem을 통한 항목추가로 SetFont가 가능하다는 것을 확인했다.
하지만 MenuBar의 경우에는 폰트를 바꿀 수 있는 방법이 확인되지 않았다. wxMenuBar는 wxWindow에 붙어 상단의 메뉴바를 표시해주는데, wxMenuBar의 함수에는 폰트를 설정할 수 있는 SetFont가 없었고 상위의 wxWindow의 폰트를 변경해도 MenuBar의 폰트가 변경되지는 않았다. wxMenuBar 하위의 wxMenu는 내부에 wxMenuItem을 통한 항목추가로 SetFont가 가능하다는 것을 확인했다.
아래의 코드와 사진은 main_panel에서 폰트변경을 시도하고 메뉴바의 아이템들을 확인한 것이다. 그 결과 main_panel에서의 폰트 변경이 적용되지 않는 것을 확인할 수 있었다.
아래의 코드와 사진은 main_panel에서 폰트변경을 시도하고 메뉴바의 아이템들을 확인한 것이다. 그 결과 main_panel에서의 폰트 변경이 적용되지 않는 것을 확인할 수 있었다.
```self.main_panel = wx.Panel(self)
```python
new_font = wx.Font(14, wx.DEFAULT, wx.ITALIC, wx.BOLD) # main_panel에 폰트 적용
결론적으로 여러 구조에서 폰트 변경을 시도한 결과, 폰트 설정 코드를 상위 구조에 위치시키면 하위 구조들도 해당 폰트로 변경된다는 사실을 알 수 있었다. 즉, 프로그램 전체의 폰트를 수정하기 위해서는 가장 최상위 구조인 최상위 윈도우에 폰트 설정 코드를 넣어야 한다는 것을 파악했다. 또한 메뉴바의 폰트의 경우에는 폰트 설정을 추가해도 변경되지 않는다는 것을 파악했다.
결론적으로 여러 구조에서 폰트 변경을 시도한 결과, 폰트 설정 코드를 상위 구조에 위치시키면 하위 구조들도 해당 폰트로 변경된다는 사실을 알 수 있었다. 즉, 프로그램 전체의 폰트를 수정하기 위해서는 가장 최상위 구조인 최상위 윈도우에 폰트 설정 코드를 넣어야 한다는 것을 파악했다. 또 아래 코드에서 SetFont의 위치를 최상단과 중간, 모든 컴포넌트가 추가되고난 후 마지막 3곳에 위치시켜 테스트 해봤는데, 이 때 하위 요소들까지 폰트가 적용되려면 가장 처음에 최상위 윈도우가 설정될 때(다른 컴포넌트들이 추가되지 않은 상황) 폰트를 설정해줘야만 했다.
또한 메뉴바의 폰트의 경우에는 최상위 윈도우에 폰트 설정을 추가해도 변경되지 않아 하위의 각각의 메뉴아이템들의 폰트를 변경해줘야한다는 것을 알게되었다.
##### 최종적으로 사용한 코드
##### 최종적으로 테스트에 사용한 코드, SetFont의 위치에 따라 button, statusbar 등이 바뀌는 범위를 확인
``` import wx
```python
importwx
importwx.xrc
importwx.xrc
importgettext
importgettext
_=gettext.gettext
_=gettext.gettext
...
@@ -167,30 +172,28 @@ if __name__ == '__main__':
...
@@ -167,30 +172,28 @@ if __name__ == '__main__':
### Audacity 구조 파악
### Audacity 구조 파악
# Audacity의 계층구조? 사진 넣기
이후 Audacity 공식 문서와 디버깅을 통해서 Audacity의 초기화 부분을 분석했고 기본적인 구조를 파악할 수 있었다. 간단히 설명하면, 최상위 윈도우 아래에 메뉴바와 상태바, 일종의 레이아웃인 wxBoxSizer 등이 있고, wxBoxSizer 안에 트랙과 툴바가 있는 형태였다.
이후 Audacity 공식 문서와 디버깅을 통해서 Audacity의 초기화 부분을 분석했고 기본적인 구조를 파악할 수 있었다. 간단히 설명하면, 최상위 윈도우 아래에 메뉴바와 상태바, 일종의 레이아웃인 wxBoxSizer 등이 있고, wxBoxSizer 안에 트랙과 툴바가 있는 형태였다.
위 사진은 Audacity의 초기화 과정이다. AudacityApp::OnInit -> AudacityApp::InitPart2 -> ProjectManeger::New -> AudacityProject::Create 과정을 거쳐 호출되는 Create함수에서 최상위 윈도우가 선언된다. 이후 ProjectManeger에서 생성된 AudacityProjcet의 최상위 윈도우를 가져와 BoxSizer와 statusBar 등을 붙여 초기 레이아웃을 구성한다.
### Audacity 적용과 문제점
### Audacity 적용과 문제점
앞에서 wxFormBuilder, wxPython, 코드 디버깅을 활용하여 학습한 결과를 바탕으로 Audacity에서도 최상위 윈도우에 폰트변경 코드를 추가하여 프로그램 전체의 폰트를 변경하고자 했다. 하지만 초기화 코드에서 가장 먼저 생성되는 최상위 윈도우에서 폰트를 변경해도 프로그램 전체의 폰트가 바뀌지는 않았다. 예상대로라면 메뉴바를 제외한 트랙, 툴바 등 나머지 모두가 바뀌어야했지만 최상위 윈도우에 바로 붙어있는 상태바만이 변경되었다. 클릭과 이벤트 발생으로 추가되는 패널이나 환경설정 같은 새로운 창(wxDialog)를 띄워줄 때는 최상위윈도우만 변경하면 되는 것이 아니고 새롭게 추가(선언)될 때 해당 요소에서 폰트를 변경해야 했었는데 그것이 원인 중 하나로 파악되었다.
앞에서 wxFormBuilder, wxPython, 코드 디버깅, 공식문서 등을 활용하여 학습한 결과를 바탕으로 Audacity에서도 최상위 윈도우에 폰트변경 코드를 추가하여 프로그램 전체의 폰트를 변경하고자 했다. 하지만 초기화 코드에서 가장 먼저 생성되는 최상위 윈도우에서 폰트를 변경해도 프로그램 전체의 폰트가 바뀌지는 않았다. 예상대로라면 메뉴바를 제외한 트랙, 툴바 등 나머지 모두가 바뀌어야했지만 최상위 윈도우에 바로 붙어있는 상태바만이 변경되었다. 클릭과 이벤트 발생으로 추가되는 패널이나 환경설정 같은 새로운 창(wxDialog)를 띄워줄 때는 최상위윈도우만 변경하면 되는 것이 아니고 새롭게 추가(선언)될 때 해당 요소에서 폰트를 변경해야 했었는데 그것이 원인 중 하나로 파악되었다.
또 다른 방법으로 wxWidgets에서 전역으로 폰트를 변경할 수 있는 함수나 설정이 지원되는가 찾아봤지만 wxWidgets 문서나 포럼 어디에도 관련 정보가 없었고 각각 요소마다 폰트를 변경해줘야했다.
또 다른 방법으로 wxWidgets에서 전역으로 폰트를 변경할 수 있는 함수나 설정이 지원되는가 찾아봤지만 wxWidgets 문서나 포럼 어디에도 관련 정보가 없었고 각각 요소마다 폰트를 변경해줘야했다.
대안으로 최상위 윈도우를 가져올 때마다 하위 윈도우들을 반복문을 통해 방문하여 폰트를 변경해주는 방법을 사용했다. 이 방법으로 바뀌지 않는 트랙, 패널, 툴바의 폰트 변경 방법은 후술한다.
대안으로 최상위 윈도우를 가져올 때마다 하위 윈도우들을 반복문을 통해 방문하여 폰트를 변경해주는 방법을 사용했다. 해당 코드와 이 방법으로 바뀌지 않는 트랙, 메뉴의 폰트 변경 방법은 후술한다.
# 과제 진행 중 발생한 추가적인 문제점으로 인한 개선목표 변경
# 과제 진행 중 발생한 추가적인 문제점으로 인한 개선목표 변경
앞서 설명한 프로그램 분석 후 문제점을 파악할 때 처음에는 실제로 폰트를 변경했지만 변화가 보이지 않았는데, 사실 프로그램에서 추가적으로 설정하지 않았을 때는 윈도우에 기본적으로 설정된 폰트(맑은 고딕)를 가져와 사용하기 때문에 변화가 없었던 것이다. 결론적으로 Audacity Windows 버전의 폰트는 이미 '맑은 고딕'이었고 폰트 가독성이 좋지 못하다고 느낀 주요한 이유는 글자들이 배율을 높여 확대되었고 흐리게 표시되어서였다.
앞서 설명한 프로그램 분석 후 문제점을 파악할 때 처음에는 실제로 폰트를 변경했지만 변화가 보이지 않았는데, 사실 프로그램에서 추가적으로 설정하지 않았을 때는 윈도우에 기본적으로 설정된 폰트(맑은 고딕)를 가져와 사용하기 때문에 변화가 없었던 것이다. 결론적으로 Audacity Windows 버전의 폰트는 이미 '맑은 고딕'이었고 폰트 가독성이 좋지 못하다고 느낀 주요한 이유는 글자들이 배율을 높여 확대되었고 흐리게 표시되어서였다.
Audacity의 글자가 흐리게 표시되는 이유는 High-DPI와 관련이 있다.
Audacity의 글자가 흐리게 표시되는 이유는 High-DPI와 관련이 있다.
윈도우는 프로그램이 DPI인식을 하지 못하는 상태(DPI Unaware)라면 고정 DPI값인 96으로 렌더링하고, 만약 96DPI(100%배율)보다 큰 배율의 화면에서 프로그램이 실행된다면 프로그램 비트맵을 실제 크기로 늘려준다. 단순히 크기를 늘리는 경우기 때문에 글자가 흐릿하게 보인다.
윈도우는 프로그램이 DPI인식을 하지 못하는 상태(DPI Unaware)라면 고정 DPI값인 96으로 렌더링하고, 만약 96DPI(100%배율)보다 큰 배율의 화면에서 프로그램이 실행된다면 프로그램 비트맵을 실제 크기로 늘려준다. 단순히 크기를 늘리는 경우이기 때문에 글자가 흐릿하게 보인다.
반면 프로그램이 최신 DPI인식 모드를 사용한다면 같은 상황에서 프로그램의 비트맵 크기를 조정하지 않고 프로그램에 WM_DPUCHANGED라는 신호를 보내준다. 이 경우 DPI에 맞는 각 요소의 크기 조정은 프로그램의 몫이 된다. 더 자세한 정보는 아래 마이크로소프트의 공식 링크를 참고하면 된다.
반면 프로그램이 최신 DPI인식 모드를 사용한다면 같은 상황에서 프로그램의 비트맵 크기를 조정하지 않고 프로그램에 WM_DPUCHANGED라는 신호를 보내준다. 이 경우 DPI에 맞는 각 요소의 크기 조정은 프로그램의 몫이 된다. 더 자세한 정보는 아래 마이크로소프트의 공식 링크를 참고하면 된다.
Audacity는 wxWidgets을 사용하고 있고, wxWidgets은 3.1.3버전 전까지는 HiDPI를 지원할 수 없는 상태였다. 현재 Audacity에서 사용되는 wxWidgets버전은 HiDPI를 지원할 수는 있지만, 현재 Audacity 프로그램은 DPI인식까지는 가능해도 내부적으로 DPI에 맞게 프레임의 크기를 조절하는 코드는 구현되어 있지 않은 상태였다. 따라서 고해상도 환경에서 Audacity를 사용할 경우 DPI인식이 되어 프로그램 내의 UI가 굉장히 작게 표현되거나 DPI인식이 되지 않아 UI들이 확대되고 흐릿하게 보이는 현상이 나타난다. 실제로 15.6인치에 2880x1800 해상도인 현재의 노트북에서는 배율이 200%로 사용되고 Audacity도 흐릿하게 나타났지만, 30인치에 2560x1080인 와이드모니터에서는 배율이 100%로 사용되어 흐릿함없이 표현되는 모습을 확인할 수 있었다.
Audacity는 wxWidgets을 사용하고 있고, wxWidgets은 3.1.3버전 전까지는 HiDPI를 지원할 수 없는 상태였다. 현재 Audacity에서 사용되는 wxWidgets버전은 HiDPI를 지원할 수는 있지만, 현재 Audacity 프로그램은 DPI인식까지는 가능해도 내부적으로 DPI에 맞게 프레임의 크기를 조절하는 코드는 구현되어 있지 않은 상태였다. 따라서 고해상도 환경에서 Audacity를 사용할 경우 DPI인식이 된다고 해도 프로그램 내의 UI가 굉장히 작게 표현되거나 DPI인식이 되지 않아 UI들이 확대되고 흐릿하게 보이는 현상이 나타난다. 실제로 15.6인치에 2880x1800 해상도인 현재의 노트북에서는 배율이 200%로 사용되고 Audacity도 흐릿하게 나타났지만, 30인치에 2560x1080인 보조와이드모니터에서는 배율이 100%로 사용되어 흐릿함없이 표현되는 모습을 확인할 수 있었다.
# 보조모니터와 노트북에서의 환경차이 사진첨부
결국 폰트 변경은 이미 가독성이 높은 폰트인 맑은 고딕에 Bold옵션을 더해서 부족한 부분에만 변경코드를 추가하고, 글자 흐림 문제를 중점적으로 해결하는 것으로 목표를 조금 수정했다.
결국 폰트 변경은 이미 가독성이 높은 폰트인 맑은 고딕에 Bold옵션을 더해서 부족한 부분에만 변경코드를 추가하고, 글자 흐림 문제를 중점적으로 해결하는 것으로 목표를 조금 수정했다.
앞서 메뉴바(wxMenuBar)는 상위의 윈도우를 바꾸더라도 폰트가 변경되지 않았고, 하위의 wxMenu에는 폰트를 설정해주는 SetFont()가 없는 것이 확인되었다. Audacity의 코드를 살펴보니 메뉴바를 초기화하는 형태가 wxMenu에 wxMenuItem을 넣
앞서 메뉴바(wxMenuBar)는 상위의 윈도우를 바꾸더라도 폰트가 변경되지 않았고, 하위의 wxMenu에는 폰트를 설정해주는 SetFont()가 없는 것이 확인되었다. Audacity의 코드를 살펴보니 메뉴바를 초기화하는 형태가 wxMenu에 wxMenuItem을 넣어서 설정하지 않고 wxMenu에서 바로 각 메뉴를 설정하는 형식이었는데 이 상태에서는 SetFont가 적용되지 않아 추가로 wxMenuItem을 조건에 맞게 생성하고 wxMenuItem에 SetFont를 적용해 폰트를 변경하는 방법을 선택했다.
wxMenuItem을 추가하는 형태이기 때문에 상위에서 한 번에 처리할 수 없고 각 메뉴마다 하나씩 추가해야 했었다. 메뉴마다 형태가 다르기 때문에 각 메뉴에 맞는 코드를 작성했다. 크게 3가지 형태가 있다. 일반적인 메뉴, 토글 형태로 Check가 가능한 메뉴, 하위에 또다른 메뉴를 가지고 있는 SubMenu.
가장 문제가 되었던 것은 트랙 부분의 폰트였다. 글자가 매우 작고, 흐릿하게 보이면서도 주변 UI들과 다른 느낌의 폰트였다. 코드를 분석해보니 기본적으로 맑은 고딕이 사용되지 않고 다른 영문폰트를 사용하도록 설정이 되어있었고, 심지어 UI크기에 맞게 폰트를 줄이는 과정에서 필요 이상으로 줄여 가독성이 더욱 나빠진 것을 확인할 수 있었다.
위의 문서를 따라가 분석해보면 프로그램에서 DPI를 인식하게 하는 방법은 크게 두가지가 있다.
# 느낀점
첫째는 Manifest파일 추가이다. 마이크로소프트에서 추천하고 있는 방법이며 안정적으로 DPI 인식모드를 정의해준다. <dpiAware> 이라는 Windows 10 이전 버전에서의 호환성을 위한 설정과 Windows 10 이상부터 지원되는 <dpiAwareness> 라는 설정이 있다. 현재 가장 최신의 PerMonitorV2를 사용하면 각 디스플레이마다 다른 DPI의 변경을 인지하고 프로그램에게 WM_DPICHANGED를 보내 DPI에 따른 변화를 처리하게 할 수 있다.
둘째는 소스코드에 DPI 인식을 위한 API를 추가하는 것이다. Windows 10이상에서 지원되는 SeProcessDpiAwarenessContext를 사용해 Unaware부터 PerMonitorV2까지 설정 가능하다. 여기서 사용할 코드는 가장 최신의 DPI 인식모드를 설정해줄 SeProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2)이다.
하지만 두번째 방법을 사용해 프로그램의 DPI 인식을 성공시켰지만 화면이 너무 작게 표현되는 문제가 발생했다.
##### 너무작은 사진 넣기
문제의 원인은 Audacity에서 각 컴포넌트들의 Size를 정적으로 설정해두었기 때문에 DPI 변경에 따라 자동으로 UI들의 크기가 변경되지 않았기 때문이다. 앞서 살펴본 바와 같이 최신 DPI 인식모드를 사용한다면 UI의 크기조절은 윈도우에서 처리되는 것이 아닌 프로그램에게 맡겨지게 된다. 하지만 현재 Audacity코드에는 FromDIP()와 같은 DPI에 따라 컴포넌트의 크기를 변경해주는 코드와 DPI에 맞게 폰트를 설정하는 코드가 없다. 게다가 wxWindow 같은 부분 대신 이미지가 포함된 부분은 CreateBitmapBundle()과 같은 추가적인 처리가 필요했다. 아래 문서에서 wxWidgets에서의 HiDPI를 설정하는 자세한 설명을 확인할 수 있다.
실제코드를 확인해보니 변경해야할 부분이 너무 많고 각 컴포넌트의 크기를 변경하는 작업이 다른 컴포넌트에 영향을 주어 적절한 크기를 찾는 과정이 대단히 복잡했다. 포럼에서 관련 정보를 찾아보았더니 이미 Audacity 개발자들도 HiDPI 환경에서 흐릿함이나 사이즈 문제를 인지하고 있지만, 차후 Audacity 4.0에서는 wxWidgets을 Qt 프레임워크로 대체할 예정이고 따라서 wxWidgets의 HiDPI 지원을 위한 코드를 추가하지 않을 계획이라고 답변이 달린 것을 확인할 수 있었다.
https://github.com/audacity/audacity/issues/503
# 대안 제시
현실적으로 Audacity 개발자들도 지원하지 않을 기능을 추가로 구현하고 크기 관련 코드 몇천줄을 전부 갈아엎는 것은 어려움이 있다고 판단했고, 다른 대안을 찾아야했다. Audacity 포럼의 정보에 의하면 윈도우의 Override high DPI scaling behavior(높은 DPI 조정 재정의) 기능을 이용해 System(Advanced)로 설정해준다면 부분적으로 해결이 가능했다. 아래 링크에서 더 자세한 설명을 확인할 수 있다.
폰트 수정한 상황에 DPI까지 재정의해준다면 더욱 가독성이 높아진 결과를 확인할 수 있다.
# 개선 결과
결론적으로 개선한 부분은 맑은 고딕 Bold를 사용해 조금이나마 가독성을 끌어올렸고, 특히 심각한 수준이던 패널부분의 폰트와 폰트크기는 가독성이 눈에 띄게 늘어난 것을 체감할 수 있었다. 글자 흐림문제는 코드 수정을 통한 근본적인 해결에는 도달하지 못했지만, 적절한 윈도우 설정을 통해 부분적으로 해결할 수 있었다.
수정한 코드를 새로운 branch에 추가했고, 추가로 Release된 exe파일도 첨부했다.
# 사용된 버전
24년 6월 21일 기준 가장 최신인 Audacity 3.5.1 버전을 수정하여 적용하였다.
프로젝트를 진행하며 매 순간 ‘왜 이렇게 아는게 없고, 못하지’라는 생각을 가졌다. 아직까지 모르는 내용도 많고, 처음 시도해보는 것도 많다는 것을 깨달을 수 있었고, 더 노력해야겠다고 생각했다.
프로젝트를 진행하며 매 순간 ‘왜 이렇게 아는게 없고, 못하지’라는 생각을 가졌다. 아직까지 모르는 내용도 많고, 처음 시도해보는 것도 많다는 것을 깨달을 수 있었고, 더 노력해야겠다고 생각했다.
안관우
안관우
C++에 익숙하지 않고 wxWidgets도 처음이라 어려움을 겪었다. 또 지금까지 프로그램을 분석해볼 때는 보통 리버싱을 통해서 분석하거나 .Net Framework로 개발된 경우에는 ILSpy 같은 툴로 디컴파일해서 분석했었다. 오픈소스인 audacity는 그럴 필요 없이 소스코드를 받아와서 분석하고, 공식문서의 설명을 참고하고, 직접 코드에서 디버깅하면서 동작을 확인하면 되었는데 이 점이 새롭게 느껴졌다.
Fork해온 프로젝트를 받아 빌드하는 과정도 처음이었는데 대단히 신기했다. 아쉬운 점도 있다. 코드를 한줄 수정하고 동작결과를 확인했어야되서 빌드한 후 익숙한 습관대로 Visual Studio 환경에서 대부분 코드를 수정했고, Git을 협업도구로 사용하는 경험은 충분히 못해본 것이 아쉽다. 다음에 팀프로젝트를 할 때에는 Git을 좀 더 활용해 효율높은 협업을 이루어내고 싶다.
시간이 조금 더 여유로웠다면 각 컴포넌트의 크기 조절까지 DPI에 맞게 처리해주는 코드로 모두 수정하고 싶었지만, 몇 개의 코드를 수정했을 때 수정하지 못한 다른 컴포넌트와 겹치게 표시되거나 위치가 꼬여버리는 문제가 발생해서 해결하지 못한 점이 아쉽다. 기존 코드들의 사이즈가 모두 정적으로 선언되었기 때문에 파악하지 못한 요소들이 하나라도 남아있으면 DPI에 맞게 변경될 수가 없었다. Audacity 개발자들이 향후 Qt로 라이브러리를 교체할 예정이기 때문에 wxWidgets의 HiDPI 지원을 추가하지 않을 계획이라고 답한 부분이 이해가 갔다. 수정할 부분이 너무도 많다.
- wxWidgets 폰트 설정 방법 : https://forums.wxwidgets.org/viewtopic.php?p=214285
- wxWidgets 폰트 설정 방법 : https://forums.wxwidgets.org/viewtopic.php?p=214285
- Windows에서 High DPI 데스크톱 애플리케이션 개발 : https://learn.microsoft.com/en-us/windows/win32/hidpi/high-dpi-desktop-application-development-on-windows?source=recommendations
- Windows에서 High DPI 데스크톱 애플리케이션 개발 : https://learn.microsoft.com/en-us/windows/win32/hidpi/high-dpi-desktop-application-development-on-windows?source=recommendations
- 프로세스에 대한 기본 DPI 인식 설정 : https://learn.microsoft.com/en-us/windows/win32/hidpi/setting-the-default-dpi-awareness-for-a-process?source=recommendations
- 프로세스에 대한 기본 DPI 인식 설정 : https://learn.microsoft.com/en-us/windows/win32/hidpi/setting-the-default-dpi-awareness-for-a-process?source=recommendations
- wxWidgets의 High DPI 지원 : https://docs.wxwidgets.org/stable/overview_high_dpi.html#high_dpi_existing_code
- wxWidgets의 High DPI 지원 : https://docs.wxwidgets.org/stable/overview_high_dpi.html#high_dpi_existing_code
- wxWidgets에서의 HiDPI 문제에 대한 답변 : https://github.com/audacity/audacity/issues/503
- wxWidgets에서의 HiDPI 문제에 대한 답변 : https://github.com/audacity/audacity/issues/503
- HiDPI로 인한 문제 설명 : https://blogs.windows.com/windowsdeveloper/2017/05/19/improving-high-dpi-experience-gdi-based-desktop-apps/
- HiDPI로 인한 문제 설명 : https://blogs.windows.com/windowsdeveloper/2017/05/19/improving-high-dpi-experience-gdi-based-desktop-apps/
- 윈도우의 높은 DPI 조정 재정의 설정 방법 : https://forum.audacityteam.org/t/audacity-ui-blurry-in-windows-10/51298/4