X



トップページLinux
1002コメント351KB

今夜も Wine で乾杯! - 21本目 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
0001login:Penguin
垢版 |
2017/08/12(土) 21:18:15.22ID:tNr8ii2i
Linux上でWindowsのアプリを動作させるソフトウェア
Wineに関する情報交換スレ。

前スレ
今夜も Wine で乾杯! - 20本目
https://mao.2ch.net/test/read.cgi/linux/1455088008/

Wine本家
http://www.winehq.org/
http://wiki.winehq.org/

動作報告Wikiや過去ログなど
http://www.2chlinux.org/index.php?FrontPage

ここにパッチをうpするときはgzipやbzip2で圧縮した上で
base64などでエンコードしてください。おながいします。
動作報告は>>2のテンプレ使用を推奨。
0320login:Penguin
垢版 |
2018/01/22(月) 17:03:20.00ID:L3AK43SD
atomのAndroidでしか使えなさそうだな
0321login:Penguin
垢版 |
2018/01/22(月) 17:04:19.53ID:e6iLgqD7
Macに3.0入れたら起動がスゲー遅い・・・
rc6までは問題なかったのに。
0322login:Penguin
垢版 |
2018/01/22(月) 19:50:02.64ID:8gLiYv5f
ChromebookならIntel入ってるしAndroidアプリ対応だから使えるかな
0323login:Penguin
垢版 |
2018/01/22(月) 22:16:59.83ID:jDSqHtL9
そっか、Android用もあったか
Chromium系OS調べてみよっかな
0324login:Penguin
垢版 |
2018/01/22(月) 23:29:19.11ID:i9V8iudJ
arm版はqemuとかとの連携機能待ちだな。
0325login:Penguin
垢版 |
2018/01/23(火) 01:26:34.66ID:bIPDOfti
CrossOver for ChromeOSならGoogleアプリストアから入れられるよ
Pixelbookで重宝してる
0326login:Penguin
垢版 |
2018/01/25(木) 21:51:50.70ID:Ka0jz2eD
macOS 10.13.4のベータ版から32ビットアプリを無効にできるブートオプションが追加されたので
試したみたらWineも32ビットで起動できなくなったわ。64ビットアプリは問題ない。
これは予想はできたがショボーン状態に。
0327login:Penguin
垢版 |
2018/01/26(金) 07:13:19.17ID:3aSucPyA
~$ wine --version
wine-1.8.7 (Debian 1.8.7-2)
~$ winetricks --version
20170101
で,Internet Expolorer 8 のインストールがWebページの404エラーにより失敗しました。
https://web.archive.org/web/http://download.microsoft.com/download/WindowsInstaller/Install/2.0/NT45/EN-US/InstMsiW.exe
どなたか ie8 が配布されているサイトに心当たりはないでしょうか。
欲を言えば winetricks から操作できると嬉しいです。
0328login:Penguin
垢版 |
2018/01/26(金) 11:30:37.56ID:2+tR6Py2
IEって再配布許可されてたっけ?
0330login:Penguin
垢版 |
2018/01/29(月) 01:59:02.40ID:7OnATKIe
>>329
へ〜Jane Styleだとこうなるのか
ちょっと試してみるわ
0331login:Penguin
垢版 |
2018/02/03(土) 15:04:52.45ID:ELGdE4BJ
wine3.0にしたらadobe airがインストールできなくなった
air28だけでなく27も26もだめ
しばらく様子をみるしかないか
0332login:Penguin
垢版 |
2018/02/03(土) 15:28:55.73ID:Oo2vNWbE
qtもインストール出来なくなったね(´・ω・`)
未実装の関数がどうとか出てくる(´・ω・`)
0333login:Penguin
垢版 |
2018/02/03(土) 15:34:46.68ID:ELGdE4BJ
qtもなんだ
office2007とかすごく快適に使えてるからとりあえずはいいんだけど
郵便局のハガキデザインキットで暑中見舞い作りたいからそれまでにはなんとかしてほしいわ
0335login:Penguin
垢版 |
2018/02/03(土) 18:54:14.00ID:ELGdE4BJ
Developmentだからなあ
基本Stableを第一に考えてるので3.0が優先かな
まずは他に方法がないかいろいろ探してみようと思う
0336login:Penguin
垢版 |
2018/02/03(土) 19:23:04.64ID:ELGdE4BJ
>>331
自己解決
adobe airをwinetricksから試しにインストールしてみようと思ったら、ついこの前までadobe air2.0xと表記されてたものが今はadobe airとだけの表記に変わってた
これをインストールすると郵便局のハガキデザインキット2018もちゃんとインストールできた
wine uninstallerで見てみるとadobe airはちゃんと最新版28.0.0.127になってる
何のことはない、adobeのサイトからではなくwinetricksからだったらインストールできたというオチでした

https://i.imgur.com/21NbqT3.png
0337login:Penguin
垢版 |
2018/02/03(土) 19:23:15.46ID:ELGdE4BJ
>>331
自己解決
adobe airをwinetricksから試しにインストールしてみようと思ったら、ついこの前までadobe air2.0xと表記されてたものが今はadobe airとだけの表記に変わってた
これをインストールすると郵便局のハガキデザインキット2018もちゃんとインストールできた
wine uninstallerで見てみるとadobe airはちゃんと最新版28.0.0.127になってる
何のことはない、adobeのサイトからではなくwinetricksからだったらインストールできたというオチでした

https://i.imgur.com/21NbqT3.png
0338login:Penguin
垢版 |
2018/02/03(土) 19:23:43.89ID:2NmXANz5
>>331
自己解決
adobe airをwinetricksから試しにインストールしてみようと思ったら、ついこの前までadobe air2.0xと表記されてたものが今はadobe airとだけの表記に変わってた
これをインストールすると郵便局のハガキデザインキット2018もちゃんとインストールできた
wine uninstallerで見てみるとadobe airはちゃんと最新版28.0.0.127になってる
何のことはない、adobeのサイトからではなくwinetricksからだったらインストールできたというオチでした

https://i.imgur.com/21NbqT3.png
0339login:Penguin
垢版 |
2018/02/03(土) 19:24:33.28ID:ELGdE4BJ
あかん、3回も書き込まれてしまった
ごめん!
0341login:Penguin
垢版 |
2018/02/03(土) 19:44:26.86ID:ELGdE4BJ
お恥ずかしい
書き込みエラーが出たので試しにプロキシの設定の書き込みの方にもチェックを入れてみたところ、いきなり3回書き込みになってしまいました
0342login:Penguin
垢版 |
2018/02/03(土) 19:45:03.20ID:ELGdE4BJ
あ、ちなみにJDです
0343login:Penguin
垢版 |
2018/02/04(日) 04:35:38.16ID:otRrUZsg
女子大生なら仕方ない
0344login:Penguin
垢版 |
2018/02/04(日) 05:23:51.13ID:z31m/4Dh
JCなら許したがJDじゃ許さない
0347login:Penguin
垢版 |
2018/02/04(日) 13:01:53.45ID:rnnaq26n
ここまでDKやDC、DSすらなし
0349login:Penguin
垢版 |
2018/02/04(日) 15:28:23.45ID:GzGg78Tp
>>347
男子コリア人や男子中国人、男子シベリア人ですか
0350login:Penguin
垢版 |
2018/02/04(日) 16:30:27.26ID:uHhYoqNi
若いころは、JSがまさかここまで人気になるとは思わなかったな。







Javaに似せただけがとりえのスクリプトだと思ってたのに。
0351login:Penguin
垢版 |
2018/02/04(日) 16:36:15.18ID:fzkuBClS
いや全然Javaに似てなくないか
JSってかなり変わった言語だと思うけど
0352login:Penguin
垢版 |
2018/02/04(日) 16:42:19.83ID:uHhYoqNi
ごめん、名前の話ね。
JSリリース当初は、まさに全然違うのになぜLiveScriptからJavaScriptに変えたんだろう、と思ったんで。
0353login:Penguin
垢版 |
2018/02/04(日) 16:51:57.05ID:i7LhZGzA
あえて言おう、女子小学生と!
0354login:Penguin
垢版 |
2018/02/04(日) 17:03:59.12ID:Oj6myZBS
>>353
 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
 | おまわりさんコイツです! |
 \_  ________/
    ∨    ___
        ,r'つ@=,r'
        .| (-_- )
    (・ω・´)、/~У ̄|゙i
   ゚こ、  つ |=◎=∪
     しー-J (_(__)
0356login:Penguin
垢版 |
2018/02/04(日) 17:54:12.34ID:/nA3Cux+
>>350
大半が同じ感想のはず。
ajaxの手法が公開されてから一気に沸騰した。
0357login:Penguin
垢版 |
2018/02/04(日) 19:07:24.58ID:m27l3Bxn
JK=ジャパニーズ・コリアン ニダ!
0358login:Penguin
垢版 |
2018/02/04(日) 20:49:06.09ID:bJ63O2JQ
The Wine development release 3.1 is now available.

What's new in this release (see below for details):
- Kerberos authentication support.
- Window class redirection for Common Controls 6.
- Support for X11 ARGB visuals.
- DOSBox required for running DOS executables.
- Various bug fixes.
0359login:Penguin
垢版 |
2018/02/05(月) 02:08:15.28ID:O1Pwqk/s
とりあえず3.0stableで様子見決め込んでる
0360login:Penguin
垢版 |
2018/02/05(月) 19:21:01.05ID:Nv69ARvL
wine-staging2.21からwine-stable3.0にしたら
負荷とメモリ消費が素晴らしく改善されたから
開発版に手を出しかねてる

3.0で改善されたのか、stagingのものが足を引っ張ってたのか判別つかなくて
0361login:Penguin
垢版 |
2018/02/05(月) 20:00:31.17ID:EoTMajD6
chrootで試せばいい。
0362login:Penguin
垢版 |
2018/02/07(水) 03:18:13.01ID:EaQ8LavF
janeで書き込みてすと
0363login:Penguin
垢版 |
2018/02/07(水) 11:19:50.99ID:wf+3Oqyn
3.4のときは起動すらしなかったのにな
4.0になったら快調すぎる
0364login:Penguin
垢版 |
2018/02/07(水) 12:09:50.12ID:obK+oDJv
だったらいいんjane
0365login:Penguin
垢版 |
2018/02/07(水) 13:18:45.69ID:zs43/D2L
じゃあコンパイルすっかな
0366login:Penguin
垢版 |
2018/02/08(木) 05:29:46.28ID:awGx+2l1
結局のところwinehq-stableとwine-stableの差は何なのさ
0367login:Penguin
垢版 |
2018/02/09(金) 02:10:23.04ID:7CcbsDfN
winehq stableが公式サイトで公開されてるやつでwine stableは各ディストリから配布されてるやつだと思ってたけど違うのかな
0368login:Penguin
垢版 |
2018/02/09(金) 09:15:05.20ID:VkWK7O5C
wine-3.1-arm.apk
ExaGearより動くかなと期待して入れたんだけど、プログラムが一つも動かない…
まだ見てくれだけの未完成品ってこと?
0369login:Penguin
垢版 |
2018/02/09(金) 09:31:45.76ID:VkWK7O5C
あー Windows RT ARMのソフトしか動かないのかこれ
0372login:Penguin
垢版 |
2018/02/09(金) 11:54:48.43ID:uGFZgCuz
>>371
こいつMac関連のスレ狙ってる?別にそんな事ないのかな
0373login:Penguin
垢版 |
2018/02/10(土) 14:13:46.18ID:JX1fd7td
crossoverのベースになっているwineのバージョンってどこから調べたらいいの?
もう3.0ベースになってるのかな
0375login:Penguin
垢版 |
2018/02/10(土) 22:08:14.64ID:yxHJfpP2
ちがったかな
$ /opt/cxoffice/bin/wineserver --version
wine-2.8-8251-g8a457d1
0377login:Penguin
垢版 |
2018/02/15(木) 16:28:40.72ID:Adu/G50n
ubuntu studio 16.04LTS にwineを入れて、
JaneStyle を使える様にはなった。
書き込みテスト。
0378login:Penguin
垢版 |
2018/02/15(木) 22:20:39.99ID:feRq4tDS
>>368
まじかよ、Elonaさえ動けばいいのに。
0379login:Penguin
垢版 |
2018/02/15(木) 23:40:06.85ID:XEMKL93X
ARM機とかスマホしか持ってないわ
これから増えるんかね
0380login:Penguin
垢版 |
2018/02/16(金) 01:05:13.35ID:+Lqzmf2v
3DSとかもARMじゃないっけ
0381login:Penguin
垢版 |
2018/02/16(金) 08:01:15.26ID:TwuYLqrN
PS VitaもARMだしSwitchもARMだな
0382login:Penguin
垢版 |
2018/02/16(金) 08:03:04.95ID:8cWV/uet
最近のモバイル端末はだいたいARMだな
0383login:Penguin
垢版 |
2018/02/16(金) 08:03:51.98ID:8uACRqcY
ChromebookもARM機ある
0384login:Penguin
垢版 |
2018/02/16(金) 11:10:06.04ID:80vLUCQ5
WindowsもARM機が再登場する
0385login:Penguin
垢版 |
2018/02/16(金) 12:08:49.84ID:Q5rpQjEk
RTでコケて痛い目にあったからそれはないと思う。
ARMじゃない別のアーキテクチャで出す可能性はあるかも・・・
そしてまたコケるw
0386login:Penguin
垢版 |
2018/02/16(金) 12:24:21.66ID:Pj9ij8xw
>>385
いや出るから
HPとASUSがsnapdragon搭載Windows端末を発表済で春に発売予定
0387login:Penguin
垢版 |
2018/02/16(金) 13:41:56.11ID:QNuqSD5T
売れるとは限らないんだがなぁ
x86exeが何となくでも動くだけでいいのにな
0388login:Penguin
垢版 |
2018/02/16(金) 15:27:59.39ID:80vLUCQ5
x86が動くWin10のARMが出る
0389login:Penguin
垢版 |
2018/02/16(金) 16:20:26.93ID:1h3N4gI+
ちょっと調べてから否定しようよ
まあいいんだけどさ
0390login:Penguin
垢版 |
2018/02/16(金) 19:29:08.29ID:XuFK7/QF
古いけど、Ubuntu12.01 への Wine3.0のインストールに成功した。
git のソースから、./configure
途中、Font関連のファイルが見つからないエラーが出たので、
そのFontの「dev版」をapt-getでインストール。
その他、いくつかエラーが出るので、インストールしたりする。
その後、make, make install。
でインストールには成功するが、今まで動いていたWinアプリを起動してみると
日本語で文字化けしてる。wintricks font や regedit などをいじってみたが、
ダメだった。しかし、apt-get remove wineとしたあと、再度、
apt-get install wineとすると、なぜか、すぐに成功した。
wine --versionとすると、なぜか、3.1のままだった。
不思議な事に、文字化けはすっきり解決した状態で、Ver 3.1のWineが動いているらしい。
実際、Windowsとの互換性は明らかに向上した。
0391login:Penguin
垢版 |
2018/02/16(金) 19:30:26.21ID:XuFK7/QF
3.1じゃなく、3.0でした。スマソ
0392login:Penguin
垢版 |
2018/02/16(金) 19:37:33.92ID:XuFK7/QF
Wzエディタで、検索やGrepのダイアログのStatic Textの表示が途切れてしまう
不具合があったのが、Wine3.0では修正されている。これは使える。
0393login:Penguin
垢版 |
2018/02/16(金) 23:10:05.44ID:XuFK7/QF
透明色と MDI Window を組み合わせた自作WindowsアプリをWineで動くように修正中。
MDI Child Widnow のタイトルバーをドラッグすると遅くなるので原因を調査していた。
PreTranslateMessage() にくるメッセージを、自前でWindowに表示していたところ、
システム全体が実質的にハングアップした。マウスは動くが、タスクバーも反応しない。

ちなみに、透明色とMDI Windowの組み合わせが必ず遅くなるわけではない事は、
単純なテストプログラムを作って分かっている。ではなぜ、このプログラムに限っては
遅くなるのかが分からないので調査中だった。
0394login:Penguin
垢版 |
2018/02/17(土) 14:20:45.23ID:SLFwTllY
The Wine development release 3.2 is now available.

What's new in this release (see below for details):
- Separate implementation of USER controls for ComCtl32 v6.
- Multisample texture support in Direct3D.
- Support for HID gamepads.
- More event support in MSHTML.
- Obsolete DOS code removed.
- Various bug fixes.
0395login:Penguin
垢版 |
2018/02/17(土) 16:25:52.12ID:XDWn7PKv
廃れたDOSコードを削除、か
0396login:Penguin
垢版 |
2018/02/17(土) 16:26:50.92ID:KjUUJ1nJ
Wineは、Desktopの直接の子であるような、Win32における「OVERLAPED WINDOW」
的な物しか、XWindow の Window を作らないのだろうか??
Wineのソースをダウンロードして、FIXME(WARNでもいいはずだけど)で実行を調べてみた。
でも、良く分からない。ビルドとmake installに時間がかかるため、大変。
本当はもっと実験したいんだけど、時間的に難しくなる。

ソースを見ると、HWNDの親が Desktopの場合にだけ、XCreateWindowしているように
見える。これが、透明ウィンドウが遅くなる理由かもしれない。LinuxのNativeなWindowの
場合、実験した限り透明にしても速度が余り変わらない。でも、Wineがもし、自前で透明処理
をやっているとなれば遅くなるのも頷けるが。

1つのソースしか修正してないのに、ビルドが始まるまでに数十秒かかる。make installに
また数十秒。それに、wineserver -k などにも時間がかかるし。なんか、30年前のビルド環境
みたいだ。
0398login:Penguin
垢版 |
2018/02/17(土) 17:12:51.37ID:KjUUJ1nJ
>>397
今回に関しては、以下を読んで、git でやってます :
https://wiki.winehq.org/Git_Wine_Tutoria

home directory (~) にて、
$ git clone git://source.winehq.org/git/wine.git [ret]
とすると、wine ディレクトリが作成されるので、
$ cd wine
とします。そこで、
$ git config remote.origin.url [ret]
と入れて
git://source.winehq.org/git/wine.gi
と出れば、大体 DL 成功です。

~/wine/ にソースが DL されており、dlls に Win32 の DLL 群の実装があります。
例えば、user32 などのフォルダがあります。~/wine/server に wine の中枢の
プログラムが入っています。CreateWindow などは、dlls の方にありますが、
それを XWindowCreate に橋渡しするのは、server の方です。

オンラインで見たいなら、
https://source.winehq.org/git/wine.git/tree/HEAD:/dlls/user32
の win.c に CreateWindow 系のソースが入っており、

https://source.winehq.org/git/wine.git/blob/HEAD:/dlls/user32/win.c

で見られます。win.c の右の「raw」のボタンを押すと、ローカルの Wz エディタ
などでも見られます。
0399login:Penguin
垢版 |
2018/02/17(土) 17:16:25.31ID:KjUUJ1nJ
5ch からのアクセスは禁止されているらしいので、アドレスバーに上記の URL を
コピーしてアクセスしてください。

なお、make が遅い件は、make -j 4 などとして、マルチコア動作するとだいぶ良くなりました。
ただし、その場合、make にバグがあるので精密な神経の持ち主には、ストレスがたまります。
0400login:Penguin
垢版 |
2018/02/17(土) 17:19:14.92ID:KjUUJ1nJ
動きをトレースしたい場合、TRACE はデフォルトではメッセージが出ず、使い方を調べて
ないので、

FIXME( "Yamada Taro, CreateWindowEx, hWND=%08X", hWND );

みたいにやってます。
0401login:Penguin
垢版 |
2018/02/17(土) 17:23:11.12ID:KjUUJ1nJ
makeしたい人は、~/wine にて、

$ ./confiugre
$ make -j 4 2>build.log
$ make -j 4 install 2>inst.log
$ wineserver -k

で行けます。ここで、wz エディタを起動してみます。文字化けするようでしたら、

$ apt-get remove wine
$ apt-get install wine

で直ると思います。これは、一度やれば Ok のようです。
0402login:Penguin
垢版 |
2018/02/17(土) 17:40:09.90ID:KjUUJ1nJ
 call set_window_pos()
--> wine/dlls/user32/winpos.c
--> X11DRV_WindowPosChanging()
--> X11DRV_create_win_data()
--> dlls/winex11.drv/window.c :
  static void create_whole_window( struct x11drv_win_data *data )
--->
data->whole_window = XCreateWindow(
       data->display, root_window, pos.x, pos.y,
       cx, cy, 0, data->vis.depth, InputOutput,
       data->vis.visual, mask, &attr );

という流れのようです。
0403login:Penguin
垢版 |
2018/02/17(土) 17:41:22.28ID:KjUUJ1nJ
以下を見ると、親が、DesktopWindow の時のみ、create_whole_window() が呼び出されている
らしいことが分かります。

static struct x11drv_win_data *X11DRV_create_win_data( HWND hwnd, const RECT *window_rect,
                            const RECT *client_rect ) {
  Display *display;
  struct x11drv_win_data *data;
  HWND parent;
  if (!(parent = GetAncestor( hwnd, GA_PARENT ))) return NULL; /* desktop */
  /* don't create win data for HWND_MESSAGE windows */
  if (parent != GetDesktopWindow() && !GetAncestor( parent, GA_PARENT )) return NULL;
  if (GetWindowThreadProcessId( hwnd, NULL ) != GetCurrentThreadId()) return NULL;
  display = thread_init_display();
  init_clip_window(); /* make sure the clip window is initialized in this thread */
  if (!(data = alloc_win_data( display, hwnd ))) return NULL;
  data->whole_rect = data->window_rect = *window_rect;
  data->client_rect = *client_rect;
  if (parent == GetDesktopWindow()){
    create_whole_window( data );
    TRACE( "win %p/%lx window %s whole %s client %s\n",
        hwnd, data->whole_window, wine_dbgstr_rect( &data->window_rect ),
        wine_dbgstr_rect( &data->whole_rect ), wine_dbgstr_rect( &data->client_rect ));
  }
  return data;
}
0404login:Penguin
垢版 |
2018/02/17(土) 17:42:23.86ID:KjUUJ1nJ
>>402 の訂正:

CreateWindowExW()
--->
WIN_CreateWindowEx()
 call set_window_pos()
--> wine/dlls/user32/winpos.c
--> X11DRV_WindowPosChanging()
--> X11DRV_create_win_data()
--> dlls/winex11.drv/window.c :
  static void create_whole_window( struct x11drv_win_data *data )
--->
data->whole_window = XCreateWindow(
       data->display, root_window, pos.x, pos.y,
       cx, cy, 0, data->vis.depth, InputOutput,
       data->vis.visual, mask, &attr );
0405login:Penguin
垢版 |
2018/02/17(土) 18:08:08.76ID:KjUUJ1nJ
ちなみに、
1. ~/.wine
2. ~/wine

は別物です。1は、binary をインストールした際に出来るデフォルトのフォルダ
ですよね。2. は、git からソースを持ってきた時にできるディレクトリです。

まずは、バイナリをインストールして動作してから、ソースを持ってきてください。
0406login:Penguin
垢版 |
2018/02/17(土) 18:27:32.24ID:1JDlaACg
半透明化はWin32API側でどうやっているの? Linuxネイティブなアプリでは?

SetLayeredWindowAttributesであれば、user32.dllからUSER_Driverを介してwinex11.drvが呼ばれて、
window.c内のsync_window_opacityで_NET_WM_WINDOW_OPACITYにα値を設定している様子が見て取れる
ttps://github.com/wine-mirror/wine/blob/wine-3.2/dlls/winex11.drv/window.c#L435

TRACEで表示しているメッセージを確認するには環境変数WINEDEBUGを使って、
WINEDEBUG=win,x11 みたいにカンマ区切りで指定する。細かくは
ttps://wiki.winehq.org/Wine_Developer%27s_Guide/Debug_Logging に書いてある。

あとは、dlls配下の各ディレクトリでもmake && sudo make instlallできるので
特定のDLLファイルしか変更しないのであれば、この方法でビルド時間を短縮できるぞ。
0407login:Penguin
垢版 |
2018/02/17(土) 18:42:48.23ID:cvAP0C15
デバッグ大変だな。めんどくさそう。
仕事じゃないと俺はやらないだろうな。
0408login:Penguin
垢版 |
2018/02/17(土) 19:41:54.60ID:J9G7l4mf
自分はimm32関連(日本語入力)APIを修正しようとeclipceでコンパイル環境作ったはいいけど
ネイティブのウィンドウマネージャ関連の知識不足でソースの意味がわからず寝かせてある・・・
0409login:Penguin
垢版 |
2018/02/17(土) 19:54:02.08ID:Tf7u8zkg
>>406
Linux Nativeアプリの場合、32BIT COLOR にすると、A,R,G,B の 4つの値を
ドットの「色」として指定できます。Aがα値です。このようなことは、Windows
では出来ないと思います。Windowsの場合、CreateWindowExのdwExStyle に
WS_EX_LAYEREDを指定すると透明、半透明が扱えるようになります。

1.完全に「透明になる色」を24BIT値で1色指定できます。この色で描いたドットは、
 デスクトップまで透けて見えるようになります。見た目だけではなく、Windowメッ
 セージも下のWindowに伝達されてしまうことになりますが。

2.ドットごとではなく、Window全体のα値を1つ(1BYTE)だけ指定できます。
 ドットごとでは無いので、全体的に透明度が決まってしまいます。

1と2は完全に別の概念です。


LinuxのARGB値は、ドット毎に指定できるので、Windowsの機能を包含していると
言えます。逆に Windowsでは、同じ事は出来ないはずです。
0410login:Penguin
垢版 |
2018/02/17(土) 19:57:46.46ID:Tf7u8zkg
/wine/dlls/winex11.drv/x11drv.h
に次のような構造体があり、この whole_window というのが大事らしい:
/* x11drv private window data */
struct x11drv_win_data {
Display *display; /* display connection for the thread owning the window */
XVisualInfo vis; /* X visual used by this window */
Colormap colormap; /* colormap if non-default visual */
HWND hwnd; /* hwnd that this private data belongs to */
Window whole_window; /* X window for the complete window */
Window client_window; /* X window for the client area */
RECT window_rect; /* USER window rectangle relative to parent */
RECT whole_rect; /* X window rectangle for the whole window relative to parent */
RECT client_rect; /* client area relative to parent */
XIC xic; /* X input context */
BOOL managed : 1; /* is window managed? */
BOOL mapped : 1; /* is window mapped? (in either normal or iconic state) */
BOOL iconic : 1; /* is window in iconic state? */
BOOL embedded : 1; /* is window an XEMBED client? */
BOOL shaped : 1; /* is window using a custom region shape? */
BOOL layered : 1; /* is window layered and with valid attributes? */
BOOL use_alpha : 1; /* does window use an alpha channel? */
int wm_state; /* current value of the WM_STATE property */
DWORD net_wm_state; /* bit mask of active x11drv_net_wm_state values */
Window embedder; /* window id of embedder */
unsigned long configure_serial; /* serial number of last configure request */
struct window_surface *surface;
Pixmap icon_pixmap;
Pixmap icon_mask;
unsigned long *icon_bits;
unsigned int icon_size;
};
0411login:Penguin
垢版 |
2018/02/17(土) 20:00:42.49ID:Tf7u8zkg
>>406
後半の二つ。自分に取っては、かなり貴重な情報です。助かります。
0412login:Penguin
垢版 |
2018/02/17(土) 20:11:22.91ID:Tf7u8zkg
>>406
XWindow で透明化。これはやってみて実際に出来ました:
https://stackoverflow.com/questions/39906128/
how-to-create-semi-transparent-white-window-in-xlib

子ウィンドウを入れてみても、ちゃんと出来ました。

ただし、子ウィンドウには、Win32のような、タイトルバーは付ききませんでした。
XWindow に詳しい人によれば、XWindow の Window Manager は、
Win32 の MDI のような事は、サポートしていないらしいです。絶対か
どうかは分かりませんが。

実験してみると、子ウィンドウも、親ウィンドウも、ABI で、XMoveWindow
でスムーズに動かせました。

ただし、Wineの場合、子ウィンドウに直線や文字が書かれていて、かつ、背景が透明な場合、
スムーズには動かせません。
0413login:Penguin
垢版 |
2018/02/17(土) 21:31:43.98ID:cvAP0C15
Win32APIだけじゃなく、X Windowについても知っておかないといけないのか
面倒臭っ・・・

普段使ってるだけでずいぶん楽してたんだな。
0414login:Penguin
垢版 |
2018/02/17(土) 22:08:41.04ID:eqmjcJnH
面白そうだけど時間ねえな……
>>410を見る限りだとuse_alphaは持ってるけどAlpha値自体はもうX11の構造体にいれてるのかな?
まあ遅くなる理由とか検討つかんけど……
0415396
垢版 |
2018/02/18(日) 01:13:22.20ID:DznsC7ZZ
WINEにおいて、

1. MDIのCMDIChildWndのCViewのCLIENT領域全体(子ウィンドウの
  中全体と言ってもよい) に >>409の1.の色を塗って、完全透明
  にしている時は、CMDIChildWndのタイトルバー(子ウィンドウの
  タイトルバー)をドラッグしても高速に動かせる。

2. 1のCViewの中に、pDC->LineTo()で直線を一本描いた状態にしてから
  同じ事をしようとすると、とても遅くなる。

3. 2.は、直線の代わりに pDC->TextOut() で文字を描いても同様に遅く
  なる。

4. 推定では、Wineは、Win32のCreateWindow系で、Parent Window が
  Desktop 以外の場合、XWindow の Window を使わず、自前で
  Parent Window の中に画像を合成して子Windowを模倣している。

5. 4.の様にしている理由は、推定だと Window Manager の種類による
  挙動の違いに患わされずに安定して Emulation するためかも知れ
  ない。

6. その結果、XWindow の ARGB 値による高速な透明処理を利用できな
  くなり、低速になる。

7. しかし、なるべく低速にならないようにするため、少なくとも、
  子ウィンドウの中全体が完全透明な場合については、対策が取ら
  れており、高速にドラッグできるようになっている。

8. その結果、2, 3 のような条件の時のみ遅くなると推定される。
0416login:Penguin
垢版 |
2018/02/18(日) 01:24:45.49ID:smHwezpH
推定じゃなくて直接聞いたら?
0417login:Penguin
垢版 |
2018/02/18(日) 01:56:23.18ID:HH6qVqdM
>>416
どうやって?
0418406
垢版 |
2018/02/18(日) 02:29:31.78ID:dARugMLm
>>415
すまん、ウィンドウの半透明化処理(LWA_ALPHA)と勘違いしてた。
ウィンドウ領域内の特定色で書いた箇所を透過させる場合(LWA_COLORKEY)ね。

ソースを調べたら、WineではX11のShape Extensionを使ってウィンドウの形状を変更することで、
「見た目だけではなく、Windowメッセージも下のWindowに伝達すること」を実現しているようだ。

具体的にはupdate_surface_region()で1ピクセルごとにピクセル値を比較して、
XShapeCombineRectanglesに指定する矩形領域を作っている。
ttps://github.com/wine-mirror/wine/blob/2936f3f9bb9dc01c595498a821d6adb6775b62cc/dlls/winex11.drv/bitblt.c#L1616

415の2.,3.の条件だと遅くなるとすると、ピクセル値を比較する処理は1.と同じなので、
矩形が大量になったときに、X側で描画性能が低下するのではないかと思うぞ。

StackOverflowの記事はShape Extensionを使っていないので筋違いだ。
0419login:Penguin
垢版 |
2018/02/18(日) 04:20:47.62ID:HH6qVqdM
>>418
なるほど。

1つ質問です。

はっきりとは書いてなかったのですが、>>415の遅くなる条件であるところの 2,3 の場合
においても、CMainFrame、つまり、アプリケーション全体の Main の Window のタイトルバーを
ドラッグした場合は、遅くなりません。いたって高速にドラッグできます。

>>418 が正しいなら、どうして、X は、この場合だけは速く、CMDIChildWnd の場合だけは
遅く動作するのでしょうか???
0420login:Penguin
垢版 |
2018/02/18(日) 04:57:21.33ID:HH6qVqdM
↓の構造体の dc_rect の矩形が子ウィンドウを模倣するために使われているかも知れません:
/* X physical device */
typedef struct {
  struct gdi_physdev dev;
  GC      gc;     /* X Window GC */
  Drawable   drawable;
  RECT     dc_rect;    /* DC rectangle relative to drawable */
  RECT     *bounds;    /* Graphics bounds */
  HRGN     region;    /* Device region (visible region & clip region) */
  X_PHYSPEN   pen;
  X_PHYSBRUSH  brush;
  int      depth;    /* bit depth of the DC */
  ColorShifts *color_shifts; /* color shifts of the DC */
  int      exposures;  /* count of graphics exposures operations */
} X11DRV_PDEVICE;

BOOL X11DRV_LineTo( PHYSDEV dev, INT x, INT y ) {
  X11DRV_PDEVICE *physDev = get_x11drv_dev( dev );
  POINT pt[2];
  GetCurrentPositionEx( dev->hdc, &pt[0] );
  pt[1].x = x;
  pt[1].y = y;
  LPtoDP( dev->hdc, pt, 2 );
  add_pen_device_bounds( physDev, pt, 2 );
  if (X11DRV_SetupGCForPen( physDev ))
    XDrawLine(gdi_display, physDev->drawable, physDev->gc,
         physDev->dc_rect.left + pt[0].x, physDev->dc_rect.top + pt[0].y,
         physDev->dc_rect.left + pt[1].x, physDev->dc_rect.top + pt[1].y );
  return TRUE;
}
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況