Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

表示スケールに合わせて拡大する処理を色々と追加 #1762

Merged
merged 2 commits into from
Mar 21, 2022

Conversation

beru
Copy link
Contributor

@beru beru commented Jan 10, 2022

  • ミニマップのウィンドウ横幅とフォントサイズを表示スケールに合わせて拡大する処理を追加
  • ミニマップのフォントサイズのデフォルト値を -1 から -2 に変更
  • ルーラーの高さ、ルーラーとテキストの隙間、行番号とテキストの隙間を表示スケールに合わせて拡大する処理を追加
  • 文字の間隔と行の間隔を表示スケールに合わせて拡大する処理を追加

PR の目的

ディスプレイの表示スケールに合わせて見た目がスケールするようにする。

カテゴリ

  • 仕様変更

PR の背景

PR のメリット

表示スケールに変更した際に見た目がスケールするので設定値を変更する必要がなくなる。

PR のデメリット (トレードオフとかあれば)

dot by dot のピクセル単位では設定出来なくなるので、表示スケールが大きい数値の時にピクセル単位で細かく調整する事が出来なくなります。

仕様・動作説明

変更前はディスプレイの表示スケールを掛けないピクセル単位でした。

PR の影響範囲

項目に関連する画面の見た目

テスト内容

様々な表示スケールで画面の見た目を確認

関連 issue, PR

参考資料

ミニマップのフォントサイズのデフォルト値を -1 から -2 に変更
ルーラーの高さ、ルーラーとテキストの隙間、行番号とテキストの隙間を表示スケールに合わせて拡大する処理を追加
文字の間隔と行の間隔を表示スケールに合わせて拡大する処理を追加
@sonarcloud
Copy link

sonarcloud bot commented Jan 10, 2022

Kudos, SonarCloud Quality Gate passed!    Quality Gate passed

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 0 Code Smells

94.4% 94.4% Coverage
0.0% 0.0% Duplication

@AppVeyorBot
Copy link

Build sakura 1.0.3988 failed (commit 1bc3d3425b by @beru)

@berryzplus
Copy link
Contributor

この制限外します?

<PreprocessorDefinitions>_WIN32_WINNT=_WIN32_WINNT_WIN7;%(PreprocessorDefinitions)</PreprocessorDefinitions>

_WIN32_WINNTを_WIN32_WINNT_WIN7にしたままだと、
Windows 10のGetSystemMetricsForDpiを利用できず、
HighDPI対応を2回やらナイトいけなくなるような気がします。

@berryzplus
Copy link
Contributor

CIのビルドエラーに見えているものは、LeProcのインストール失敗によるものなのでスルーしてよいと思います。

@beru
Copy link
Contributor Author

beru commented Jan 10, 2022

この制限外します?

<PreprocessorDefinitions>_WIN32_WINNT=_WIN32_WINNT_WIN7;%(PreprocessorDefinitions)</PreprocessorDefinitions>

_WIN32_WINNTを_WIN32_WINNT_WIN7にしたままだと、 Windows 10のGetSystemMetricsForDpiを利用できず、 HighDPI対応を2回やらナイトいけなくなるような気がします。

定かでは無いんですが、サクラエディタの対応OSにWindows 8.1を今はまだ入れていたような気がします。検索してみたところWindows 8.1の延長サポートは2023年1月10日に終了となるようなので、それを過ぎたらさすがに切り捨ててWindows10以降に限定して良いと思います。

高DPI対応では GetDpiForWindow を使うとPer-Monitor DPI対応も行いやすいですね。Per-monitor DPI対応しようとするとソースコードの色々な箇所を書き換えないといけなくて大変なので行われるか不明ですが…。

GetSystemMetricsForDpi が使えないとHighDPI対応を2回やらないといけなくなる、という理由は理解出来ていません。Google検索すると #519 がヒットしたので読んでみました。

しかしなんかうまくコード書いてまとめないとHighDPI対応の為にWindowsAPIをそこらじゅうで呼び出しまくる事になってしまいますね。既にごちゃごちゃしてるのに輪をかけてとかいうと首を絞められるかも。。

@berryzplus
Copy link
Contributor

自分も良く分かってなかったんですが、公式サイト(?)に Windows 10以降 と書いてありました。
https://sakura-editor.github.io/

なので、Windows 8.1対応は考慮不要なはずです。
現状のプロジェクト設定だとwin7準拠コードしか書けませんけれども。

@beru
Copy link
Contributor Author

beru commented Jan 10, 2022

自分も良く分かってなかったんですが、公式サイト(?)に Windows 10以降 と書いてありました。 https://sakura-editor.github.io/
なので、Windows 8.1対応は考慮不要なはずです。 現状のプロジェクト設定だとwin7準拠コードしか書けませんけれども。

記憶が正しければ文章(Ver. 2.4.0.0 以降のバージョンは MS Windows 10 で動作します。)をそのように書いたのは自分だったような気がします。Windows 8.1の記載を省略したのは記載を簡潔にする為だったか書くのが面倒くさかったのか、まぁ確信犯というか切り捨てたいバイアスが働いたのかもしれません。

ただ時間が経過してもうみんなWindows 10かWindows 11(自分はまだ未使用)を使っているだろうし、Windows 8.1は切り捨てても良いんじゃないかとも思いますが、

  • 今から1年後の2023/01/10に延長サポートが過ぎるまでは切り捨てては駄目だ派
  • それが過ぎても切り捨てては駄目だ派

の意見が強ければ今のままでしょうか…。

@beru beru added the specification change ■仕様変更 label Jan 10, 2022
@berryzplus
Copy link
Contributor

GetSystemMetricsForDpi が使えないとHighDPI対応を2回やらないといけなくなる、という理由は理解出来ていません。Google検索すると #519 がヒットしたので読んでみました。

システムDPI対応で1回、PerMonitorV2対応で2回です。

現状ではシステムDPI対応も完了していなくって、
このPRの対応もシステムDPI対応にあたると思います。

@beru
Copy link
Contributor Author

beru commented Jan 11, 2022

システムDPI対応で1回、PerMonitorV2対応で2回です。

現状ではシステムDPI対応も完了していなくって、 このPRの対応もシステムDPI対応にあたると思います。

なるほど、それで2回という事だったんですね。GetSystemMetrics と比較して GetSystemMetricsForDpidpi 引数が追加されていて、Per-Monitor DPI対応をする場合にこのAPIを使うと。文章の背後の意図が読めてませんでした。

一足飛びに対応するか、2回に分けて対応するのかに特にこだわりはないです。Per-Monitor DPI対応をするとなると変更量が増えるので対応に時間は掛かりますね。

個人的にはWindows 8.1を切り捨てても構わないと思います。とはいえ _WIN32_WINNT=_WIN32_WINNT_WIN10 に変更するPRを出してそれがすんなりマージされるかは…何事もやってみないと分からないですね。

@berryzplus
Copy link
Contributor

動作確認して問題なければ入れていいんじゃないかと思います。

Copy link
Contributor

@berryzplus berryzplus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

表示確認はできないのでコメント付けるつもりなかったんですが、コードチェックしてみました。

根拠不明なベタ書き定数を1件、誤記と思われるDPI変換を2件見つけました。
妥当な理由があれば修正要求は取り下げます。

sakura_core/env/CShareData.cpp Show resolved Hide resolved
@@ -122,7 +123,7 @@ void CRuler::DrawRulerBg(CGraphics& gr)
}
if (m_hFont == NULL) {
LOGFONT lf = {0};
lf.lfHeight = 1 - pCommon->m_sWindow.m_nRulerHeight; // 2002/05/13 ai
lf.lfHeight = 1 - DpiScaleY(pCommon->m_sWindow.m_nRulerHeight); // 2002/05/13 ai
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
lf.lfHeight = 1 - DpiScaleY(pCommon->m_sWindow.m_nRulerHeight); // 2002/05/13 ai
lf.lfHeight = DpiScaleY(1 - pCommon->m_sWindow.m_nRulerHeight); // 2002/05/13 ai

じゃないですかね?

元のコードが 1 - n としてる理由が謎ですが。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

元のコードが 1 - n している理由は自分も分かっていません。どちらの記述が良いのかは後で動作確認してみます。

Copy link
Contributor

@berryzplus berryzplus Jan 14, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

お願いします。

LOGFONT.lfHeightに負数を指定してCreateFontIndirectすると、指定した高さのフォントが使われる、という仕様があるはずです。正数を指定した場合は、指定した値に近似するサイズが使われる(つまり、指定したサイズと一致しないかもしれない)仕様です。

1 - n はおそらく、
・指定したサイズより少し小さいフォント
を意味していると考えられます。
たぶん、2より小さい値が設定されることは想定してないっす。

なんか前に、ルーラーって消せなくていいんでしたっけ?というやりとりがあったようななかったような・・・。

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

負数は文字の高さ、正数はセルの高さですね。
正数だとセル内の余白の分、文字の高さが小さくなります。

sakura_core/view/figures/CFigure_ZenSpace.cpp Show resolved Hide resolved
@berryzplus
Copy link
Contributor

付けるつもりなかったのは、レビューですね・・・

@k-takata
Copy link
Member

数日前にVimのPerMonitorV2対応を行いました。 vim/vim@c81e9bf
sakuraエディタのPerMonitorV2対応を行う際には何らかのアドバイスができるかもしれません。

@berryzplus
Copy link
Contributor

残1件です。

1 - nnだけDPI対応してるが、1 - nをDPI対応しなくてよいか?
納得できる理由があれば変更要求は取り下げます。

@berryzplus
Copy link
Contributor

ステータス変わってないように見えました。

request changesで残1件です。
#1762 (comment)

元が1 - nのコードでnだけDPI対応してるのがなんで?という話です。
たぶん1 - n全体をDPI対応しないといかんはず。。。

@beru
Copy link
Contributor Author

beru commented Mar 20, 2022

ステータス変わってないように見えました。

request changesで残1件です。 #1762 (comment)

元が1 - nのコードでnだけDPI対応してるのがなんで?という話です。 たぶん1 - n全体をDPI対応しないといかんはず。。。

う、そういえば対応していませんでした。元の 1 - n の計算の意味合いが良く分からなくてそのまま引き延ばして良いのか謎です。まぁ動かして結果を見て確認するしかなさそうですね。

@berryzplus
Copy link
Contributor

1 - n で負数にした値を指定する意味は takataさんコメント を参照です。
nだけ対応すると、高解像度のときのフォントが少し大きくなります。

@beru
Copy link
Contributor Author

beru commented Mar 21, 2022

1 - n で負数にした値を指定する意味は takataさんコメント を参照です。 nだけ対応すると、高解像度のときのフォントが少し大きくなります。

#1762 (comment) のberryzplusさんのコメントとtakataさんコメントに答えが書いてありそうですね。

1 - n はおそらく、
・指定したサイズより少し小さいフォント
を意味していると考えられます。
たぶん、2より小さい値が設定されることは想定してないっす。

2より小さい値というのは正の数だと1や0ですが、1だと0になって0だと-1になるのでサイズ的には逆転しそうですが指定されないだろうから問題ないという事ですね。了解しました。

@beru
Copy link
Contributor Author

beru commented Mar 21, 2022

2より小さい値が設定されないようにUI側でチェックが入っていました。

const int IDC_SPIN_nRulerHeight_MIN = 2;

定数 IDC_SPIN_nRulerHeight_MIN の値が 2 で、CPropWin の実装でそれを下回らないようにしてました。

@berryzplus berryzplus dismissed their stale review March 21, 2022 05:27

1 - nの修正を確認したので。

berryzplus
berryzplus previously approved these changes Mar 21, 2022
Copy link
Contributor

@berryzplus berryzplus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

システムDPI対応として問題なさそうに思います。

@berryzplus berryzplus dismissed their stale review March 21, 2022 05:30

CIがエラーになってるので。

Copy link
Contributor

@berryzplus berryzplus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GHAのSonarCloudビルドが失敗していますが、PRに起因する問題ではなさそうなのでスルーします。

@AppVeyorBot
Copy link

Build sakura 1.0.4097 completed (commit ae28b056ea by @beru)

@beru
Copy link
Contributor Author

beru commented Mar 21, 2022

レビューありがとうございました。Mergeします。
もし後で問題が見つかったら別PRで修正します。

@beru beru merged commit 535e951 into master Mar 21, 2022
@beru beru deleted the dpiscale branch March 21, 2022 09:40
@beru
Copy link
Contributor Author

beru commented Mar 21, 2022

1 - n の記述ですが、 -(n - 1) と同じ結果になるので、

  • berryzplusさんコメント : 指定したサイズより少し小さいフォント
  • takataさんコメント : 負数は文字の高さ、正数はセルの高さ、正数だとセル内の余白の分、文字の高さが小さくなる

を展開した記述と捉える事が出来そうです。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
specification change ■仕様変更
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants