Skip to content
Snippets Groups Projects
Commit e2aa987e authored by 관우 안's avatar 관우 안
Browse files

최종본 수정

parent 32a3c89a
No related branches found
No related tags found
No related merge requests found
......@@ -9,6 +9,7 @@
두 가지 방법을 통해 Audacity Windows버전의 한글 가독성을 개선시킨다면 작업의 효율성을 높일뿐만 아니라 장시간 작업 시에도 눈의 피로를 줄일 수 있을 것으로 기대된다.
# 개선 과정
### wxWidget
......@@ -97,7 +98,7 @@ exitItem.SetFont(font)
또한 메뉴바의 폰트의 경우에는 최상위 윈도우에 폰트 설정을 추가해도 변경되지 않아 하위의 각각의 메뉴아이템들의 폰트를 변경해줘야한다는 것을 알게되었다.
##### 최종적으로 테스트에 사용한 코드, SetFont의 위치에 따라 button, statusbar 등이 바뀌는 범위를 확인
### 최종적으로 테스트에 사용한 코드, SetFont의 위치에 따라 button, statusbar 등이 바뀌는 범위를 확인
```python
import wx
import wx.xrc
......@@ -197,6 +198,7 @@ Audacity는 wxWidgets을 사용하고 있고, wxWidgets은 3.1.3버전 전까지
결국 폰트 변경은 이미 가독성이 높은 폰트인 맑은 고딕에 Bold옵션을 더해서 부족한 부분에만 변경코드를 추가하고, 글자 흐림 문제를 중점적으로 해결하는 것으로 목표를 조금 수정했다.
# 폰트 수정
각 윈도우들의 폰트를 변경하기 위해 ProjectWindows의 GetProjectFrame 함수에 wxWindow와 font를 받아 윈도우의 자식까지 폰트를 변경해주는 SetFontRecursive 함수를 만들어 적용해주었다. GetProjectFrame은 레이아웃이 생성되고 각 요소들이 배치될 때 최상위 윈도우를 가져와준다. 이 함수에 폰트 설정을 넣어서 반환해주면 wxWindow 형태의 요소들의 폰트를 바꿔줄 수 있다.
......@@ -232,6 +234,7 @@ AUDACITY_DLL_API wxFrame &GetProjectFrame( AudacityProject &project )
}
```
앞서 메뉴바(wxMenuBar)는 상위의 윈도우를 바꾸더라도 폰트가 변경되지 않았고, 하위의 wxMenu에는 폰트를 설정해주는 SetFont()가 없는 것이 확인되었다. Audacity의 코드를 살펴보니 메뉴바를 초기화하는 형태가 wxMenu에 wxMenuItem을 넣어서 설정하지 않고 wxMenu에서 바로 각 메뉴를 설정하는 형식이었는데 이 상태에서는 SetFont가 적용되지 않아 추가로 wxMenuItem을 조건에 맞게 생성하고 wxMenuItem에 SetFont를 적용해 폰트를 변경하는 방법을 선택했다.
wxMenuItem을 추가하는 형태이기 때문에 상위에서 한 번에 처리할 수 없고 각 메뉴마다 하나씩 추가해야 했었다. 메뉴마다 형태가 다르기 때문에 각 메뉴에 맞는 코드를 작성했다. 크게 3가지 형태가 있다. 일반적인 메뉴, 토글 형태로 Check가 가능한 메뉴, 하위에 또다른 메뉴를 가지고 있는 SubMenu.
```cpp
......@@ -256,6 +259,7 @@ CurrentMenu()->Append(menu_item);
//CurrentMenu()->AppendCheckItem(ID, label);
```
가장 문제가 되었던 것은 트랙 부분의 폰트였다. 글자가 매우 작고, 흐릿하게 보이면서도 주변 UI들과 다른 느낌의 폰트였다. 코드를 분석해보니 기본적으로 맑은 고딕이 사용되지 않고 다른 영문폰트를 사용하도록 설정이 되어있었고, 심지어 UI크기에 맞게 폰트를 줄이는 과정에서 필요 이상으로 줄여 가독성이 더욱 나빠진 것을 확인할 수 있었다.
맑은 고딕(굵게)을 적용하고 폰트 크기를 키워 가독성을 높이는 코드를 적용했다.
```cpp
......@@ -275,6 +279,7 @@ gFont.SetPointSize(fontSize + 2);
![스크린샷_2024-06-21_220014](/uploads/65bbeec5d06e0f32ecf588e43f49407a/스크린샷_2024-06-21_220014.png)
수정 후 상황, 붉은 색으로 표시된 부분에서 폰트 변경과 크기 수정을 통한 가독성 향상을 확인할 수 있다.
# DPI 인식 코드 추가
앞서 Audacity에서는 DPI 인식을 하지 못하는 상태라는 것을 파악했고 DPI 인식하는 코드를 넣으려고 시도했다.
https://learn.microsoft.com/en-us/windows/win32/hidpi/high-dpi-desktop-application-development-on-windows?source=recommendations
......@@ -285,8 +290,14 @@ https://learn.microsoft.com/en-us/windows/win32/hidpi/high-dpi-desktop-applicati
둘째는 소스코드에 DPI 인식을 위한 API를 추가하는 것이다. Windows 10이상에서 지원되는 SeProcessDpiAwarenessContext를 사용해 Unaware부터 PerMonitorV2까지 설정 가능하다. 여기서 사용할 코드는 가장 최신의 DPI 인식모드를 설정해줄 SeProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2)이다.
하지만 두번째 방법을 사용해 프로그램의 DPI 인식을 성공시켰지만 화면이 너무 작게 표현되는 문제가 발생했다.
```cpp
//추가된코드
SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);
```
![스크린샷_2024-06-21_233737](/uploads/a3d673aff60b0e3527ed06ea693e13bb/스크린샷_2024-06-21_233737.png)
정상적으로 DPI인식이 되어 메뉴부분은 흐릿하지 않게 변했지만 나머지 UI들이 매우 작아지는 결과가 나타난다.
##### 너무작은 사진 넣기
문제의 원인은 Audacity에서 각 컴포넌트들의 Size를 정적으로 설정해두었기 때문에 DPI 변경에 따라 자동으로 UI들의 크기가 변경되지 않았기 때문이다. 앞서 살펴본 바와 같이 최신 DPI 인식모드를 사용한다면 UI의 크기조절은 윈도우에서 처리되는 것이 아닌 프로그램에게 맡겨지게 된다. 하지만 현재 Audacity코드에는 FromDIP()와 같은 DPI에 따라 컴포넌트의 크기를 변경해주는 코드와 DPI에 맞게 폰트를 설정하는 코드가 없다. 게다가 wxWindow 같은 부분 대신 이미지가 포함된 부분은 CreateBitmapBundle()과 같은 추가적인 처리가 필요했다. 아래 문서에서 wxWidgets에서의 HiDPI를 설정하는 자세한 설명을 확인할 수 있다.
https://docs.wxwidgets.org/stable/overview_high_dpi.html#high_dpi_existing_code
......@@ -307,10 +318,15 @@ https://forum.audacityteam.org/t/audacity-ui-blurry-in-windows-10/51298/4
# 개선 결과
결론적으로 개선한 부분은 맑은 고딕 Bold를 사용해 조금이나마 가독성을 끌어올렸고, 특히 심각한 수준이던 패널부분의 폰트와 폰트크기는 가독성이 눈에 띄게 늘어난 것을 체감할 수 있었다. 글자 흐림문제는 코드 수정을 통한 근본적인 해결에는 도달하지 못했지만, 적절한 윈도우 설정을 통해 부분적으로 해결할 수 있었다.
수정한 코드를 새로운 branch에 추가했고, 추가로 Release된 exe파일도 첨부했다.
수정한 코드를 새로운 branch(Audacity_3.5.1_FontBold)에 추가했고, 추가로 exe파일이 담긴 Release폴더 압축파일도 첨부했다.
Audacity_3.5.1_FontBold 브랜치의 Release.zip 압축을 풀면 Audacity.exe를 확인할 수 있다.
# 사용된 버전
24년 6월 21일 기준 가장 최신인 Audacity 3.5.1 버전을 수정하여 적용하였다.
24년 6월 21일 기준 가장 최신배포버전인 Audacity 3.5.1 버전을 수정하여 적용하였다.
교수님께서 제공해주신 Project를 Fork해왔을 때 몇몇 파일이 3.5.1 Release버전이 아니라 그 이후에 업데이트된 파일이어서 새롭게 Audacity_3.5.1 브랜치를 만들고 3.5.1버전의 파일로 덮어쓰기했다.
따라서 수정된 파일을 비교하려면 Audacity_3.5.1 브랜치와 Audacity_3.5.1_FontBold 브랜치를 비교하면 된다.
# 느낀점
......@@ -335,6 +351,7 @@ Fork해온 프로젝트를 받아 빌드하는 과정도 처음이었는데 대
시간이 조금 더 여유로웠다면 각 컴포넌트의 크기 조절까지 DPI에 맞게 처리해주는 코드로 모두 수정하고 싶었지만, 몇 개의 코드를 수정했을 때 수정하지 못한 다른 컴포넌트와 겹치게 표시되거나 위치가 꼬여버리는 문제가 발생해서 해결하지 못한 점이 아쉽다. 기존 코드들의 사이즈가 모두 정적으로 선언되었기 때문에 파악하지 못한 요소들이 하나라도 남아있으면 DPI에 맞게 변경될 수가 없었다. Audacity 개발자들이 향후 Qt로 라이브러리를 교체할 예정이기 때문에 wxWidgets의 HiDPI 지원을 추가하지 않을 계획이라고 답한 부분이 이해가 갔다. 수정할 부분이 너무도 많다.
과제를 진행하며 여러모로 부족한 점을 많이 느꼈고, 실제로 오픈소스를 뜯어보며 수정하는 과정을 통해 새롭게 배운 것들도 많았다. 공식문서와 포럼을 이용해 추가적인 정보를 얻을 수도 있었다. 좋은 경험이 되었다고 생각한다.
# 출처
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment