カーソルの色がおかしくなりました

  1. Meryを3.3.4から3.3.6にアップデートしたら、カーソルの色がおかしくなりました
    調べた結果、「カーソル(IME有効)」時の色が背景色に影響を受けるようになったと思われます
    「カーソルのある行」を標準にすると今までと同じように表示されますが、カスタムで変更していると、カーソルの色が指定した色と違う色で表示されてしまいます

    windows10 64bit

     |  かずら  |  返信
  2. ご報告ありがとうございます。

    これは 3.3.6 からというわけではなく従来からの仕様ですね。Windows のキャレットの仕様となっており、残念ながら Mery 側での対応は難しいです。

    ちなみに同様の機能があるエディターですと、秀〇エディタさんや E〇Editor さんでもキャレットの色とカーソル行の背景色を同時に設定するとキャレットの色はおかしくなってしまいます。

    これは Windows のキャレットが自動的に色を決定してしまう仕様となっているため発生する問題で、Mery では一応、[通常] の [背景色] から Windows の仕様を逆算して、できるだけ設定した色に近い色を適用するような仕組みを組み込んでいます。

    しかしながら、[カーソルのある行] の [背景色] を指定した場合は、Windows の仕様と競合してしまうため、設定したとおりの色にはなりません。

    キャレットの色を変更する場合は [カーソルのある行] の [背景色] ではなく、下線を設定するなどでご対応いただければと思います。

     |  Kuro  |  返信
  3. > これは 3.3.6 からというわけではなく従来からの仕様ですね。Windows のキャレットの仕様となっており、残念ながら Mery 側での対応は難しいです。

    そうなんですか?
    ですが、3.3.4にダウングレードしたところ、色がおかしくならずに設定どおりの色になっています
    3.3.5は試していませんが、素人目には3.3.4以前と3.3.6では動作が違うように思えます

     |  かずら  |  返信
  4. そうですね、これはキャレットの色が変わったわけではなく [カーソルのある行] の [背景色] が変わったためだと思います。

    Ver 3.3.4 までは [カーソルのある行] の [背景色] は [通常] の [背景色] に半透明で重ねて描画していたため、設定した色とは若干異なる色で描画されていました。

    この仕様について、指定したとおりの色にならないというお問い合わせが多かったため、Ver 3.3.5 からその仕様を廃止し、[カーソルのある行] の [背景色] は設定した色をそのまま描画するようにしました。(体感的にはちょっと濃くなった感じだと思います)

    変更ログでは以下の項目に該当します。

    3.3.5 (2022-03-03)
    ・背景に画像が設定されていない場合は [カーソルのある行] の [背景色] を半透明描画しないようにした ([偶数行] も同様)

    この仕様変更にともない、3.3.4 と 3.3.5 以降のバージョンで [カーソルのある行] の [背景色] を同じ設定にしても、描画される背景色は異なるので、その上に描画されるキャレットの色が変わったように見えたのだと思います。

    [カーソルのある行] の [背景色] の半透明描画を廃止したので 3.3.4 のような色にするためには気持ち薄めの色を設定してみてください。

     |  Kuro  |  返信
  5. > この仕様変更にともない、3.3.4 と 3.3.5 以降のバージョンで [カーソルのある行] の [背景色] を同じ設定にしても、描画される背景色は異なるので、その上に描画されるキャレットの色が変わったように見えたのだと思います。

    なるほど
    それでカーソル行の背景色もなんか違和感があったんですね

    > [カーソルのある行] の [背景色] の半透明描画を廃止したので 3.3.4 のような色にするためには気持ち薄めの色を設定してみてください。

    いえ、薄めに設定とかそういうことで解決するような問題ではありません
    オレンジに設定していますが、黄緑色に変わってしまいます
    確かに薄め(白っぽい?)に設定すれば、目立つようにはなりましたが、色そのものが変わってしまっています
    これってあっちを立てればこっちが立たずってヤツでしょうか
    自分としては、こっちを立ててほしいものです

     |  かずら  |  返信
  6. > いえ、薄めに設定とかそういうことで解決するような問題ではありません
    > オレンジに設定していますが、黄緑色に変わってしまいます

    キャレットの色の計算方法は 3.3.4 から変更していないので、[カーソルのある行] の [背景色] の色を薄くすることで 3.3.4 と同じ色にできると思います。

    つまり、3.3.4 だと [カーソルのある行] の [背景色] の色が設定した色よりも薄く描画されていたので、キャレットの色が変わっていたことに気づきにくかった、というだけで、3.3.4 でもキャレットの色は変わっちゃってます。

    > これってあっちを立てればこっちが立たずってヤツでしょうか
    > 自分としては、こっちを立ててほしいものです

    どちらかを優先しているわけではなく、Windows の仕様上、キャレットの色を OS が勝手に決めてしまうことが問題なので、3.3.4 も 3.3.6 も同様、根本的な問題を抱えています。

    Windows がキャレットの色を決める仕様として、背景色が薄ければキャレットの色が変わってしまう影響を少なく抑えることができる、というわけです。

    根本的な問題の改善は難しいと思いますが、できるだけキャレットの色の変化を少なく抑える対策は考えてみたいと思います。

     |  Kuro  |  返信
  7. > つまり、3.3.4 だと [カーソルのある行] の [背景色] の色が設定した色よりも薄く描画されていたので、キャレットの色が変わっていたことに気づきにくかった、というだけで、3.3.4 でもキャレットの色は変わっちゃってます。

    なるほど
    変わっていたとしても、気づけないほどの変色だったってことですね
    でも3.3.6では前回報告したとおり、キャレットの色そのものがオレンジ系から緑系に変色してしまっています
    なので原因はなんとなく理解できたけど、納得はできないってヤツですw
    つまり変色を想定して違う色を設定し、望みの色にしようってことですね

     |  かずら  |  返信
  8. 連投すみません
    色々と試した結果、ちょっと理解不能な現象に見舞われました
    「カーソルのある行」の色をカスタムー基本色の(5,5)の灰色に設定
    「カーソル(IME有効)」の色をカスタムー基本色の(1,3)のオレンジ色に設定
    そうすると、ほぼ視認不可能な緑系の色に変色します
    そこから明るさを120から増やしていくと、緑系の色で濃くなっていきます
    逆に明るさを119に設定すると、ちょっと濃いですがほぼ今までどおりオレンジ系の色に急変します
    なんなんでしょうね
    windowsって、意味不明……

     |  かずら  |  返信
  9. > つまり変色を想定して違う色を設定し、望みの色にしようってことですね

    それができれば良いのですが、そうすると今度は別の問題がでてきます。

    というのも、範囲選択をしたときは [カーソルのある行] のハイライト表示が解除されるので、今度は [通常] の [背景色] との重ね合わせになり、望みの色ではなくなってしまいます。

    > なんなんでしょうね
    > windowsって、意味不明……

    Microsoft 公式の情報ではありませんが、Windows のキャレットは、キャレットが表示される位置にもともと表示されている内容に指定色を RGB 表現で XOR した色、という情報は見つかりました。

    簡単に言うと、背景色が白に近いほど指定した色に近い色になり、背景色が黒に近いほど指定した色から遠い色になってしまう感じですね。

    つまり、背景色が真っ白だと指定した色と同じになり、背景色が真っ黒だと指定した色と真逆の色になります。(背景色がグレーの場合は、指定した色とその真逆の色の中間ということでグレーっぽくなるのだと思います)

    対策として、背景からキャレットの色をリアルタイムに逆算して都度、キャレットを作り直すという力技を試してみたのですが、通常時は良いものの、マルチカーソルで複数のキャレットを計算するとパフォーマンスが落ちてしまうため、実用には少々厳しい感じでした。

    現状ですと、気休めぐらいにしかなりませんが、[カーソルのある行] の [背景色] ではなく、[行番号 (選択行)] の [背景色] を指定すると行番号の部分にだけ色がつくので、キャレットの変色を防ぎつつカーソルのある行が少し分かりやすくなると思います。

    それか、WheelPLUS というソフト (無料) を使えば IME 有効時のキャレットの色を変更できるようです。

    【参考リンク】
    https://forest.watch.impress.co.jp/library/software/wheelplus/

    WheelPLUS の開発者様によると、Windows のキャレットそのものの色を変更しているわけではなく、そのように見せかけているだけとのことで、Windows のキャレットのような色の変化が発生しないっぽいです。(その代わり、Windows のキャレットとは若干挙動が異なるようです)

    ところで、秀〇エディタさんはこの問題の対策として、色の設定に [キャレット (IME ON 時)] の他に [カーソル行 (IME ON 時)] という項目を用意しているようで、キャレットの色が見づらいなら IME 有効時にカーソル行自体の色を変えればいいじゃない。という面白いアイデアで対応されているようです。

    そういった対応で良ければ Mery でも実装できるかもしれないですが…。

     |  Kuro  |  返信
  10. > 現状ですと、気休めぐらいにしかなりませんが、[カーソルのある行] の [背景色] ではなく、[行番号 (選択行)] の [背景色] を指定すると行番号の部分にだけ色がつくので、キャレットの変色を防ぎつつカーソルのある行が少し分かりやすくなると思います。

    なるほど
    確かに派手さは無くなりましたが、それでも許容範囲です
    ありがとうございました

     |  かずら  |  返信
スポンサーリンク