-
Notifications
You must be signed in to change notification settings - Fork 168
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
マウスホイールでのフォントサイズ変更をパーセンテージに基づいて行うようにする #1513
マウスホイールでのフォントサイズ変更をパーセンテージに基づいて行うようにする #1513
Conversation
005f5a6
to
717ce6c
Compare
✅ Build sakura 1.0.3366 completed (commit 71e86df685 by @suconbu) |
✅ Build sakura 1.0.3367 completed (commit 50b83fe8b6 by @suconbu) |
0.1, 0.11, 0.125, 0.15, 0.175, 0.2, 0.225, 0.25, 0.275, 0.3, 0.35, 0.4, 0.45, 0.5, 0.6, 0.7, 0.8, 0.9, | ||
1.0, 1.1, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0, 3.5, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0, 9.0, | ||
10.0, 11.0, 12.5, 15.0, 17.5, 20.0, 22.5, 25.0, 27.5, 30.0, 35.0, 40.0, 45.0, 50.0, 60.0, 70.0, 80.0, 90 | ||
}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
この書き方ってわかりづらくないですか?
- この配列が何か不明。一度変数に入れてやれば変数名で表現できます。
- 配列要素の想定型が不明。サフィックス省略なので
const (&double)[n]
だと思います。
解決したいのは 1 のほうで、auto使ってもいいので名前が欲しいです。
const auto xxx = {...};
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
意味合い的に constexpr ですね。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
対応しました。
配列を使うと CodeSmell になってしまったため std::array としています。
(constexpr にしたいために std::vector ではなく std:array を選択しました)
constexpr std::array<double, 72> aZoomFactors = {
0.01, 0.011, 0.0125, 0.015, 0.0175, 0.02, 0.0225, 0.025, 0.0275, 0.03, 0.035, 0.04, 0.045, 0.05, 0.06, 0.07, 0.08, 0.09,
sakura_core/util/zoom.cpp
Outdated
@param[in] nValueMax 上限値 | ||
@param[in] nValueUnit 値の最小単位 | ||
*/ | ||
ZoomSetting::ZoomSetting( std::initializer_list<double> iZoomFactors, double nValueMin, double nValueMax, double nValueUnit ) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
さっきの配列はinitializer_listでしたか。
うまく説明できませんが違和感があります。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
initializer_list 型の引数には initializer_list しか渡せないこと、空ではない initializer_list を動的に生成することはできないことから、このコンストラクタに実行時に計算した値を指定することができなくなっています。
sanomari さんの違和感とは別件かもしれませんが、私が腑に落ちなかったのはこの点です。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
開始/終了イテレータを受け取る形にしました。
※ユニットテスト用に std::initializer_list<double>
を受け取るオーバーロードは残しました。
template<class InputIter>
ZoomSetting( InputIter iterZoomFactorsFirst, InputIter iterZoomFactorsLast, double nValueMin, double nValueMax, double nValueUnit ) :
sakura_core/util/zoom.cpp
Outdated
m_nValueMax = nValueMax; | ||
m_nValueUnit = nValueUnit; | ||
|
||
// 正当性確認 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
うまく説明できませんが、コンストラクタに正当性確認があることに違和感があります。
validじゃないインスタンスは使えないんですよね?
PR差分ページを上から順番に見てるので、後続処理を意識せずに書いています。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
私は正当性確認の必要性そのものに疑問を覚えました。
CViewCommander での実際の使用例を見ると、すべての引数が定数になっています。開発者が間違った値を指定していないか?という検査を行っていることになりますが、ここのコードは Release ビルドでも有効なので、全ユーザーの環境で実行されることになります。
開発時に確認する必要があるのは分かりますので、別の関数にして必要な時に呼んだ方がいいと思います。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
正当性判定処理を関数化しました。今回はユニットテストから使用します。
/*!
@brief 設定値の正当性判定
*/
bool ZoomSetting::IsValid() const
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
今回追加したコード内にCodeSmellsがあるのが気になりました。
完全新規のコードで対応できない理由はないと思うので対応して欲しいです。
SonarCloudの合格ラインは8割なので、もう少しです。
マクロを使えば sakura_core/cmd/CViewCommander_Settings.cpp
の修正コードを実行させることができると思います。
やらなくていいと言われそうですが、できる範囲では対応しておきたいです。
これはやってほしいです。 sakura/tests/unittests/test-winmain.cpp Line 304 in d1bd398
SetFontSize(0, 1, 2); //フォントサイズアップ
SetFontSize(0, -1, 2); //フォントサイズダウン 実行した結果どうなったかを確認できないのが悲しいですが、とりあえず動かしてみることでコードの実行によってクラッシュしないことくらいは確認できると思っています。
対応しない理由を合意できれば放置でよいと思います。 |
倍率テーブルの渡し方を見直します。
ZoomSetting クラスは不変としたため初期化時に行うこととしています。
対応します。
カバレッジ確保には役立てられそうです。教えて頂きありがとうございます。 |
sakura_core/util/zoom.cpp
Outdated
m_nValueMax = nValueMax; | ||
m_nValueUnit = nValueUnit; | ||
|
||
// 正当性確認 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
私は正当性確認の必要性そのものに疑問を覚えました。
CViewCommander での実際の使用例を見ると、すべての引数が定数になっています。開発者が間違った値を指定していないか?という検査を行っていることになりますが、ここのコードは Release ビルドでも有効なので、全ユーザーの環境で実行されることになります。
開発時に確認する必要があるのは分かりますので、別の関数にして必要な時に呼んだ方がいいと思います。
@brief ズーム設定を保持 | ||
*/ | ||
class ZoomSetting | ||
{ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
このクラス、メンバ変数を private にする意味あるかな?と思いました。コンストラクタで設定した値を公開するのが目的なら、public な const メンバ変数でも要求は満たせると思います。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
対応しました。
用途や構成から struct 型が適切と思われたので見直しました。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
struct 型が適切
struct型は private型を持つことができない特殊な class 型です。
この型をconst変数で宣言して使う分にはきっと問題ないですが、非const(≒書き替え可能)な変数で使うなら考慮が必要っす。(どっちのパターンかは見てない)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
struct型は private型を持つことができない特殊な class 型です。
いえ、struct でも private 指定はできますよ。C++ の struct はデフォルトで public な class です。(class がデフォルトで private な struct であるとも言えます)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
いえ、struct でも private 指定はできますよ。C++ の struct はデフォルトで public な class です。(class がデフォルトで private な struct であるとも言えます)
知らんかったです。
structでもprivateにできるんですね。
structとclassの違い
キーワード | 日本語 | C言語 | C++ | 用途 |
---|---|---|---|---|
struct | 構造体 | 使える | 使える | 独自データのメモリレイアウトを定義して公開する。 |
class | クラス | 使えない | 使える | 特定の役割・操作を定義してインターフェースを公開する。 |
メモリレイアウトを公開するためにstructを使うんだと考えたら、
privateなメンバーを持たせてしまうと「何それ?」になります。
privateなメンバーは公開されないので、レイアウト公開してないじゃん、ってことになるので。
インターフェースを公開するためにclassを使うんだと考えたら、
ファンクタ(=operator()
を持つstruct)を見ると「何これ?」になります。
よくよく考えるとstructにもvirutal関数を定義できますが、
virtual関数を定義したら仮想関数テーブルがメモリレイアウトに組み込まれるので、
公開されないメンバーを追加することになりますね。
まぁ、色々ありまっせ、ということなのかな。。。
sakura_core/util/zoom.cpp
Outdated
@param[in] nValueMax 上限値 | ||
@param[in] nValueUnit 値の最小単位 | ||
*/ | ||
ZoomSetting::ZoomSetting( std::initializer_list<double> iZoomFactors, double nValueMin, double nValueMax, double nValueUnit ) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
initializer_list 型の引数には initializer_list しか渡せないこと、空ではない initializer_list を動的に生成することはできないことから、このコンストラクタに実行時に計算した値を指定することができなくなっています。
sanomari さんの違和感とは別件かもしれませんが、私が腑に落ちなかったのはこの点です。
指摘いただいた ZoomSetting まわりの修正を行いました。 引き続いてカバレッジ向上と CodeSmell 駆除を行っていきます。 |
1ea48ff
to
b808323
Compare
zoom.cpp のコード量が増えたためかかろうじて 80% 超えられましたが、 引き続き残った CodeSmell を対応します。 |
a01244c
to
dc18ceb
Compare
sakura_core/view/CCaret.cpp
Outdated
int originalPointSize = m_pEditDoc->m_pcEditWnd->GetFontPointSize( false ); | ||
auto_sprintf( szFontSize, LS( STR_STATUS_FONTSIZE ), 100 * currentPointSize / originalPointSize ); | ||
const double nZoomPercentage = m_pEditDoc->m_blfCurTemp ? (m_pEditDoc->m_nCurrentZoom * 100.0) : 100.0; | ||
if( nZoomPercentage < 5.0 ){ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ここ多分こういうことですよね。
if( const double nZoomPercentage = m_pEditDoc->m_nCurrentZoom * 100.0;
m_pEditDoc->m_blfCurTemp && nZoomPercentage < 5.0 ){
}else if( m_pEditDoc->m_blfCurTemp ){
}else{
//nZoomPercentage = 100%
}
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
m_nCurrentZoom は一時設定の時に限り有効な値が設定されるので、else で「nZoomPercentage = 100%」とはならないんです。
CodeSmell 指摘についてはこう修正しておこうと思います。
if( const double nZoomPercentage = m_pEditDoc->m_blfCurTemp ? (m_pEditDoc->m_nCurrentZoom * 100.0) : 100.0;
nZoomPercentage < 5.0 ){
auto_sprintf( szFontSize, LS( STR_STATUS_FONTZOOM_1 ), nZoomPercentage );
}else{
auto_sprintf( szFontSize, LS( STR_STATUS_FONTZOOM_0 ), nZoomPercentage );
}
あと、auto_sprintf
は auto_sprintf_s
に差し替えておいた方がいいですね。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
一晩寝て思ったんですけど
if( const double nZoomPercentage = GetZoomPercentage(); nZoomPercentage < 5.0 ){
と書けるなら読みづらさは解消するのかもです。
m_nCurrentZoom は一時設定の時に限り有効な値が設定されるので、else で「nZoomPercentage = 100%」とはならないんです。
う~む。設計とコードがズレてるかも知れないです。
double nZoomPercentage = m_pEditDoc->m_blfCurTemp ? (m_pEditDoc->m_nCurrentZoom * 100.0) : 100.0;
m_pEditDoc->m_blfCurTemp が真(0以外)のとき、m_pEditDoc->m_nCurrentZoom の 100倍を設定。
m_pEditDoc->m_blfCurTemp が偽(0)のとき、固定値 100 を設定。
あと、コード全体をよく見れてないぼくが悪いのかも知らんですが、
zoomが5%未満のときだけ小数点以下1桁を表示するのはなんでかな?と思いました。
ほか、これは読み飛ばしてもらってかまいません。
- 拡大率って普通 ratio じゃね? 😃
- 浮動小数点を表すハンガリアン記法って n ではなくて f とか d のような・・・。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if( const double nZoomPercentage = GetZoomPercentage(); nZoomPercentage < 5.0 ){
と書けるなら読みづらさは解消するのかもです。
確かにこれが良いですね。
m_blfCurTemp
の値によって取得する値を選ぶ関数が既存で CEditWnd
にいくつかあるので、ここに追加します。
zoomが5%未満のときだけ小数点以下1桁を表示するのはなんでかな?と思いました。
コードだけ見ると謎ですよね。PR 説明を更新して「仕様・動作説明」の所に理由を書きました。
浮動小数点を表すハンガリアン記法
特定のプリミティブ型に依存しない「数値」(Numeric) で n ということで良いかと思います。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
m_blfCurTemp の値によって取得する値を選ぶ関数が既存で CEditWnd にいくつかあるので、ここに追加します。
これを対応するとまたコードカバレッジが 80% 切ってしまいそうですが大目に見て下さい😅
@@ -3460,7 +3460,8 @@ BEGIN | |||
STR_ERR_DLGEDITVW6 "■" | |||
STR_MENU_KEYWORDINFO "Copy Keyword description to clipboard" | |||
STR_MENU_OPENKEYWORDDIC "Open keyword dictionary" | |||
STR_STATUS_FONTSIZE "%4d %%" | |||
STR_STATUS_FONTZOOM_0 "%4.0f %%" | |||
STR_STATUS_FONTZOOM_1 "%4.1f %%" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
あれ?書式文字列はリソースに持っていいんですか?
既存リソースに含まれているのは置いておいて、
「書式記号を翻訳してはならない」というルールを説明できますか?
たとえば、フランス語は小数点にカンマ(,)を使うんですけど、
「'%4.1f %%'」を「'%4,1f %%'」と翻訳したらおかしなことになります。(落ちます)
安全にリソース化できないのでリソース化しない、が妥当な回避策だと思います。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
心配点は理解できました。※小数点の件、確かドイツ語もそうですね
(誤って翻訳された場合) 今回のは起動したらすぐ落ちるので良い(?)ですが、たまにしか使われないリソースだと特にまずいですね。
書式文字列に対して翻訳が掛かっていないかどうかについては、何かしらチェックツールを用意して機械的に検知させるというのはどうでしょうか。
063c7db
to
3776778
Compare
❌ Build sakura 1.0.3411 failed (commit 99ccb7df34 by @suconbu) |
あらら……? |
原因不明ですがリベース後にエラーが出てしまっているので対処します。
|
✅ Build sakura 1.0.3424 completed (commit c02e481247 by @suconbu) |
理由は分かりませんでしたが、以下の const を除くことで解消できました。 for( [[maybe_unused]] const double _ : zoomSetting.m_vZoomFactors ){ |
✅ Build sakura 1.0.3425 completed (commit 050c902542 by @suconbu) |
sakura_core/util/zoom.cpp
Outdated
|
||
// 最小単位で丸めた後の値が変更前の値から変わらなければ | ||
// 変わる位置までインデックスを動かしていく | ||
// 本当は無限ループで良いが万一の暴走回避のため有限回 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nNextIndex が範囲外なら抜けるはずなので対策不要では?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ループ毎に必ず nNextIndex が変化するため杞憂だったかもしれません。
ここは while( true ) に戻します。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ここは通常の for でインデックスを動かすよう見直しました。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
残課題ですが、カバレッジが8割を下回っています。
8割超えるのが無理ならばその理由を共有して「ではスルーで。」と言えるかどうかレビューしたらいいように思います。
0.01, 0.011, 0.0125, 0.015, 0.0175, 0.02, 0.0225, 0.025, 0.0275, 0.03, 0.035, 0.04, 0.045, 0.05, 0.06, 0.07, 0.08, 0.09, | ||
0.1, 0.11, 0.125, 0.15, 0.175, 0.2, 0.225, 0.25, 0.275, 0.3, 0.35, 0.4, 0.45, 0.5, 0.6, 0.7, 0.8, 0.9, | ||
1.0, 1.1, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0, 3.5, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0, 9.0, | ||
10.0, 11.0, 12.5, 15.0, 17.5, 20.0, 22.5, 25.0, 27.5, 30.0, 35.0, 40.0, 45.0, 50.0, 60.0, 70.0, 80.0, 90.0 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ところで、この定数値の根拠ってなんでしたっけ?
(「話聞けよ!」ってなっていたらスンマセン…)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
刻み方については #1491 (comment) で試作したものに近い変化率でかつ、パーセントで表示した時に切りの良い値としています。
最小・最大については、1pt から 72pt (7200%) へ、72pt から 1pt (1.38%) へとズームさせるのに十分な範囲としました。
} | ||
nPointSize = (int)nPointSizeF; | ||
|
||
// フォントサイズが変わらないなら終了 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ん?
@@ -3409,7 +3409,8 @@ BEGIN | |||
STR_ERR_DLGEDITVW6 "■" | |||
STR_MENU_KEYWORDINFO "キーワードの説明をクリップボードにコピー" | |||
STR_MENU_OPENKEYWORDDIC "キーワード辞書を開く" | |||
STR_STATUS_FONTSIZE "%4d %%" | |||
STR_STATUS_FONTZOOM_0 "%4.0f %%" | |||
STR_STATUS_FONTZOOM_1 "%4.1f %%" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
指摘じゃありませんが、結局残存してるのを確認。
sakura_core/util/zoom.cpp
Outdated
// 最小単位で丸めた後の値が変更前の値から変わらなければ | ||
// 変わる位置までインデックスを動かしていく | ||
// 本当は無限ループで良いが万一の暴走回避のため有限回 | ||
for( [[maybe_unused]] double _ : zoomSetting.m_vZoomFactors ){ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ここ拡張for(=「要素:コレクション」と書いてコレクションに含まれる要素に繰り返し操作を行う、比較的新しい形式のfor文)に見えるので、コメントの「インデックスを動かしていく」のくだりが実装とあってない気がします。
どちらかというと、拡張forが使えるところに無限ループ書くやり方に違和感あります。
あと、コードをちゃんと見れてないですが maybe unusedが「ん?」って感じです。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ここは無限ループの書き方でなく通常の for でインデックス (nNextIndex) を進めるよう改めます。
@brief ズーム設定を保持 | ||
*/ | ||
class ZoomSetting | ||
{ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
struct 型が適切
struct型は private型を持つことができない特殊な class 型です。
この型をconst変数で宣言して使う分にはきっと問題ないですが、非const(≒書き替え可能)な変数で使うなら考慮が必要っす。(どっちのパターンかは見てない)
6b44ff0
to
a87ad8b
Compare
ローカルでテスト実行する時の待ち時間が長すぎてしまうと不便かなと思い、Sleep は 10 秒にしました。(実際の実行所要時間は 3 秒前後) |
a87ad8b
to
dd48ee1
Compare
✅ Build sakura 1.0.3438 completed (commit 71a8486f54 by @suconbu) |
✅ Build sakura 1.0.3439 completed (commit 4ad8a3e709 by @suconbu) |
* mode=2でフォントサイズが変更されないパスを通るマクロを追加 * SetFontSizeの第一引数が1/10pt単位になっていなかったのを修正
dd48ee1
to
aa25ffa
Compare
Kudos, SonarCloud Quality Gate passed! |
✅ Build sakura 1.0.3440 completed (commit dce110c60d by @suconbu) |
@@ -304,11 +301,6 @@ void CViewCommander::Command_SETFONTSIZE( int fontSize, int shift, int mode ) | |||
return; | |||
} | |||
nPointSize = (int)nPointSizeF; | |||
|
|||
// フォントサイズが変わらないなら終了 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
GetZoomedValue がズーム倍率を変更できない場合には false を返す仕様としていることから、ここは true になることがない if 文でしたので変数 nCurrentPointSize と合わせて削除しました。
</Project> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ファイル末尾の行末改行、「無し」から「有り」に変更。
スルーしますけど戻してもスルーする気がします。
@@ -251,18 +254,28 @@ void CViewCommander::Command_FONT( void ) | |||
/*! フォントサイズ設定 | |||
@param fontSize フォントサイズ(1/10ポイント単位) | |||
@param shift フォントサイズを拡大or縮小するための変更量(fontSize=0のとき有効) | |||
@param mode フォントサイズ設定対象(0:フォント設定 1:タイプ別設定(なければ0と同じ) 2:一時適用フォント) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
既存設計なのでどうしようもないですが、マジックナンバーやめたいっす。
@brief 現在のズーム倍率を取得 | ||
@return 1.0を等倍とするズーム倍率 | ||
*/ | ||
double CEditWnd::GetFontZoom() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
このPRに含めなくてよいですが...
double CEditWnd::GetFontZoom() | |
double CEditWnd::GetFontZoom() const noexcept |
- メンバーを変更しないので const にできます。
- この関数の呼出し元で例外を考慮しなくてよいことを noexcept で示せます。
*/ | ||
double CEditWnd::GetFontZoom() | ||
{ | ||
if( GetDocument()->m_blfCurTemp ){ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
対応の必要はないですが👆でnoexceptを付けるならこうなるはずです。
if( GetDocument()->m_blfCurTemp ){ | |
if( const auto pDocument = GetDocument(); pDocument && pDocument->m_blfCurTemp ){ |
やらんでも良いですが。
@@ -277,6 +277,9 @@ TEST_F( WinMainTest, runEditorProcess ) | |||
// コントロールプロセスの初期化完了を待つ | |||
CControlProcess_WaitForInitialized( szProfileName ); | |||
|
|||
// 起動時実行マクロが全部実行し終わるのを待つ | |||
::Sleep( 10000 ); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
後で触る気マンマンですが、とりあえずこの対応で文句ありません。
</Project> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
もう1個のfiltersと同じです。
改行あるのとないのとどっちが正しいか分からないですが、これがテキストファイルだとすれば最終行にも行末記号を付けるべき(POSIX標準)らしいです。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Visual Studio で編集すると末尾改行は削除されるはずですが、その他のエディタでも編集することがあるのなら、.editorconfig
に insert_final_newline = false
を指定しておくのが良いかもしれません。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
リベースでのコンフリクト修正時に使用したエディタ (vim) により自動的に追加されたものを見落としてしまいました。
.editorconfig に insert_final_newline = false を指定しておくのが良いかもしれません。
ありがとうございます。この設定で末尾改行を除去できるか試してみます。
ありがとうございました。マージします。 |
開発作業お疲れさまでした。 早速、
を使って試してみました。 ちゃんと試していませんが「フォント設定」ダイアログを開くまでは |
あれ?「Last Modified: 2021/2/8 18:10:20」ってあるから何かがおかしい? |
動作を見て頂きありがとうございます。 sakura.ini なしで起動した時に、フォントサイズ相対設定の基準値として参照する |
sakura.ini が存在していない時に |
私が真っさらなサクラエディタを試してみてバグが発覚して良かったのでしょうか?(汗) |
これほど容易に起きるバグを見逃してしまった事はまずいと認識しています😔 |
PRを作成していただけでもめっちゃくちゃ有難いです!! |
ありがとうございます。 |
PR の目的
Ctrl + マウスホイール操作でフォントサイズ変更する機能を使いやすくします。
※ #1491 で検討した内容の反映になります。
カテゴリ
PR の背景
現在のフォントサイズ変更機能 (ズーム機能) には以下のような使いづらい点がありました。
他は 100% を基準として 110%, 120%, ... のように変化するのに対して、サクラエディタは決められたサイズの中から選択となっている。
これらを解消したいというのが動機になります。
PR のメリット
PR のデメリット (トレードオフとかあれば)
仕様・動作説明
1. マウスホイールによるフォントサイズ変更の動作変更
現在は予め決められたサイズの中から選択していたものが、変更後は基準となるフォントサイズにズーム倍率を適用したサイズが使われます。
※経緯は #1491 (comment) を参照
2. ステータスバー倍率表示の仕様変更
倍率が小さい値の時にズーム操作した際でも倍率の変化が分かるよう、倍率が 5% 未満の時には小数第一位まで表示するようにします。
(現状の整数表示では例えば 1.25% から 1.5% に変化した時、共に 1% と表示されてしまう)
3. 「1」に伴うマクロコマンド
SetFontSize
の動作変更PR の影響範囲
SetFontSize
の振る舞いテスト内容
テスト1
基本的な拡大/縮小操作 (1~3) と、上限 (72pt) を超えたサイズが設定された状態からの動作 (4~6) を確認します。
テスト2
マウスホイール操作で実行されない処理をマクロ実行により確認します。
(フォントサイズはフォント設定ダイアログにて確認)
SetFontSize( 1, 0, 0 );
を実行する。SetFontSize( 1000, 0, 0 );
を実行する。SetFontSize( 0, -5, 0 );
を実行する。SetFontSize( 0, 5, 0 );
を実行する。SetFontSize( 100, 0, 0 );
を実行する。関連 issue, PR
#1491
#1490
#1485
https://sourceforge.net/p/sakura-editor/patchunicode/398/
参考資料
ズーム動作の参考にした主なアプリケーション:
GoogleChrome, VisualStudio2019, VisualStudioCode, EmEditor, Mery, Excel