1 –¼‘OFlogin:Penguin mailto:sage [2017/08/12(“y) 21:18:15.22 ID:tNr8ii2i.net] Linuxã‚ÅWindows‚̃AƒvƒŠ‚ð“®ì‚³‚¹‚éƒ\ƒtƒgƒEƒFƒA Wine‚ÉŠÖ‚·‚éî•ñŒðŠ·ƒXƒŒB ‘OƒXƒŒ ¡–é‚à Wine ‚ÅŠ£”t! - 20–{–Ú https://mao.2ch.net/test/read.cgi/linux/1455088008/ Wine–{‰Æ www.winehq.org/ wiki.winehq.org/ “®ì•ñWiki‚â‰ß‹ŽƒƒO‚È‚Ç www.2chlinux.org/index.php?FrontPage ‚±‚±‚Ƀpƒbƒ`‚ð‚¤‚‚·‚邯‚«‚Ígzip‚âbzip2‚ň³k‚µ‚½ã‚Å base64‚ȂǂŃGƒ“ƒR[ƒh‚µ‚Ä‚‚¾‚³‚¢B‚¨‚È‚ª‚¢‚µ‚Ü‚·B “®ì•ñ‚Í>>2 ‚̃eƒ“ƒvƒŒŽg—p‚ð„§B
409 –¼‘OFlogin:Penguin mailto:sage [2018/02/17(“y) 17:12:51.37 ID:KjUUJ1nJ.net] >>398 ¡‰ñ‚ÉŠÖ‚µ‚Ä‚ÍAˆÈ‰º‚ð“Ç‚ñ‚ÅAgit ‚Å‚â‚Á‚Ă܂· : https://wiki.winehq.org/Git_Wine_Tutoria home directory (~) ‚É‚ÄA $ git clone git://source.winehq.org/git/wine.git [ret] ‚Æ‚·‚邯Awine ƒfƒBƒŒƒNƒgƒŠ‚ªì¬‚³‚ê‚é‚Ì‚ÅA $ cd wine ‚Æ‚µ‚Ü‚·B‚»‚±‚ÅA $ git config remote.origin.url [ret] ‚Æ“ü‚ê‚Ä git://source.winehq.org/git/wine.gi ‚Æo‚ê‚ÎA‘å‘
410 –¼‘OFÌ DL ¬Œ÷‚Å‚·B ~/wine/ ‚Ƀ\[ƒX‚ª DL ‚³‚ê‚Ä‚¨‚èAdlls ‚É Win32 ‚Ì DLL ŒQ‚ÌŽÀ‘•‚ª‚ ‚è‚Ü‚·B —Ⴆ‚ÎAuser32 ‚Ȃǂ̃tƒHƒ‹ƒ_‚ª‚ ‚è‚Ü‚·B~/wine/server ‚É wine ‚Ì’†•‚Ì ƒvƒƒOƒ‰ƒ€‚ª“ü‚Á‚Ä‚¢‚Ü‚·BCreateWindow ‚ȂǂÍAdlls ‚Ì•û‚É‚ ‚è‚Ü‚·‚ªA ‚»‚ê‚ð XWindowCreate ‚É‹´“n‚µ‚·‚é‚Ì‚ÍAserver ‚Ì•û‚Å‚·B ƒIƒ“ƒ‰ƒCƒ“‚ÅŒ©‚½‚¢‚È‚çA https://source.winehq.org/git/wine.git/tree/HEAD:/dlls/user32 ‚Ì win.c ‚É CreateWindow Œn‚̃\[ƒX‚ª“ü‚Á‚Ä‚¨‚èA https://source.winehq.org/git/wine.git/blob/HEAD:/dlls/user32/win.c ‚ÅŒ©‚ç‚ê‚Ü‚·Bwin.c ‚̉E‚Ìurawv‚̃{ƒ^ƒ“‚ð‰Ÿ‚·‚ÆAƒ[ƒJƒ‹‚Ì Wz ƒGƒfƒBƒ^ ‚È‚Ç‚Å‚àŒ©‚ç‚ê‚Ü‚·B [] [‚±‚±‰ó‚ê‚Ă܂·]
411 –¼‘OFlogin:Penguin [2018/02/17(“y) 17:16:25.31 ID:KjUUJ1nJ.net] 5ch ‚©‚ç‚̃AƒNƒZƒX‚͋֎~‚³‚ê‚Ä‚¢‚é‚炵‚¢‚Ì‚ÅAƒAƒhƒŒƒXƒo[‚Éã‹L‚Ì URL ‚ð ƒRƒs[‚µ‚ăAƒNƒZƒX‚µ‚Ä‚‚¾‚³‚¢B ‚È‚¨Amake ‚ª’x‚¢Œ‚ÍAmake -j 4 ‚ȂǂƂµ‚ÄAƒ}ƒ‹ƒ`ƒRƒA“®ì‚·‚邯‚¾‚¢‚Ô—Ç‚‚È‚è‚Ü‚µ‚½B ‚½‚¾‚µA‚»‚Ìê‡Amake ‚ɃoƒO‚ª‚ ‚é‚̂Ÿ–§‚È_Œo‚ÌŽ‚¿Žå‚É‚ÍAƒXƒgƒŒƒX‚ª‚½‚Ü‚è‚Ü‚·B
412 –¼‘OFlogin:Penguin mailto:sage [2018/02/17(“y) 17:19:14.92 ID:KjUUJ1nJ.net] “®‚«‚ðƒgƒŒ[ƒX‚µ‚½‚¢ê‡ATRACE ‚̓fƒtƒHƒ‹ƒg‚ł̓ƒbƒZ[ƒW‚ªo‚¸AŽg‚¢•û‚ð’²‚×‚Ä ‚È‚¢‚Ì‚ÅA FIXME( "Yamada Taro, CreateWindowEx, hWND=%08X", hWND ); ‚Ý‚½‚¢‚É‚â‚Á‚Ă܂·B
413 –¼‘OFlogin:Penguin mailto:sage [2018/02/17(“y) 17:23:11.12 ID:KjUUJ1nJ.net] make‚µ‚½‚¢l‚ÍA~/wine ‚É‚ÄA $ ./confiugre $ make -j 4 2>build.log $ make -j 4 install 2>inst.log $ wineserver -k ‚Ås‚¯‚Ü‚·B‚±‚±‚ÅAwz ƒGƒfƒBƒ^‚ð‹N“®‚µ‚Ă݂܂·B•¶Žš‰»‚¯‚·‚邿‚¤‚Å‚µ‚½‚çA $ apt-get remove wine $ apt-get install wine ‚Å’¼‚邯Žv‚¢‚Ü‚·B‚±‚ê‚ÍAˆê“x‚â‚ê‚Î Ok ‚̂悤‚Å‚·B
414 –¼‘OFlogin:Penguin mailto:sage [2018/02/17(“y) 17:40:09.90 ID:KjUUJ1nJ.net] @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 ); ‚Æ‚¢‚¤—¬‚ê‚̂悤‚Å‚·B
415 –¼‘OFlogin:Penguin mailto:sage [2018/02/17(“y) 17:41:22.28 ID:KjUUJ1nJ.net] ˆÈ‰º‚ðŒ©‚é‚ÆAe‚ªADesktopWindow ‚ÌŽž‚Ì‚ÝAcreate_whole_window() ‚ªŒÄ‚Ño‚³‚ê‚Ä‚¢‚é ‚ç‚µ‚¢‚±‚Æ‚ª•ª‚©‚è‚Ü‚·B 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; }
416 –¼‘OFlogin:Penguin mailto:sage [2018/02/17(“y) 17:42:23.86 ID:KjUUJ1nJ.net] >>403 ‚Ì’ù³F 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 );
417 –¼‘OFlogin:Penguin mailto:sage [2018/02/17(“y) 18:08:08.76 ID:KjUUJ1nJ.net] ‚¿‚Ȃ݂ÉA 1. ~/.wine 2. ~/wine ‚͕ʕ¨‚Å‚·B1‚ÍAbinary ‚ðƒCƒ“ƒXƒg[ƒ‹‚µ‚½Û‚Éo—ˆ‚éƒfƒtƒHƒ‹ƒg‚̃tƒHƒ‹ƒ_ ‚Å‚·‚æ‚ËB2. ‚ÍAgit ‚©‚çƒ\[ƒX‚ðŽ‚Á‚Ä‚«‚½Žž‚ɂł«‚éƒfƒBƒŒƒNƒgƒŠ‚Å‚·B ‚Ü‚¸‚ÍAƒoƒCƒiƒŠ‚ðƒCƒ“ƒXƒg[ƒ‹‚µ‚Ä“®ì‚µ‚Ä‚©‚çAƒ\[ƒX‚ðŽ‚Á‚Ä‚«‚Ä‚‚¾‚³‚¢B
418 –¼‘OFlogin:Penguin mailto:sage [2018/02/17(“y) 18:27:32.24 ID:1JDlaACg.net] ”¼“§–¾‰»‚ÍWin32API‘¤‚łǂ¤‚â‚Á‚Ä‚¢‚é‚Ì? LinuxƒlƒCƒeƒBƒu‚ȃAƒvƒŠ‚Å‚Í? SetLayeredWindowAttributes‚Å‚ ‚ê‚ÎAuser32.dll‚©‚çUSER_Driver‚ð‰î‚µ‚Äwinex11.drv‚ªŒÄ‚΂ê‚ÄA window.c“à‚Ìsync_window_opacity‚Å_NET_WM_WINDOW_OPACITY‚Ƀ¿’l‚ðݒ肵‚Ä‚¢‚é—lŽq‚ªŒ©‚ÄŽæ‚ê‚é ttps://github.com/wine-mirror/wine/blob/wine-3.2/dlls/winex11.drv/window.c#L435 TRACE‚Å•\ަ‚µ‚Ä‚¢‚郃bƒZ[ƒW‚ðŠm”F‚·‚é‚ɂ͊‹«•Ï”WINEDEBUG‚ðŽg‚Á‚ÄA WINEDEBUG=win,x11 ‚Ý‚½‚¢‚ɃJƒ“ƒ}‹æØ‚è‚ÅŽw’è‚·‚éBׂ©‚‚Í ttps://wiki.winehq.org/Wine_Developer%27s_Guide/Debug_Logging ‚É‘‚¢‚Ä‚ ‚éB ‚ ‚Æ‚ÍAdlls”z‰º‚ÌŠeƒfƒBƒŒƒNƒgƒŠ‚Å‚àmake && sudo make instlall‚Å‚«‚é‚̂Š“Á’è‚ÌDLLƒtƒ@ƒCƒ‹‚µ‚©•ÏX‚µ‚È‚¢‚̂ł ‚ê‚ÎA‚±‚Ì•û–@‚Ńrƒ‹ƒhŽžŠÔ‚ð’Zk‚Å‚«‚邼B
419 –¼‘OFlogin:Penguin mailto:sage [2018/02/17(“y) 18:42:48.23 ID:cvAP0C15.net] ƒfƒoƒbƒO‘å•Ï‚¾‚ÈB‚ß‚ñ‚Ç‚‚³‚»‚¤B ŽdŽ–‚¶‚á‚È‚¢‚Ɖ´‚Í‚â‚ç‚È‚¢‚¾‚낤‚ÈB
420 –¼‘OFlogin:Penguin mailto:sage [2018/02/17(“y) 19:41:54.60 ID:J9G7l4mf.net] Ž©•ª‚Íimm32ŠÖ˜A(“ú–{Œê“ü—Í)API‚ðC³‚µ‚悤‚Æeclipce‚ŃRƒ“ƒpƒCƒ‹ŠÂ‹«ì‚Á‚½‚Í‚¢‚¢‚¯‚Ç ƒlƒCƒeƒBƒu‚̃EƒBƒ“ƒhƒEƒ}ƒl[ƒWƒƒŠÖ˜A‚Ì’mޝ•s‘«‚Ń\[ƒX‚̈Ӗ¡‚ª‚í‚©‚炸Q‚©‚¹‚Ä‚ ‚éEEE
421 –¼‘OFlogin:Penguin mailto:sage [2018/02/17(“y) 19:54:02.08 ID:Tf7u8zkg.net] >>407 Linux NativeƒAƒvƒŠ‚Ìê‡A32BIT COLOR ‚É‚·‚邯AA,R,G,B ‚Ì 4‚‚̒l‚ð ƒhƒbƒg‚ÌuFv‚Æ‚µ‚ÄŽw’è‚Å‚«‚Ü‚·BA‚ªƒ¿’l‚Å‚·B‚±‚̂悤‚È‚±‚Æ‚ÍAWindows ‚Å‚Ío—ˆ‚È‚¢‚ÆŽv‚¢‚Ü‚·BWindows‚Ìê‡ACreateWindowEx‚ÌdwExStyle ‚É WS_EX_LAYERED‚ðŽw’è‚·‚邯“§–¾A”¼“§–¾‚ªˆµ‚¦‚邿‚¤‚ɂȂè‚Ü‚·B 1.Š®‘S‚Éu“§–¾‚ɂȂéFv‚ð24BIT’l‚Å1FŽw’è‚Å‚«‚Ü‚·B‚±‚ÌF‚Å•`‚¢‚½ƒhƒbƒg‚ÍA @ƒfƒXƒNƒgƒbƒv‚܂œ§‚¯‚ÄŒ©‚¦‚邿‚¤‚ɂȂè‚Ü‚·BŒ©‚½–Ú‚¾‚¯‚ł͂ȂAWindowƒƒb @ƒZ[ƒW‚à‰º‚ÌWindow‚É“`’B‚³‚ê‚Ä‚µ‚Ü‚¤‚±‚ƂɂȂè‚Ü‚·‚ªB 2.ƒhƒbƒg‚²‚Ƃł͂ȂAWindow‘S‘̂̃¿’l‚ð1‚Â(1BYTE)‚¾‚¯Žw’è‚Å‚«‚Ü‚·B @ƒhƒbƒg‚²‚Ƃł͖³‚¢‚Ì‚ÅA‘S‘Ì“I‚É“§–¾“x‚ªŒˆ‚Ü‚Á‚Ä‚µ‚Ü‚¢‚Ü‚·B 1‚Æ2‚ÍŠ®‘S‚ɕʂ̊T”O‚Å‚·B Linux‚ÌARGB’l‚ÍAƒhƒbƒg–ˆ‚ÉŽw’è‚Å‚«‚é‚Ì‚ÅAWindows‚Ì‹@”\‚ð•ïŠÜ‚µ‚Ä‚¢‚邯 Œ¾‚¦‚Ü‚·B‹t‚É Windows‚Å‚ÍA“¯‚¶Ž–‚Ío—ˆ‚È‚¢‚Í‚¸‚Å‚·B
422 –¼‘OFlogin:Penguin mailto:sage [2018/02/17(“y) 19:57:46.46 ID:Tf7u8zkg.net] /wine/dlls/winex11.drv/x11drv.h ‚ÉŽŸ‚̂悤‚È\‘¢‘Ì‚ª‚ ‚èA‚±‚Ì whole_window ‚Æ‚¢‚¤‚Ì‚ª‘厖‚炵‚¢F /* 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
423 –¼‘OFiconic 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; }; [] [‚±‚±‰ó‚ê‚Ă܂·]
424 –¼‘OFlogin:Penguin mailto:sage [2018/02/17(“y) 20:00:42.49 ID:Tf7u8zkg.net] >>407 Œã”¼‚Ì“ñ‚ÂBŽ©•ª‚ÉŽæ‚Á‚Ä‚ÍA‚©‚È‚è‹Md‚Èî•ñ‚Å‚·B•‚©‚è‚Ü‚·B
425 –¼‘OFlogin:Penguin mailto:sage [2018/02/17(“y) 20:11:22.91 ID:Tf7u8zkg.net] >>407 XWindow ‚Å“§–¾‰»B‚±‚ê‚Í‚â‚Á‚Ă݂ĎÀÛ‚Éo—ˆ‚Ü‚µ‚½F https://stackoverflow.com/questions/39906128/ how-to-create-semi-transparent-white-window-in-xlib ŽqƒEƒBƒ“ƒhƒE‚ð“ü‚ê‚Ă݂ĂàA‚¿‚á‚ñ‚Æo—ˆ‚Ü‚µ‚½B ‚½‚¾‚µAŽqƒEƒBƒ“ƒhƒE‚É‚ÍAWin32‚̂悤‚ÈAƒ^ƒCƒgƒ‹ƒo[‚Í•t‚«‚«‚Ü‚¹‚ñ‚Å‚µ‚½B XWindow ‚ÉÚ‚µ‚¢l‚É‚æ‚ê‚ÎAXWindow ‚Ì Window Manager ‚ÍA Win32 ‚Ì MDI ‚̂悤‚ÈŽ–‚ÍAƒTƒ|[ƒg‚µ‚Ä‚¢‚È‚¢‚炵‚¢‚Å‚·Bâ‘΂© ‚Ç‚¤‚©‚Í•ª‚©‚è‚Ü‚¹‚ñ‚ªB ŽÀŒ±‚µ‚Ä‚Ý‚é‚ÆAŽqƒEƒBƒ“ƒhƒE‚àAeƒEƒBƒ“ƒhƒE‚àAABI ‚ÅAXMoveWindow ‚ŃXƒ€[ƒY‚É“®‚©‚¹‚Ü‚µ‚½B ‚½‚¾‚µAWine‚Ìê‡AŽqƒEƒBƒ“ƒhƒE‚É’¼ü‚â•¶Žš‚ª‘‚©‚ê‚Ä‚¢‚ÄA‚©‚ÂA”wŒi‚ª“§–¾‚Èê‡A ƒXƒ€[ƒY‚ɂ͓®‚©‚¹‚Ü‚¹‚ñB
426 –¼‘OFlogin:Penguin mailto:sage [2018/02/17(“y) 21:31:43.98 ID:cvAP0C15.net] Win32API‚¾‚¯‚¶‚á‚È‚AX Window‚ɂ‚¢‚Ä‚à’m‚Á‚Ä‚¨‚©‚È‚¢‚Æ‚¢‚¯‚È‚¢‚Ì‚© –Ê“|L‚ÁEEE •’iŽg‚Á‚Ă邾‚¯‚Å‚¸‚¢‚Ô‚ñŠy‚µ‚Ä‚½‚ñ‚¾‚ÈB
427 –¼‘OFlogin:Penguin mailto:sage [2018/02/17(“y) 22:08:41.04 ID:eqmjcJnH.net] –Ê”’‚»‚¤‚¾‚¯‚ÇŽžŠÔ‚Ë‚¦‚Ècc >>411 ‚ðŒ©‚éŒÀ‚肾‚Æuse_alpha‚ÍŽ‚Á‚Ă邯‚ÇAlpha’lŽ©‘Ì‚Í‚à‚¤X11‚Ì\‘¢‘̂ɂ¢‚ê‚Ä‚é‚Ì‚©‚ÈH ‚Ü‚ ’x‚‚Ȃ闗R‚Æ‚©ŒŸ“¢‚‚©‚ñ‚¯‚Çcc
428 –¼‘OF396 mailto:sage [2018/02/18(“ú) 01:13:22.20 ID:DznsC7ZZ.net] WINE‚É‚¨‚¢‚ÄA 1. MDI‚ÌCMDIChildWnd‚ÌCView‚ÌCLIENT—̈æ‘S‘Ì(ŽqƒEƒBƒ“ƒhƒE‚Ì @ ’†‘S‘̂ƌ¾‚Á‚Ä‚à‚æ‚¢) ‚É >>410 ‚Ì1.‚ÌF‚ð“h‚Á‚ÄAŠ®‘S“§–¾ @ ‚É‚µ‚Ä‚¢‚鎞‚ÍACMDIChildWnd‚̃^ƒCƒgƒ‹ƒo[(ŽqƒEƒBƒ“ƒhƒE‚Ì @ ƒ^ƒCƒgƒ‹ƒo[j‚ðƒhƒ‰ƒbƒO‚µ‚Ä‚à‚‘¬‚É“®‚©‚¹‚éB 2. 1‚ÌCView‚Ì’†‚ÉApDC->LineTo()‚Å’¼ü‚ðˆê–{•`‚¢‚½ó‘Ô‚É‚µ‚Ä‚©‚ç @ “¯‚¶Ž–‚ð‚µ‚æ‚¤‚Æ‚·‚邯A‚ƂĂà’x‚‚È‚éB 3. 2.‚ÍA’¼ü‚Ì‘ã‚í‚è‚É pDC->TextOut() ‚Å•¶Žš‚ð•`‚¢‚Ä‚à“¯—l‚É’x‚ @ ‚È‚éB 4. „’è‚Å‚ÍAWine‚ÍAWin32‚ÌCreateWindowŒn‚ÅAParent Window ‚ª @ Desktop ˆÈŠO‚Ìê‡AXWindow ‚Ì Window ‚ðŽg‚킸AŽ©‘O‚Å @ Parent Window ‚Ì’†‚ɉ摜‚ð‡¬‚µ‚ÄŽqWindow‚ð–͕킵‚Ä‚¢‚éB 5. 4.‚Ì—l‚É‚µ‚Ä‚¢‚é——R‚ÍA„’肾‚Æ Window Manager ‚ÌŽí—Þ‚É‚æ‚é @ ‹““®‚̈Ⴂ‚ÉŠ³‚킳‚ꂸ‚ɈÀ’肵‚Ä Emulation ‚·‚邽‚ß‚©‚à’m‚ê @ ‚È‚¢B 6. ‚»‚ÌŒ‹‰ÊAXWindow ‚Ì ARGB ’l‚É‚æ‚é‚‘¬‚È“§–¾ˆ—‚ð—˜—p‚Å‚«‚È @ ‚‚È‚èA’ᑬ‚ɂȂéB 7. ‚µ‚©‚µA‚È‚é‚ׂ’ᑬ‚ɂȂç‚È‚¢‚悤‚É‚·‚邽‚ßA‚È‚‚Æ‚àA @ ŽqƒEƒBƒ“ƒhƒE‚Ì’†‘S‘Ì‚ªŠ®‘S“§–¾‚Èꇂɂ‚¢‚Ä‚ÍA‘Îô‚ªŽæ‚ç @ ‚ê‚Ä‚¨‚èA‚‘¬‚Ƀhƒ‰ƒbƒO‚Å‚«‚邿‚¤‚ɂȂÁ‚Ä‚¢‚éB 8. ‚»‚ÌŒ‹‰ÊA2, 3 ‚̂悤‚ÈðŒ‚ÌŽž‚̂ݒx‚‚È‚é‚Æ„’肳‚ê‚éB
429 –¼‘OFlogin:Penguin mailto:sage [2018/02/18(“ú) 01:24:45.49 ID:smHwezpH.net] „’è‚¶‚á‚È‚‚Ä’¼Ú•·‚¢‚½‚çH
430 –¼‘OFlogin:Penguin [2018/02/18(“ú) 01:56:23.18 ID:HH6qVqdM.net] >>417 ‚Ç‚¤‚â‚Á‚ÄH
431 –¼‘OF406 mailto:sage [2018/02/18(“ú) 02:29:31.78 ID:dARugMLm.net] >>416 ‚·‚Ü‚ñAƒEƒBƒ“ƒhƒE‚Ì”¼“§–¾‰»ˆ—(LWA_ALPHA)‚ÆŠ¨ˆá‚¢‚µ‚Ä‚½B ƒEƒBƒ“ƒhƒE—̈æ“à‚Ì“Á’èF‚Å‘‚¢‚½‰ÓŠ‚ð“§‰ß‚³‚¹‚éê‡(LWA_COLORKEY)‚ËB ƒ\[ƒX‚𒲂ׂ½‚çAWine‚Å‚ÍX11‚ÌShape Extension‚ðŽg‚Á‚ăEƒBƒ“ƒhƒE‚ÌŒ`ó‚ð•ÏX‚·‚邱‚Æ‚ÅA uŒ©‚½–Ú‚¾‚¯‚ł͂ȂAWindowƒƒbƒZ[ƒW‚à‰º‚ÌWindow‚É“`’B‚·‚邱‚Æv‚ðŽÀŒ»‚µ‚Ä‚¢‚邿‚¤‚¾B ‹ï‘Ì“I‚É‚Íupdate_surface_region()‚Å1ƒsƒNƒZƒ‹‚²‚ƂɃsƒNƒZƒ‹’l‚ð”äŠr‚µ‚ÄA XShapeCombineRectangles‚ÉŽw’è‚·‚é‹éŒ`—̈æ‚ðì‚Á‚Ä‚¢‚éB ttps://github.com/wine-mirror/wine/blob/2936f3f9bb9dc01c595498a821d6adb6775b62cc/dlls/winex11.drv/bitblt.c#L1616 415‚Ì2.,3.‚ÌðŒ‚¾‚Æ’x‚‚È‚é‚Æ‚·‚邯AƒsƒNƒZƒ‹’l‚ð”äŠr‚·‚鈗‚Í1.‚Æ“¯‚¶‚Ȃ̂ÅA ‹éŒ`‚ª‘å—ʂɂȂÁ‚½‚Æ‚«‚ÉAX‘¤‚Å•`‰æ«”\‚ª’ቺ‚·‚é‚̂ł͂Ȃ¢‚©‚ÆŽv‚¤‚¼B StackOverflow‚Ì‹LŽ–‚ÍShape Extension‚ðŽg‚Á‚Ä‚¢‚È‚¢‚̂ŋ؈Ⴂ‚¾B
432 –¼‘OFlogin:Penguin mailto:sage [2018/02/18(“ú) 04:20:47.62 ID:HH6qVqdM.net] >>419 ‚È‚é‚Ù‚ÇB 1‚ÂŽ¿–â‚Å‚·B ‚Í‚Á‚«‚è‚Æ‚Í‘‚¢‚ĂȂ©‚Á‚½‚̂ł·‚ªA>>416 ‚Ì’x‚‚È‚éðŒ‚Å‚ ‚邯‚±‚ë‚Ì 2,3 ‚Ìê‡ ‚É‚¨‚¢‚Ä‚àACMainFrameA‚‚܂èAƒAƒvƒŠƒP[ƒVƒ‡ƒ“‘S‘Ì‚Ì Main ‚Ì Window ‚̃^ƒCƒgƒ‹ƒo[‚ð ƒhƒ‰ƒbƒO‚µ‚½ê‡‚ÍA’x‚‚È‚è‚Ü‚¹‚ñB‚¢‚½‚Á‚Ä‚‘¬‚Ƀhƒ‰ƒbƒO‚Å‚«‚Ü‚·B >>419 ‚ª³‚µ‚¢‚È‚çA‚Ç‚¤‚µ‚ÄAX ‚ÍA‚±‚Ìꇂ¾‚¯‚Í‘¬‚ACMDIChildWnd ‚Ìꇂ¾‚¯‚Í ’x‚“®ì‚·‚é‚̂łµ‚傤‚©HHH
433 –¼‘OFlogin:Penguin mailto:sage [2018/02/18(“ú) 04:57:21.33 ID:HH6qVqdM.net] «‚Ì\‘¢‘Ì‚Ì dc_rect ‚Ì‹éŒ`‚ªŽqƒEƒBƒ“ƒhƒE‚ð–͕킷‚邽‚߂Ɏg‚í‚ê‚Ä‚¢‚é‚©‚à’m‚ê‚Ü‚¹‚ñF /* 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; }
434 –¼‘OFlogin:Penguin mailto:sage [2018/02/18(“ú) 05:32:50.78 ID:HH6qVqdM.net] /wine/dlls/user32/painting.c ‚Ì’†‚ÌA // Set the visible region and X11 drawable for the DC associated to a given window. static void update_visible_region( struct dce *dce ) ‚Ì’†‚ÉA USER_Driver->pGetDC( dce->hdc, dce->hwnd, top_win, &win_rect, &top_rect, flags ); ‚Æ‚ ‚Á‚ÄA void CDECL X11DRV_GetDC( HDC hdc, HWND hwnd, HWND top, const RECT *win_rect, const RECT *top_rect, DWORD flags ) ‚ªŒÄ‚Ño‚³‚ê‚éBˆø”‚É hwnd ‚Æ topAwin_rect ‚Æ top_rect ‚ª‘΂ɂȂÁ‚Ä‚¢‚é‚炵‚¢‚±‚ƂɒˆÓB ‚±‚ÌŠÖ”‚Ì’†‚ÅAx11drv_escape_set_drawable escape; ‚Ì escape.dc_rect ‚ÉAwin_rect ‚Ì top_rect ‚Ì (left, top) ‚©‚ç‚Ì‘Š‘ÎÀ•W‚ª“ü‚ê‚ç‚ê‚éB ‚»‚µ‚ÄAExtEscape( hdc, X11DRV_ESCA
435 –¼‘OFPE, sizeof(escape), (LPSTR)&escape, 0, NULL ); ‚Æ ExtEscape() ‚ªŒÄ‚Ño‚³‚ê‚éB escape = X11DRV_ESCAPE; escape.code = X11DRV_SET_DRAWABLE; in_data = &escape; ‚Ìó‘Ô‚ÅA X11DRV_PDEVICE *physDev = get_x11drv_dev( dev ); const struct x11drv_escape_set_drawable *data = in_data; physDev->dc_rect = data->dc_rect; ‚ƂȂéBphysDev->dc_rect ‚ªA>>421 ‚Ì dc_rect ‚É‘¼‚È‚ç‚È‚¢B ‚‚܂èAHWND hwnd‚Ìwin_rect‚ÌAHWND top‚̶ãÀ•W‚©‚ç‚Ì‘Š‘ÎÀ•W‚ªA physDev->dc_rect ‚É“ü‚邱‚Æ‚É‚È‚é‚ÆŽv‚í‚ê‚éBhwnd‚ÌuÅãˆÊ‚Ìev‚ª top‚¾‚Æ‚·‚邯Atop‚¾‚¯‚ª XCreateWindow()‚³‚ꂽ–{•¨‚ÌWindow‚Å‚ ‚Á‚ÄA hwnd ‚Í ‹[Ž—Window‚Å‚ ‚邯‚µ‚Ä’Òå낪‡‚¤Bhwnd‚Ö‚Ì•`‰æ‚ÍA ŽÀ‚ÍÀ•W‚¾‚¯‚ðC³‚µ‚Ä top ‚Ì(–{•¨‚Ì X )Window ‚É‘‚«ž‚Ü‚ê‚Ä‚¢‚邾‚¯ ‚©‚à’m‚ê‚È‚¢B [] [‚±‚±‰ó‚ê‚Ă܂·]
436 –¼‘OFlogin:Penguin [2018/02/18(“ú) 12:58:43.05 ID:HH6qVqdM.net] Œ‹˜_“I‚É‚ÍAWine ‚Å‚ÍAŠ®‘S“§–¾F‚ªÝ’肳‚ê‚Ä‚¢‚é‘S‚Ä‚Ì LAYERED_WINDOW ‚É ‘΂µ‚ÄAIdleó‘Ô‚ÌŽž‚©A‚Ü‚½‚ÍA50(ms) –ˆ‚ÉAWindowƒAƒvƒŠ‚̃ƒbƒZ[ƒWƒ‹[ƒv ‚Ì’†‚©‚玩“®“I‚ÉA>>419 ‚Ì update_surface_region() ‚ªŒÄ‚Ño‚³‚ê‚邿‚¤‚ɂȂÁ ‚Ä‚¢‚é‚炵‚¢‚Å‚·B‚±‚ÌðŒ‚ÌWindow‚ª‚ ‚Á‚ÄA‚©‚ÂAupdate_surface_region() ‚Ì ˆ—‚ªd‚¢ê‡‚ÉA“®ì‚ª’x‚‚È‚é‰Â”\«‚ª‚‚¢‚Å‚·BDirty Bit‚̂悤‚È‚à‚Ì‚ÍA ¡‚̂Ƃ±‚댩‚‚©‚Á‚Ä‚¢‚Ü‚¹‚ñ‚Ì‚ÅA‰½‚à‚µ‚È‚‚Ä‚àí‚Éd‚‚È‚é‚̂łµ‚傤‚©B yÚ×z flush_window_surfaces() ‚È‚éŠÖ”‚ªA’èŠú“I‚ɌĂÑo‚³‚ê‚éB “TŒ^“I‚ȃ^ƒCƒ~ƒ“ƒO‚ÍAPeekMessage() ‚Ì’†‚©‚ç‚Å‚ ‚èAGetMessage()‚Å‚ÍA check_for_driver_events() ‚ð‰î‚µ‚ČĂÑo‚³‚ê‚éB flush_window_surfaces() ‚Ì’†‚ÉŽŸ‚̂悤‚ȃ}ƒNƒŒÄ‚Ño‚µ‚ª‚ ‚é : LIST_FOR_EACH_ENTRY( surface, &window_surfaces, struct window_surface, entry ) surface->funcs->flush( surface ); ‚±‚±‚ÅA /* iterate through the list using a list entry */ #define LIST_FOR_EACH_ENTRY(elem, list, type, field) \ for ((elem) = LIST_ENTRY((list)->next, type, field); \ &(elem)->field != (list); \ (elem) = LIST_ENTRY((elem)->field.next, type, field)) ‚Å‚ ‚èAã‹L‚ÍAwindow_surfaces ƒŠƒXƒg‚É“o˜^‚³‚ê‚Ä‚¢‚é‘S‚Ä‚Ì window_surface *surface ‚ɂ‚¢‚ÄAwindow_surface_funcs *funcs ‚Ì ŠÖ”ƒ|ƒCƒ“ƒ^ flush ‚ÌŠÖ”‚ðŒÄ‚Ño‚·‚±‚ƂɂȂèAŒ‹‹ÇA ŠÖ” x11drv_surface_flush() ‚ªŒÄ‚Ño‚³‚ê‚邱‚ƂɂȂéB ŠÖ” x11drv_surface_flush() ‚Ì’†‚É if (surface->is_argb || surface->color_key != CLR_INVALID) update_surface_region( surface ); ‚Æ‚ ‚éBupdate_surface_region() ‚ÍA>>419 ‚É‘‚©‚ê‚Ä‚¢‚éŠÖ”B
437 –¼‘OF396=422 mailto:sage [2018/02/18(“ú) 13:53:01.38 ID:HH6qVqdM.net] ŠY“–‚ÌðŒ‚ÌŽžAV‚½‚ɂ͉½‚Ì•`‰æ‚à‚µ‚Ä‚¢‚È‚¢ÃŽ~ó‘Ô‚Å‚àALinux‚̃VƒXƒeƒ€Eƒ‚ƒjƒ^[‚Å CPUƒpƒ[‚ª–c‘å‚ÉÁ”‚ê‚Ä‚¢‚邱‚Æ‚ðŠm”F‚µ‚Ü‚µ‚½B‚±‚Ì‚±‚Æ‚ÍA>>423 ‚ð— •t‚¯‚镨‚Å‚·B ‚¾‚Æ‚·‚邯ADirty Bit ‚𓱓ü‚µ‚ÄAupdate_surface_region()‚Ì•p“x‚ð‰º‚°‚ê‚ÎA‚±‚̒ᑬ‰» ‚ÍC³‚Å‚«‚é‰Â”\«‚ªo‚Ä‚«‚Ü‚µ‚½BLineTo, TextOut, MoveWindow, SetWindowPos, ShowWindow ‚ȂǂðŽg‚Á‚½‚Æ‚«‚¾‚¯ADirtyBit ‚ð 1‚É‚µ‚ÄA1‚ÌŽž‚¾‚¯ update_surface_region() ‚ðŒÄ‚Ño‚µAŒÄ‚Ño‚µ‚½Œã‚É‚Í 0 ‚É‚·‚ê‚Ηǂ¢‚̂ł͂Ȃ¢‚©‚Æ‚¢‚¤‚±‚Ƃł·B ðŒ‚ÍF 1. WINE‚ðŽg—p‚µ‚Ä WindowsƒAƒvƒŠ‚𑖂点‚Ä‚¢‚邱‚ÆB 2. ƒAƒvƒŠ“à‚Å CreateWindowEx() ‚ÌdwExStyle ‚É WS_EX_LAYERED ‚ðŽw’肵‚Ä Window‚ðì¬ @ ς݂ł ‚邱‚ÆB 3. ‚³‚ç‚ÉASetLayeredWindowAttribute() ‚É LWA_COLORKEY ‚ðŽw’肵‚ÄuŠ®‘S“§–¾Fv‚ð @ Žw’肵‚Ä‚¢‚邱‚ÆB 4. ‚»‚Ì Window ‚Ì”wŒi‚ðuŠ®‘S“§–¾Fv‚ÅÁ‹Ž‚µ‚Ä‚¢‚邱‚ÆB 5. ‚»‚Ì Window “à•”‚É’ÊíF‚ÅALineTo() ‚â TextOut() ‚É‚æ‚Á‚Ä}Œ`‚â•¶Žš‚ð @ •`‚¢‚½Œã‚Å‚ ‚邱‚ÆB ‚Å‚·B MDI‚ðŽg‚Á‚Ä‚¢‚鎖‚âACMDIChildWnd “®‚©‚·‚©‚Ç‚¤‚©‚ÍŠÖŒW‚È‚¢—l‚Å‚·B CMainFrame ‚ðƒhƒ‰ƒbƒO‚µ‚½Žž‚ɂ͒x‚Š´‚¶‚È‚¢‚Ì‚ÍA‚»‚Ì“®ì‚ɂ‚¢‚Ă̓VƒXƒeƒ€‚ª CPU ‚Ì—D懈ʂðã‚°‚Ä‚¢‚é‚©‚炳͂Ȃ¢‚©‚ÆŽv‚¢‚Ü‚·B
438 –¼‘OF396 mailto:sage [2018/02/18(“ú) 14:19:00.83 ID:HH6qVqdM.net] >>419 ‚³‚ñ‚ÌŽw“E‚ͦ‚–ð—§‚¿‚Ü‚µ‚½B—L“‚²‚´‚¢‚Ü‚·B ‚½‚¾‚µA‚±‚Á‚¿‚Ì’²¸•s‘«‚Ì‚¹‚¢‚ª‘å‚«‚¢‚̂łµ‚傤‚ªAˆÈ‰º‚Ì•”•ª‚ÍA¡‰ñ‚Ì Œ‹‰Ê‚Ƃ͈á‚Á‚Ä‚¢‚½‚悤‚Å‚·F >416‚Ì2.,3.‚ÌðŒ‚¾‚Æ’x‚‚È‚é‚Æ‚·‚邯AƒsƒNƒZƒ‹’l‚ð”äŠr‚·‚鈗‚Í1.‚Æ“¯‚¶‚Ȃ̂ÅA >‹éŒ`‚ª‘å—ʂɂȂÁ‚½‚Æ‚«‚ÉAX‘¤‚Å•`‰æ«”\‚ª’ቺ‚·‚é‚̂ł͂Ȃ¢‚©‚ÆŽv‚¤‚¼B uX‘¤‚Ì•`‰æ«”\‚̒ቺv‚ªŒ´ˆö‚ł͂ȂAuƒsƒNƒZƒ‹’l‚ð”äŠr‚·‚鈗vŽ©‘Ì‚ªA ŽÀ‚ÍuÃŽ~ó‘Ôv‚Å‚àA펞A‘å•‚É‘‰Á‚µ‚Ä‚¢‚½A‚Æ‚¢‚¤‚±‚Ƃł·B ‰½‚̕ω»‚ª‚È‚¢‚Æ‚«‚ɂłàA•S–œƒsƒNƒZƒ‹‚ð”äŠr‚µAƒ‰ƒ“ƒŒƒ“ƒOƒX‚𓱂«o‚·ˆ—‚ðA Œ´‘¥“I‚ɂ͕bŠÔ20‰ñ‚à‚â‚Á‚Ä‚¢‚Ü‚·B ‚Ü‚½A}Œ`‚ª•¡ŽG‚¾‚ÆAƒVƒXƒeƒ€ƒR[ƒ‹‚ðŒÄ‚Ño‚·‰ñ”‚ªƒ‰ƒ“ƒŒƒ“ƒOƒX‚̕ω»‚̉ñ””{ ‚³‚ê‚Ü‚·B—Ⴆ‚ÎA’¼ü‚ðN–{ˆø‚¢‚½ê‡AƒVƒXƒeƒ€ƒR[ƒ‹‚̉ñ”‚ªŒ´‘¥ 3N (”{)‚ɂȂè‚Ü‚·B c•ûŒü‚ª500ƒhƒbƒg‚ÌWindow‚ÅA1–{‚Ì’¼ü‚ðˆø‚¢‚½ê‡Aˆê‰ñ‚̈—‚ÅAÅ’á‚Å‚à 6,000‰ñ‚̃VƒXƒeƒ€ƒR[ƒ‹‚ªŒÄ‚Ño‚³‚ê‚Ü‚·B‚±‚ꂪ•bŠÔ20‰ñ‚às‚í‚ê‚Ü‚·‚Ì‚ÅA Å’á‚ÅA•bŠÔ12–œ‰ñ‚̃VƒXƒeƒ€ƒR[ƒ‹‚ƂȂè‚Ü‚·B1‰ñ‚̃VƒXƒeƒ€ƒR[ƒ‹‚ÍA5(ƒÊs) ‚‚ç‚¢‚͂ǂ¤‚µ‚Ä‚à‚©‚©‚é‚Ì‚ÅA‚±‚ꂾ‚¯‚ÅA0.6(•b)‚à‚©‚©‚Á‚Ä‚µ‚Ü‚¢‚Ü‚·B ‚‚܂èA1•bŠÔ‚É0.6•b‚à–³‘ʂȃVƒXƒeƒ€ƒR[ƒ‹‚ÉŽžŠÔ‚ðŽæ‚ç‚ê‚Ä‚¢‚邯Œ©Ï‚à‚ê‚Ü‚·B ’¼ü‚ð2–{‚É‚·‚邯A‚±‚ꂾ‚¯‚ÅCPU‚ªƒtƒ‹ƒpƒ[ó‘ԂɂȂè‚Ü‚·B
439 –¼‘OF396 mailto:sage [2018/02/18(“ú) 14:38:25.11 ID:HH6qVqdM.net] yŒµ–§‰»z 1. ‘½•ªA6,000‰ñ‚ł͂ȂA4,500‰ñ’ö“x‚Å‚µ‚½B 2. ”äŠrˆ—Ž©‘Ì‚ÍA}Œ`‚Ì•¡ŽG‚³‚Ƃ͖³ŠÖŒW‚ɂقڈê’è‚Ìd‚³‚Å‚·B 3. }Œ`‚ª•¡ŽG‚Èê‡AƒVƒXƒeƒ€ƒR[ƒ‹‚̉ñ”‚ª‘‚¦‚Ü‚·B 4. ‰¡•ûŒü‚Ì1‚‚̃‰ƒ“ƒŒƒ“ƒOƒX‚ÅA3‚‚̃VƒXƒeƒ€ƒR[ƒ‹‚ªŒÄ‚΂ê‚Ü‚·B 5. }Œ`‚ª‰½‚à•`‚©‚ê‚Ä‚¢‚È‚¢ê‡A1‚‚ÌyÀ•W‚ɑ΂µ‚ÄA1‚‚̃‰ƒ“ƒŒƒ“ƒOƒX‚Å‚·B 6. N –{‚Ì’¼ü‚Ìê‡A‘å‘̂Ō¾‚¦‚ÎA3N ŒÂ‚̃‰ƒ“ƒŒƒ“ƒOƒX‚ɂȂè‚Ü‚·B 7. ‚¾‚©‚çA1‚‚ÌyÀ•W‚ɑ΂µA9N ŒÂ‚̃VƒXƒeƒ€ƒR[ƒ‹‚ªŒÄ‚΂ê‚邱‚ƂɂȂè‚Ü‚·B 8. c 500 ƒhƒbƒg‚Ìê‡A500*9N = 4500 N ‰ñ‚̃VƒXƒeƒ€ƒR[ƒ‹‚ƂȂè‚Ü‚·B 9. ‚æ‚Á‚ÄA’†‚É•`‚©‚ê‚Ä‚¢‚é’¼ü‚Ì–{”‚ª‘‚¦‚邯A‘å‘Ì O(N) ‚ň—ŽžŠÔ‚ª @ ‘‚¦‚Ü‚·B 10. •¶Žš‚ð•`‚¢‚½ê‡A‘å‘ÌA•¶Žš‚Ì•¡ŽG‚³‚É”ä—Ⴕ‚Ĉ—ŽžŠÔ‚ª‘‚¦‚Ü‚·B
440 –¼‘OF396 mailto:sage [2018/02/18(“ú) 15:25:59.15 ID:HH6qVqdM.net] >>426 y’ù³z u6.v‚̃‰ƒ“ƒŒƒ“ƒOƒX‚̌”‚ÍA3NŒÂ‚ł͂ȂA2N+1 ŒÂ‚Å‚µ‚½B ‚¨‘›‚ª‚¹‚µ‚Ü‚µ‚½B
441 –¼‘OFlogin:Penguin mailto:sage [2018/02/18(“ú) 16:08:39.77 ID:dARugMLm.net] >>426 update_surface_region‚Ì•û‚ªŒø—¦ˆ«‚»‚¤‚Ȃ̂ÅAX‘¤‚Ì•`‰æ«”\‚ªŒ´ˆö‚Æ„‘ª‚µ‚½•”•ª‚Í“P‰ñ‚·‚éB Shape Extension‚ÌŽd—l‚ðŒ©‚é‚ÆA ‹éŒ`—̈æ‚ł͂Ȃƒ}ƒXƒN—p‚ÌPixmap‚ðŽw’è‚·‚é•û–@‚àÌ‚ê‚é‚©‚çA BitBlt‚ÅŒø—¦‚悃}ƒXƒN‚ðì‚ê‚΂»‚Á‚¿‚Ì•û‚ª‘‚‚Ȃ邩‚à‚ÆŽv‚Á‚Ă݂½‚èB ‚ ‚ÆAMDIƒEƒBƒ“ƒhƒE‚ªX‚ÌWindow‚ł͂Ȃ¢‚±‚Æ‚ÍAxwininfoƒRƒ}ƒ“ƒh‚ÌŒ‹‰Ê‚Å‚àŠm”F‚Å‚«‚éB
442 –¼‘OF396 mailto:sage [2018/02/18(“ú) 17:01:36.91 ID:hqeoLLBF.net] >>428 >‹éŒ`—̈æ‚ł͂Ȃƒ}ƒXƒN—p‚ÌPixmap‚ðŽw’è‚·‚é•û–@‚àÌ‚ê‚é‚©‚çA >BitBlt‚ÅŒø—¦‚悃}ƒXƒN‚ðì‚ê‚΂»‚Á‚¿‚Ì•û‚ª‘‚‚Ȃ邩‚à‚ÆŽv‚Á‚Ă݂½‚èB ‚È‚‚Æ‚à‚»‚Ì•û–@‚¾‚ÆA}Œ`‚Ì•¡ŽG‚³‚É‚æ‚炸‚ɈÀ’肵‚Ä“¯‚¶ˆ—ŽžŠÔ‚Šς݂܂·‚ËB‚»‚ê‚Æ“–‘RABitBlt ‚̓n[ƒhƒEƒFƒA‚̕╂ª“¾‚ç‚ê‚Ü‚·B ‚ ‚ÆAƒVƒXƒeƒ€ƒR[ƒ‹‚à‘S‘̂Ŕ‰ñ‚µ‚©ŒÄ‚΂ȂÄς݂܂·‚µB
443 –¼‘OF396 mailto:sage [2018/02/19(ŒŽ) 12:40:07.08 ID:v4nZjJQ1.net] “Á’è‚̃AƒvƒŠ‚Ìꇂɂ¾‚¯‚ÍAŽ©ì‚Ì user32.dll.so ‚ð“ǂݞ‚Ü‚¹‚鎖‚ªo—ˆ‚È‚¢B WINEDLLPATH, WINEPATH ‚ðŽŽ‚µ‚Ă݂½‚ªA¡‚̂Ƃ±‚ëãŽè‚s‚©‚È‚¢B
444 –¼‘OF396 mailto:sage [2018/02/19(ŒŽ) 15:28:56.74 ID:v4nZjJQ1.net] ’²‚×‚Ä‚Ý‚é‚ÆA/wine/libs/wine/loader.c ‚Ì’†‚Ì build_dll_path() ŠÖ”‚Ì’†‚ÅAŠÂ‹«•Ï” WINEDLLPATH ‚ªA“ǂݎæ‚ç‚êA: ‚ð 0x00‚É •Ï‚¦‚Ä‚©‚çAdll_paths[] ”z—ñ‚É : ‚Å‹æØ‚ç‚ꂽ‚»‚ꂼ‚ê‚Ì•¶Žš—ñ ‚Ìæ“ªƒAƒhƒŒƒX‚ð‘ã“ü‚µ‚Ä‚¢‚éB ‚µ‚©‚µA‚»‚̈—‚É“ü‚é‘O‚ÉAget_dlldir() ŠÖ”‚ª NULL ˆÈŠO‚ð•Ô‚µ‚½ê‡A dll_paths[0] ‚É‚»‚ÌŠÖ”‚ª•Ô‚µ‚½•¶Žš—ñ‚̃AƒhƒŒƒX‚ð“ü‚ê‚Ä‚µ‚Ü‚¤B ‚»‚µ‚ÄAŽÀÛ‚Ì get_dlldir() ‚ÍA"/usr/local/bin/../lib/wine" ‚Æ‚¢‚¤•¶Žš—ñ‚ð•Ô‚µ‚Ä‚‚é‚Ì‚ÅA‚»‚Á‚¿‚̃pƒX‚Ì•û‚ªAWINEDLLPATH ‚Ì—D懈ʂæ‚è‚àã‚ɂȂÁ‚Ä‚µ‚Ü‚¤B‚»‚µ‚ÄA /* retrieve the default dll dir */ const char *get_dlldir( const char **default_dlldir ) { *default_dlldir = DLLDIR; return dlldir; } ‚ƂȂÁ‚Ä‚¢‚邪ADLLDIR ‚ª‘S‚Ă̊g’£Žq‚Ì‘Sƒtƒ@ƒCƒ‹‚ð‘S•¶ŒŸõ‚µ‚Ä‚à ‚Ç‚±‚É‚à’è‹`‚³‚ê‚Ä‚¨‚炸AŽQÆ‚³‚ê‚Ä‚¢‚é‚Ì‚à—Bˆê‚±‚ÌŠÖ”‚¾‚¯‚¾‚Á‚½B ‚±‚ꂾ‚ÆAWINEDLLPATH ‚ÅuOverridev‚Å‚«‚È‚¢‚Ì‚à“–‘R‚¾‚¯‚ÇA ‚»‚à‚»‚àADLLDIR ‚ª‚Ç‚±‚Å’è‹`‚³‚ê‚Ä‚¢‚é‚Ì‚©‚ª•ª‚©‚ç‚È‚¢‚̂Š’N‚©‚Ì‹³‚¦‚ð‚¢‚½‚¾‚«‚½‚¢‚Å‚·B
445 –¼‘OFlogin:Penguin mailto:sage [2018/02/19(ŒŽ) 15:47:21.84 ID:qkc2SRTD.net] Œ©‚‚©‚è‚Ü‚µ‚½Bwine/libs/wine/Makefile‚Ì’†‚ÅA config_EXTRADEFS = \ @@-DBINDIR='"${bindir}"' \ @@-DDLLDIR='"${dlldir}"' \ @@-DLIB_TO_BINDIR=\"`$(MAKEDEP) -R ${libdir} ${bindir}`\" \ @@-DLIB_TO_DLLDIR=\"`$(MAKEDEP) -R ${libdir} ${dlldir}`\" \ @@-DBIN_TO_DLLDIR=\"`$(MAKEDEP) -R ${bindir} ${dlldir}`\" \ @@-DBIN_TO_DATADIR=\"`$(MAKEDEP) -R ${bindir} ${datadir}/wine`\" ‚Æ‚¢‚¤‚Ì‚ªB’PŒêŒŸõ‚µ‚Ä‚¢‚½‚Ì‚ª‹S–å‚Å‚µ‚½B
446 –¼‘OF396 mailto:sage [2018/02/19(ŒŽ) 19:22:56.55 ID:WuPPo4Ry.net] loader.c ‚Ì build_dll_path() ‚ÌC³‚ÆAuser32.dll.so ‚ÌC³‚ðA Ž©•ª‚̃AƒvƒŠ‚¾‚¯‚É“K—p‚·‚鎖‚ɬŒ÷‚µ‚Ü‚µ‚½B
447 –¼‘OF396 mailto:sage [2018/02/20(‰Î) 03:10:39.77 ID:nCkYsCc8.net] surface ‚ª NULL ‚ł͂Ȃ¢ê‡Axxx->pLineTo() ‚ÍAX11DRV_LineTo() ‚ł͂ȂAdibdrv_LineTo() ‚ªŒÄ‚Ño‚³‚ê‚邿‚¤‚ÈEEEB
448 –¼‘OF396 mailto:sage [2018/02/20(‰Î) 05:59:07.45 ID:nCkYsCc8.net] DirtyBit ‚ðŽg‚Á‚ÄA—á‚Ì update_surface_region() ‚ÍA •`‰æ‚µ‚ĂȂ¢‚Æ‚«‚ɂ͑S‚ŒÄ‚΂ê‚È‚¢‚悤‚ɂł«‚½‚ñ‚Å‚·‚ªA ‚Ü‚¾‚©‚È‚è’x‚¢‚Å‚·B‰½‚à‚µ‚ĂȂ¢‚Æ‚«‚É‚à CPU ƒpƒ[‚ª‚©‚È‚èÁ”‚ê‚Ä‚¢‚Ü‚·B ‚»‚ÌŠÔAupdate_surface_region() ‚ªŒÄ‚Ño‚³‚ê‚Ä‚¢‚È‚¢‚±‚Æ‚ÍAFIXME ‚Å •\ަ‚µ‚ÄŠm”F‚ªŽæ‚ê‚Ä‚¢‚Ü‚·B ‚È‚¨A>>434 ‚ÍAwindrv_LineTo() ‚Ì•û‚̊ԈႢ‚Å‚µ‚½Bwindrv_LineTo() ‚Ìê‡A ŠÈ’P‚É surface ‚ɃAƒNƒZƒX‚Å‚«‚é‚Ì‚ÅAsurface ‚É bNeedToUpdate ‚̂悤‚È ƒtƒ‰ƒO‚ð’ljÁ‚µ‚ÄA‚»‚ê‚ð 1 ‚É‚µ‚Ä dirty bit ‚É‚µ‚Ä‚¢‚Ü‚·B ‚È‚º’x‚¢‚܂܂Ȃ̂©‚Í“ä‚Å‚·B
449 –¼‘OFlogin:Penguin mailto:sage [2018/02/20(‰Î) 06:05:44.26 ID:AmaI1OSV.net] 2ch(5ch?)‚Íl‚Í‘½‚¢‚¯‚ÇŠî–{“I‚Ƀ†[ƒU[ƒŒƒxƒ‹‚Ìl‚΂©‚肾‚©‚ç‹Zp“I‚È‘‚«ž‚Ý‚µ‚Ä‚à”½‰ž‚͓݂¢‚Ë Qiita‚É‚Å‚à‘‚¢‚Ă݂½‚ç‚Ç‚¤H
450 –¼‘OFlogin:Penguin mailto:sage [2018/02/20(‰Î) 18:28:22.71 ID:QMmYbOOf.net] –{‰Æ‚Ƀpƒbƒ`“Še‚à‚¨Šè‚¢‚µ‚Ü‚·w
451 –¼‘OF396 mailto:sage [2018/02/20(‰Î) 18:49:16.00 ID:nCkYsCc8.net] ’x‚¢Œ´ˆö‚Ì1‚‚ÍAOnldle ‚Ì’†‚É‚ ‚邱‚Æ‚ª•ª‚©‚è‚Ü‚µ‚½B 1. •K—v‚ª‚ ‚Á‚ÄAŠO•”ƒc[ƒ‹‚É‚æ‚éƒtƒ@ƒCƒ‹‚ÌXVƒ`ƒFƒbƒN‚ð‚µ‚Ä‚¢‚½‚Æ‚±‚ëA @ ‚»‚ꂪ‚Æ‚ñ‚Å‚à‚È‚d‚¢Ž–‚ª”»–¾B 2. SetTimer ‚Å CMainFrame ‚Ƀ^ƒCƒ}[‚ð‚µ‚©‚¯‚Ä‚¢‚邯ACMainFrame::OnCmdMsg() @ ‚ªAWM_TIMER ƒƒbƒZ[ƒW‚ª—ˆ‚é“x‚ÉA‚»‚ê‚ð‰½”{‚É‚àŠ|‚¯ŽZ‚µ‚½‰ñ”‚¾‚¯ŒÄ‚Ñ @ o‚³‚ê‚鎖‚ª”»–¾B—Ⴆ‚ÎA•bŠÔ N ‰ñ‚̃^ƒCƒ}[‚ðŽdŠ|‚¯‚邯AOnCmdMsg ‚ªA @ 10*N ‰ñ ŒÄ‚Ño‚³‚ê‚邿‚¤‚ÈŠ´‚¶‚Å‚·Bƒ^ƒCƒ}[ƒƒbƒZ[ƒW‚ª‚‚é“x‚ÉA @ ƒƒjƒ…[‚ȂǂðXV‚·‚邽‚߂̃ƒbƒZ[ƒW‚ª—ˆ‚Ä‚¢‚邿‚¤‚È‹C‚ª‚µ‚Ü‚·B @ ‘½•ªA–{‰Æ Windows ‚Å‚ÍAƒ^ƒCƒ}[ƒƒbƒZ[ƒW‚ª—ˆ‚Ä‚àA‚»‚̂悤‚ÈŽ–‚É‚Í @ ‚È‚ç‚È‚¢‚ñ‚¶‚á‚È‚¢‚©‚ÆŽv‚¢‚Ü‚·B ’ÊíAOnCmdMsg ‚Í•p“x‚ª’á‚¢‚±‚Æ‚ª @ ‘O’ñ‚ɂȂÁ‚Ä‚¢‚é‚Ì‚ÅA‚»‚Ì’†‚Å‘½d‚¢ˆ—‚ð‚µ‚Ä‚¢‚邯A‚Æ‚ñ‚Å‚à‚È‚ @ d‚½‚‚È‚éB ‚È‚¨A“§–¾F‚ðŽg‚Á‚Ä‚¢‚éê‡Aupdate_surface_region ‚Ì’†‚̈—‚ÌŒyd‚É ‚æ‚Á‚ÄA•`‰æ‘¬“x‚ª‘啂ɕςí‚邱‚Æ‚àŠm”F‚µ‚Ü‚µ‚½B ƒ‰ƒ“ƒŒƒ“ƒOƒX‚𔂦‚ăŠ[ƒWƒ‡ƒ“‚ð add_row ‚µ‚Ä‚¢‚é‰ÓŠ‚ðA’Pƒ‚ɉ½‚à ”‚¦‚¸‚És‘S‘Ì‚ÅA1ŒÂ‚¾‚¯ add_row ‚·‚邿‚¤‚É
452 –¼‘OFC³‚µ‚Ä‚Ý‚é‚ÆA•`‰æ‚ª ‚¾‚¢‚Ô‘¬‚‚È‚è‚Ü‚µ‚½i“§–¾‚ɂ͂Ȃè‚Ü‚¹‚ñ‚ªBjB [] [‚±‚±‰ó‚ê‚Ă܂·]
453 –¼‘OFlogin:Penguin [2018/02/20(‰Î) 18:56:15.10 ID:nCkYsCc8.net] >>437 ‚»‚¤‚µ‚½‚¢‚ñ‚Å‚·‚ªA‰½‚©‚Æ‘å•ςȂñ‚Å‚·B 1. ƒ[ƒ‹ƒAƒhƒŒƒX‚Ì“o˜^‚·‚é‚Ì‚ªALinux‚©‚炾‚Æ‘å•ÏB 2. git ‚ÌŽd—l‚ª—Ç‚•ª‚©‚ç‚È‚¢B 3. ‰ñü‚ª’x‚¢‚Ì‚ÅAProject ‚ð Fork ‚µ‚ÄAgit ‚ª Tree ‘S‘Ì‚ð @ƒAƒbƒvƒ[ƒh‚µ‚悤‚Æ‚µ‚Ä‚µ‚Ü‚Á‚½‚è‚È‚ñ‚©‚·‚邯‘å•ςȎ–‚ɂȂéB 4. ‚¾‚©‚çAˆê•”‚̃tƒ@ƒCƒ‹‚¾‚¯‚ð UL ‚µ‚½‚¢‚ªAƒRƒ~ƒ…ƒjƒP[ƒVƒ‡ƒ“‚Ì @–â‘è‚©‚玖î‚ð“`‚¦‚ÄA‚»‚±‚Ü‚Ås‚‚©‚Ç‚¤‚©•ª‚©‚ç‚È‚¢B 5. ‚¾‚©‚çA“ÆŽ©‚ɃI[ƒo[ƒ‰ƒCƒh‚µ‚悤‚Æ‚µ‚½‚Ì‚ªAæ“ú‚©‚炱‚±‚Å‚à @‘‚¢‚Ä‚¢‚½‚±‚Ƃł·Bloader ‚ðC³‚µ‚ÄA‚©‚ÂAŠÂ‹«•Ï”‚ð•Ï‚¦‚Ä @‚â‚ê‚ÎA–{‰Æ‚Æ“‡‚µ‚È‚‚Ä‚àA•”•ª‘‚«•Ï‚¦‚̂悤‚ÈŽ–‚ªo—ˆ‚éB
454 –¼‘OFlogin:Penguin mailto:sage [2018/02/20(‰Î) 18:59:20.15 ID:TT83z4l8.net] >>439 github‚©‚ç‚Å‚àƒvƒ‹ƒŠƒNƒGƒXƒgŽó‚¯•t‚¯‚Ă邿
455 –¼‘OFlogin:Penguin mailto:sage [2018/02/20(‰Î) 19:09:08.87 ID:LN/W3cN7.net] æ‚Éhttps://bugs.winehq.org/‚É‘‚¢‚½•û‚ª‚¢‚¢ •ñ‚µ‚Ä‚ ‚邯ƒpƒbƒ`‘—‚éŽžà–¾‚ªŠy‚ɂȂ邩‚ç
456 –¼‘OFlogin:Penguin mailto:sage [2018/02/20(‰Î) 19:12:23.54 ID:hMkWg0ue.net] •`‰æ‚ª‘‚‚È‚é‚È‚ç‚ ‚肪‚½‚¢ ‘f‚ÌWindows‚æ‚èˆÙ—l‚É’x‚¢ƒQ[ƒ€‚Æ‚©‚ ‚邵
457 –¼‘OF396 mailto:sage [2018/02/20(‰Î) 20:06:46.63 ID:ErFPSqeX.net] Œ‹˜_‚¾‚¯‘‚¢‚Ä‚¨‚‚ÆAsurface‚ª”ñNULL‚ÌŽž‚Ì LineTo ‚ÌŽÀ‘Ì‚ÍA windrv_LineTo‚ÅAsurface ‚ð lock ‚·‚éˆÈŠO‚ÍAdibdrv_LineTo ‚Æ“¯‚¶B dibdrv_LineTo‚ÍAbits ‚È‚épixel”z—ñ‚É 32BIT‚ÌF’l‚ð‘‚«ž‚ÞB ŽÀۂ͔ėp«‚Ì‚½‚ßA•K‚¸and‚µ‚Ä‚©‚çxor‚·‚éBSOLIDƒ‚[ƒh‚Ìê‡Aand’l‚Í0B xor’l‚ÍA00RRGGBB ‚ÅAÅãˆÊƒoƒCƒg‚Í0B ŽÀۂւ̉æ–ʂ̔½‰f‚ÍA’èŠú“I‚Éuxxx->flushv‚È‚éŠÖ”ƒ|ƒCƒ“ƒ^‚ð‰î‚µ‚ÄA x11drv_surface_flush() ‚ðŒÄ‚Ño‚·Ž–‚Ås‚¤B‚»‚Ì’†‚ÅA‹c‘è‚ɂȂÁ‚Ä‚¢‚é update_surface_region() ‚àŒÄ‚΂ê‚éBÅŒã‚É bits ‚Ì“à—e‚ðŽÀ‰æ–ʂɔ½‰f‚³‚¹‚é ‚½‚ßAXShmPutImage()‚Ü‚½‚ÍAXPutImage(), XFlush()‚ðs‚¤B surface->image ‚Ì pixel ƒoƒbƒtƒ@‚ÍAbits[] ”z—ñ‚Æ‹¤’ʂ炵‚¢B ‚‚܂èALinux ‚Ì•`‰æŠÖ”‚Í‘S‚Žg‚킸‚ÉŽ©‘O‚ʼn摜‚ðpixel”z—ñ‚ɇ¬‚µ‚Ä‚©‚çA ’èŠú“I‚ÉAXPutImage() ‚ȂǂŎÀ‚ª–ʂɕ`‚«ž‚ÞA‚Æ‚¢‚¤‚悤‚È‚±‚Æ‚ð‚â‚Á‚Ä‚¢‚é‚炵‚¢B
458 –¼‘OF396 mailto:sage [2018/02/21(…) 16:48:35.77 ID:SJPTXnf1.net] update_surface_region() ‚ª’x‚¢‚ñ‚¾‚ÆŽv‚Á‚ÄA XShape ‚Ì쬂ðAXShapeCombineRectangles() ‚ðŽg‚¤•ûŽ®‚©‚çA XCreateBitmapFromData() ‚Æ XShapeCombineMask() ‚ðŽg‚¤•ûŽ®‚ւƕς¦‚½B ‚·‚邯A1146 x 745 ‚̃TƒCƒY‚Ì Window ‚ÅA 1. Ž©‘O‚̃R[ƒh‚É‚æ‚é 1bit ‚Ì mask bitmap 쬂ɂ©‚©‚鎞ŠÔ : 796 (us) 2. XCreateBitmapFromData() ‚Æ XShapeCombineMask() ‚É‚©‚©‚鎞ŠÔ : 38 (us) 3. XShmPutImage() ‚Æ XFlush() ; x11drv_surface_flush()“à ‚Ì—¼•û‚É‚©‚©‚鎞ŠÔ : 94 (us) 4. MDI Child Wnd ‚ðƒhƒ‰ƒbƒO‚·‚邯‚«‚ÉAx11drv_surface_flush() ‚ª @ ŒÄ‚Ño‚³‚ê‚鎞ŠÔŠÔŠu : @ 3`100 (ms) ---> •bŠÔ 10‰ñ`330‰ñ 5. “÷Šá‚Å•`‰æ‚ªXV‚³‚ê‚é‚Ü‚Å‚É x11drv_surface_flush() ‚ªŒÄ‚Ño‚³‚ê‚é‰ñ” : ”10‰ñ ˆÈã‚ ‚邱‚Æ‚ª‘½‚¢B 1.`4. ‚¾‚¯‚Ý‚é‚ÆA‚‘¬‚Ɉ—‚³‚ê‚Ä‚¢‚é—l‚ÉŒ©‚¦‚邯‚ÇA5. ‚¾‚¯‚ª—‰ð‚Å‚«‚È‚¢B ƒJƒEƒ“ƒ^‚ðÝ‚¯‚Ä”‚¦‚Ä‚Ý‚é‚ÆAŽÀÛ‚É–Ú‚Å‚ÍXV‚ª‹N‚«‚ĂȂ¢‚Ì‚ÉA ‚¿‚á‚ñ‚ÆA1`3 ‚Ì‘S‚Ă̊֔‚ª”\‰ñ‚àŒÄ‚Ño‚³‚ê‚Ä‚¢‚éB ‚¿‚á‚ñ‚ÆuXFlush()v‚³‚ê‚Ä‚¢‚é‚Ì‚ÉA‚È‚º‚¾‚낤HHHH
459 –¼‘OFlogin:Penguin mailto:sage [2018/02/21(…) 17:03:51.93 ID:SJPTXnf1.net] XSync() ‚ð’ljÁ‚µ‚Ä‚àAXShmPutImage() ‚ð XPutImage() ‚ÉC³‚µ‚Ä‚àA ‰½‚ð‚â‚Á‚Ä‚àŒ©‚½–Ú‚¾‚¯‚ªXV‚³‚ê‚È‚¢B
460 –¼‘OFlogin:Penguin mailto:sage [2018/02/21(…) 17:09:56.25 ID:iuEniYB2.net] >>444 > update_surface_region() ‚ª’x‚¢‚ñ‚¾‚ÆŽv‚Á‚ÄA > XShape ‚Ì쬂ðAXShapeCombineRectangles() ‚ðŽg‚¤•ûŽ®‚©‚çA > XCreateBitmapFromData() ‚Æ XShapeCombineMask() > ‚ðŽg‚¤•ûŽ®‚ւƕς¦‚½B ‚±‚¤‚·‚邯‚È‚ñ‚Å‘¬‚‚È‚é‚ÌH
461 –¼‘OF396 mailto:sage [2018/02/21(…) 17:35
] [‚±‚±‰ó‚ê‚Ă܂·]
462 –¼‘OF:51.39 ID:SJPTXnf1.net mailto: >>446 ‚»‚ê‚ÍA >>428-429 ‚Ì•”•ª‚Æ[‚ŠÖŒW‚µ‚Ä‚¢‚Ü‚·B [] [‚±‚±‰ó‚ê‚Ă܂·]
463 –¼‘OFlogin:Penguin mailto:sage [2018/02/21(…) 17:39:34.11 ID:SJPTXnf1.net] X ‚Ì“¯Šú‚Ì–â‘è‚ł͂ȂAMDI Child Wnd ‚Ì TITLE BAR ‚ðƒhƒ‰ƒbƒO‚·‚邯‚«A ‚È‚º‚©A”•bŒo‚Á‚Ä‚©‚çAx11drv_surface_flush() ‚ª‚܂Ƃ߂ĉ½\‰ñ‚àŒÄ‚Ño‚³‚ê‚Ä‚¢‚é ‰Â”\«‚ª‚ ‚é‚©‚àEEEB ƒfƒoƒbƒO•\ަ‚ðƒŠƒAƒ‹ƒ^ƒCƒ€‚ÅŒ©‚Ä‚¢‚邯AŒ©‚½–Ú‚ª•ω»‚·‚é’¼‘O‚܂ŃfƒoƒbƒO•\ަ‚ª ‘S‚o‚¸AŒ©‚½–Ú‚ª•ω»‚·‚é’¼‘O‚ÉA‚ǂǂÁ‚ÆA”\‰ñ•ª‚Ì x11drv_surface_flush() ‚ª‚܂Ƃ߂Äo‚Ä‚‚éA‚Æ‚¢‚¤Œ»Û‚ª‹N‚«‚Ä‚¢‚éB
464 –¼‘OFlogin:Penguin mailto:sage [2018/02/21(…) 17:56:34.37 ID:iuEniYB2.net] >>448 flush‚µ‚ĂȂ¢‚¾‚¯‚ł͂ȂH
465 –¼‘OF396 mailto:sage [2018/02/21(…) 17:57:13.78 ID:SJPTXnf1.net] ˆÈ‰º‚̃R[ƒh‚ª‹C‚ɂȂéB message_count ‚ðŒ¸‚³‚¹‚é‚̂͗BˆêAwait_message() ‚µ‚©Œ©‚‚©‚ç‚È‚©‚Á‚½B Œã‚ÍAcheck_for_driver_events() ‚Ì’†‚Å’P’²‘‰Á‚µ‚Ä‚µ‚Ü‚¤B ƒƒbƒZ[ƒW‚ª‚½‚Ü‚Á‚ĉ‚ß‚ÄAflush_window_surfaces() ‚ªŒÄ‚Ño‚³‚ê‚邿‚¤‚È ƒR[ƒh‚É‚à /* check for driver events if we detect that the app is not properly consuming messages */ static inline void check_for_driver_events( UINT msg ) { @@if (get_user_thread_info()->message_count > 200) { @@@@flush_window_surfaces( FALSE ); @@@@USER_Driver->pMsgWaitForMultipleObjectsEx( 0, NULL, 0, QS_ALLINPUT, 0 ); @@} @@else if (msg == WM_TIMER || msg == WM_SYSTIMER) { @@@@/* driver events should have priority over timers, so make sure we'll check for them soon */ @@@@get_user_thread_info()->message_count += 100; @@} @@else get_user_thread_info()->message_count++; } static DWORD wait_message( DWORD count, const HANDLE *handles, DWORD timeout, DWORD mask, DWORD flags ) { @@DWORD ret = USER_Driver->pMsgWaitForMultipleObjectsEx( count, handles, timeout, mask, flags ); @@if (ret == WAIT_TIMEOUT && !count && !timeout) NtYieldExecution(); @@if ((mask & QS_INPUT) == QS_INPUT) get_user_thread_info()->message_count = 0; @@return ret; }
466 –¼‘OF396 mailto:sage [2018/02/21(…) 17:58:18.49 ID:SJPTXnf1.net] BOOL WINAPI DECLSPEC_HOTPATCH PeekMessageW( MSG *msg_out, HWND hwnd, UINT first, UINT last, UINT flags ) { @@MSG msg; @@USER_CheckNotLock(); @@check_for_driver_events( 0 ); @@if (!peek_message( &msg, hwnd, first, last, flags, 0 )) @@{ @@@@DWORD ret; @@@@flush_window_surfaces( TRUE ); @@@@ret = wow_handlers.wait_message( 0, NULL, 0, QS_ALLINPUT, 0 ); @@@@/* if we received driver events, check again for a pending message */ @@@@if (ret == WAIT_TIMEOUT || !peek_message( &msg, hwnd, first, last, flags, 0 )) return FALSE; @@} @@check_for_driver_events( msg.message ); @@/* copy back our internal safe copy of message data to msg_out. @@ * msg_out is a variable from the *program*, so it can't be used @@ * internally as it can get "corrupted" by our use of SendMessage() @@ * (back to the program) inside the message handling itself. */ @@if (!msg_out) @@{ @@@@SetLastError( ERROR_NOACCESS ); @@@@return FALSE; @@} @@*msg_out = msg; @@return TRUE; }
467 –¼‘OF396 mailto:sage [2018/02/21(…) 18:24:27.09 ID:SJPTXnf1.net] >>449 PeekMessage()‚ð‰ñ‚µ‚Ä‚¢‚邾‚¯‚ÌŽž‚ÅAƒƒbƒZ[ƒW‚ªƒLƒ…[‚ÉŽc‚葱‚¯‚Ä‚¢‚éê‡A ƒƒbƒZ[ƒW‚ð 200‰ñ (100‰ñH) PeekMessage ‚·‚é‚܂łÍAflush_window_surfaces() ‚³‚ê‚È‚¢ƒR[ƒh‚ɂȂÁ‚Ä‚¢‚é‹C‚ª‚µ‚Ü‚¹‚ñ‚©EEEB
468 –¼‘OFlogin:Penguin [2018/02/21(…) 18:32:33.53 ID:SJPTXnf1.net] GetMessage() ‚Ì•û‚à‚Ù‚Ú“¯‚¶‚悤‚ÈŠ´‚¶‚©‚àBB ‚Ƃɂ©‚Aflush_window_surfaces() ‚ª‚ƂÂà‚È‚’·‚¢ŠÔAŒÄ‚΂ê‚È‚¢‚±‚Æ‚ª ‚ ‚éƒR[ƒh‚ɂȂÁ‚Ä‚¢‚é—l‚ÉŒ©‚¦‚ÄAŽÀÛAŽÀŒ±‚µ‚Ä‚à‚»‚¤Žv‚¦‚éB
469 –¼‘OFlogin:Penguin mailto:sage [2018/02/21(…) 18:38:45.85 ID:SJPTXnf1.net] ‚»‚¤‚©A‚à‚Æ‚à‚Æ‚ÍAdirty bit •ûŽ®‚¶‚á‚È‚¢‚©‚çAflush_window_surfaces() ‚ðŒÄ‚Ô‚ÆA ÄŒvŽZ‚·‚é•K—v‚ª–³‚¢‚̂ɕK‚¸ÄŒvŽZ‚³‚ê‚Ä‚µ‚Ü‚¤‚©‚çAŒÄ‚Ño‚·•p“x‚ð‰º‚°‚邵‚© ‚‘¬‰»‚·‚é•û–@‚ª–³‚¢‚½‚ß‚ÉA‚»‚ñ‚È•—‚ȃR[ƒh‚ɂȂÁ‚Ä‚¢‚é‚Ì‚©‚à‚µ‚ê‚È‚¢B
470 –¼‘OFlogin:Penguin mailto:sage [2018/02/21(…) 18:41:37
] [‚±‚±‰ó‚ê‚Ă܂·]
471 –¼‘OF.14 ID:SJPTXnf1.net mailto: ‚»‚µ‚ÄAflush_window_surfaces() ‚̃R[ƒh‚Å‚ÍAÅ’á‚Å‚à 50 (ms) ‚ÌŽžŠÔ‚ªŒo‚Á‚Ä‚¢‚È‚¢ê‡‚É‚Í ˆ—‚ðƒXƒLƒbƒv‚·‚éƒR[ƒh‚ɂȂÁ‚Ä‚¢‚éB‚Æ‚±‚Æ‚ñAflush() ‚µ‚È‚¢ƒR[ƒh‚ɂȂÁ‚Ä‚µ‚Ü‚Á‚Ä‚¢‚éB ‚±‚ê‚炪Œ´ˆö‚©EEEB void flush_window_surfaces( BOOL idle ) { @@static DWORD last_idle; @@DWORD now; @@struct window_surface *surface; @@EnterCriticalSection( &surfaces_section ); @@now = GetTickCount(); @@if (idle) last_idle = now; @@/* if not idle, we only flush if there's evidence that the app never goes idle */ @@else if ((int)(now - last_idle) < 50) goto done; @@LIST_FOR_EACH_ENTRY( surface, &window_surfaces, struct window_surface, entry ) @@@@surface->funcs->flush( surface ); done: @@LeaveCriticalSection( &surfaces_section ); } [] [‚±‚±‰ó‚ê‚Ă܂·]
472 –¼‘OF396 mailto:sage [2018/02/21(…) 18:58:29.00 ID:SJPTXnf1.net] Œ³X‚Ì Windows ‚Å‚ÍALineTo ‚ȂǂðŽÀs‚·‚邯uŠÔ“I‚ÉŽÀ‰æ–ʂɔ½‰f‚³‚ê‚éB ‚¾‚©‚çA‚»‚à‚»‚à Flush ‚¹‚¸‚ÉŒ©‚¦‚È‚¢‚܂܂̕`‰æ‚ªŽc‚Á‚Ä‚¢‚é‚È‚ñ‚ÄŽžŠÔ‚Í ‚Ù‚Ú 0B ‚»‚¤l‚¦‚邯ABWine ‚Ì‚±‚ÌŽÀ‘•‚Í‚¨‚©‚µ‚¢‚ÈEEEB 1. ‚»‚à‚»‚àƒƒbƒZ[ƒWƒ‹[ƒv‚ð‰ñ‚µ‚Ä‚¢‚鎞‚µ‚© flush ‚³‚ê‚é‰Â”\«‚ª‘S‚‚È‚¢ @ ŽÀ‘•‚ɂȂÁ‚Ä‚µ‚Ü‚Á‚Ä‚¢‚é‚炵‚¢B 2. ƒƒbƒZ[ƒWƒ‹[ƒv‚ð‰ñ‚µ‚Ä‚¢‚Ä‚àAƒƒbƒZ[ƒW‚ªƒLƒ…[‚ÉŽc‚Á‚Ä‚¢‚鎞‚ÍA @ 100‰ñ’ö“xƒƒbƒZ[ƒW‚ð“ǂ܂Ȃ¢ŒÀ‚èAflush ‚³‚ê‚È‚¢B Windows ‚ðuƒGƒ~ƒ…ƒŒ[ƒgv‚·‚é‚̂ł ‚ê‚ÎA—Ⴆ‚ÎA•`‚¢‚Ä‚©‚ç 50(ms) Œo‚Ä‚ÎA •K‚¸ flush ‚·‚éA‚Æ‚¢‚¤ŽÀ‘•‚łȂ‚Ă͂Ȃç‚È‚¢‚Í‚¸B Linux ‚Å‚ÍAƒ^ƒCƒ}[ˆ—‚ª“‚¢‚Ì‚©‚ÈHHH
473 –¼‘OFlogin:Penguin mailto:sage [2018/02/21(…) 19:03:48.84 ID:SJPTXnf1.net] 1. Windows (‚à‚¿‚ë‚ñANTŒn) ‚ÌꇂÍAƒƒbƒZ[ƒWEƒ‹[ƒv’·‚‹A‚Á‚Ä‚±‚È‚¢ƒvƒƒOƒ‰ƒ€‚à @â‘΃_ƒ‚Æ‚¢‚¤‚킯‚ł͂Ȃ¢B 2. ‚»‚¤‚¢‚¤ƒvƒƒOƒ‰ƒ€‚Ìê‡AWine ‘¤‚ÍA•`‰æ‚ðAˆê’莞ŠÔŠÔŠu‚ÅA•ʃXƒŒƒbƒh‚Ì @ ƒ^ƒCƒ}[Š„‚螂݂̒†‚ȂǂŠflush ‚·‚邿‚¤‚É‚µ‚È‚¢‚ÆA ³‚µ‚AEmulation o—ˆ @ ‚È‚¢‚Í‚¸B
474 –¼‘OFlogin:Penguin mailto:sage [2018/02/21(…) 19:05:31.10 ID:SJPTXnf1.net] Š„‚螂݂ȂçA•ʃXƒŒƒbƒh‚ð‹N‚±‚·•K—v‚ª–³‚©‚Á‚½BƒXƒ}ƒ\B ‚ ‚ÆAŒëŽš’ù³F ŒëF@ƒƒbƒZ[ƒWEƒ‹[ƒv’·‚‹A‚Á‚Ä‚±‚È‚¢ƒvƒƒOƒ‰ƒ€‚à ³F@ƒƒbƒZ[ƒWEƒ‹[ƒv‚É’·‚‹A‚Á‚Ä‚±‚È‚¢ƒvƒƒOƒ‰ƒ€‚à
475 –¼‘OFlogin:Penguin mailto:sage [2018/02/21(…) 19:13:35.32 ID:iuEniYB2.net] ‚¤[‚ñ ‚±‚ꂪƒ{ƒgƒ‹ƒlƒbƒN‚ɂȂÁ‚Ä‚¢‚邿‚¤‚ɂ͌©‚¦‚È‚¢ \‚µ–ó‚È‚¢‚ñ‚¾‚¯‚Ç•`‰æ‚ª’x‚‚È‚éðŒ‚ð‚à‚¤ˆê“x‘‚¢‚Ä‚à‚ç‚Á‚Ä‚¢‚¢‚Å‚·‚©H
476 –¼‘OF396 mailto:sage [2018/02/21(…) 23:23:31.14 ID:4g3iPm6d.net] ‚¤[‚ñ‚ÆB‚»‚ê‚͂܂ ‚¿‚å‚Á‚Æ’u‚¢‚Ä‚¨‚¢‚ÄAAAB MDI Child Wnd ‚Ì TITLE BAR ‚ð Drag ‚µ‚Ä‚¢‚éÅ’†AƒƒbƒZ[ƒWƒ‹[ƒv‚͈ê‚Â‚à ‰ñ‚Á‚ĂȂ¢‚ñ‚¶‚á‚È‚¢‚©‚ÆŽv‚¤B ‚¾‚©‚çA>>456 ‚Ìu1.v‚É‘‚¢‚½uflush‚³‚ê‚é•K—vðŒv‚ª–ž‚½‚³‚ê‚ĂȂ¢B ‚»‚Ì‚½‚ßAsurface ‚Ì pixel”z—ñ‚Ì“à—e‚ªŽÀ‰æ–ʂɔ½‰f‚³‚ê‚È‚¢‚̂ł͂Ȃ©‚낤‚©B
477 –¼‘OF396 mailto:sage [2018/02/21(…) 23:38:56.14 ID:4g3iPm6d.net] ƒhƒ‰ƒbƒO’†‚Ƀ}ƒEƒX‚ðÃŽ~‚³‚¹‚Ä‚µ‚΂炑҂Á‚Ä‚¢‚邯A x11drv_surface_flush() ‚Æ flush_surface_region() ‚Ì—¼•û‚ªŒÄ‚Ño‚³‚ê‚½Ž–‚ª FIXME o—͂Ŋm”F‚Å‚«‚½B ÃŽ~‚³‚¹‚¸‚Ƀ}ƒEƒX‚ðƒhƒ‰ƒbƒO‚µ‘±‚¯‚邯AFIXME o—Í‚ª‘S‚‚łȂ¢B ‚µ‚©‚àA‚»‚ê‚ðs‚Á‚½ŽžŠÔ‚ª’·‚¢‚ÆAƒ}ƒEƒXƒ{ƒ^ƒ“‚𗣂µ‚½Œã‚àA”ñí‚É’·‚¢ŠÔ ƒVƒXƒeƒ€‘S‘Ì‚ªƒnƒ“ƒOƒAƒbƒv‚µ‚½—l‚Èó‘ԂɂȂéB‚»‚µ‚ÄA’·‚¢’¾–Ù‚ÌŒãAFIXMEo—Í‚ª o‚éB ‚±‚Ì’¾–Ù‚ÌŽžŠÔ‚ÍA‚»‚ê‚܂Ńhƒ‰ƒbƒO‚µ‚Ä‚¢‚½ŽžŠÔ‚É”ä—Ⴕ‚Ä‚¢‚邿‚¤‚ÉŽv‚¦‚éB ‚È‚º‚¾‚낤HHH@‚±‚ê‚͂ǂ±‚©‚Éu‰½‚©‚ª—‚Ü‚Á‚Ä‚¢‚évŽž‚ÌŒ»Û‚Ì—l‚ÉŽv‚¦‚éB ‚µ‚©‚µA>>450 ‚ðŒ©‚é‚ÆAmessage_cnt ‚ÍAŒ¸‚炳‚ê‚邯‚«‚ÍAˆêŠú‚É 0 ‚ɂȂé‚̂ł ‚Á‚ÄA ‚µ‚¸‚ÂŒ¸‚炳‚ê‚é‚킯‚ł͂Ȃ¢B “䂾EEEB
478 –¼‘OFlogin:Penguin mailto:sage [2018/02/21(…) 23:42:58.43 ID:iuEniYB2.net] ’P‚ɃCƒxƒ“ƒg‚ð‘—M‚·‚鑤‚Ńoƒbƒtƒ@ƒŠƒ“ƒO‚µ‚Ä‚é‚ñ‚¶‚á‚È‚¢‚ÌH
479 –¼‘OFlogin:Penguin mailto:sage [2018/02/21(…) 23:50:18.32 ID:iuEniYB2.net] ‚Ü‚ ʼn‚©‚çƒ}ƒ‹ƒ`ƒXƒŒƒbƒhˆÓޝ‚µ‚Ä‘‚¢‚½Š´‚¶‚ł͂Ȃ¢‚ȂƎv‚¤‚¯‚Ç90”N‘ã‚©‚çŠJ”‚³‚ê‚Ä‚é‚킯‚¾‚µ‚»‚̂ւñ‚Í‚²ˆ¤›g‚¶‚á‚È‚¢
480 –¼‘OF396 mailto:sage [2018/02/22(–Ø) 00:35:51.88 ID:9+xI5ulA.net] >>450-451 •Ó‚è‚̃\[ƒX‚ðŒ©‚Ä‚¢‚ÄA”w—–@‚ÅŒê‚Á‚Ă݂½‚¢B ‰¼’è1FuDrag ’†‚Å‚àAPeekMessage ‚³‚ê‚Ä‚¢‚éBv ‚Ɖ¼’è‚·‚éB ‰¼’è2. “§–¾‰»‚µ‚½Û‚Éd‚‚È‚é‚Ì‚ÍAflush_window_surfaces() ‚ÆA @@@@‚»‚±‚©‚çŒÄ‚Ño‚³‚ê‚é update_surface_region() ‚݂̂¾‚Ɖ¼’è‚·‚éB •â‘«F update_surface_region() ‚ÍA“§–¾‰»‚Ì‚½‚ß‚Ì Shape ‚Ì쬂̈—‚ª @@@ ‚³‚ê‚é‚Ì‚ÅAd‚¢B @@@ flush_window_surfaces() ‚ÍAupdate_surface_region() ‚ðŒÄ‚Ño‚· @@@ ˆÈŠO‚É‚àAXPutImage() Œn‚̈—‚ª“ü‚é‚Ì‚ÅA‚³‚ç‚Éd‚¢B ‰¼’è2‚ɂ‚¢‚Ä‚ÍA“§–¾‰»Žž‚ÉA‚»‚êˆÈŠO‚Éd‚¢ŠÖ”‚ªoŒ»‚·‚é‰Â”\«‚ð”Û’è‚Í ‚Å‚«‚È‚¢B‚È‚º‚È‚çAsurface ‚̈—‚ÍA“§–¾‰»‚µ‚È‚¢Žž‚É‚Ís‚í‚ê‚È‚¢‚©‚à ’m‚ê‚È‚¢‚©‚ç‚Å‚ ‚éB‚»‚Ìê‡ALineTo ‚ÌŠÖ”‚ªØ‚è‘Ö‚í‚éB 1. FIXME ‚ÅŒ©‚Ä‚¢‚éŒÀ‚èAƒhƒ‰ƒbƒO’†‚ÍA‚»‚ê‚ç‚ÌŠÖ”‚Í‘S‚ŒÄ‚Ño‚³‚ê‚È‚¢B 2. >>451 ‚ðŒ©‚é‚ÆAPeekMessage ‚µ‚½Û‚ÉAƒLƒ…[‚ɃƒbƒZ[ƒW‚ªŽc‚Á‚ĂȂ¢‚È‚çA @ flush_window_surfaces() ‚ªŒÄ‚Ño‚³‚ê‚é‚Í‚¸B 3. u‰¼’è2v ‚ÌŠÖ”‚͌Ă΂ê‚ĂȂ¢‚Ì‚¾‚©‚çAƒLƒ…[‚̃ƒbƒZ[ƒW‚ÍA“§–¾‰»‚³‚ê @‚ĂȂ¢ê‡‚Æ“¯’ö“x‚É‚‘¬‚Ɉ—‚³‚ê‚Ä‚à‚¨‚©‚µ‚‚È‚¢B 4. ‚à‚µ‚»‚¤‚Å‚ ‚ê‚ÎAƒLƒ…[‚̃ƒbƒZ[ƒW‚Í‚ ‚Á‚Æ‚¢‚¤ŠÔ‚Éu‹óv‚ɂȂé‚Í‚¸B 5. ‹ó‚ɂȂÁ‚½‚Æ‚µ‚½‚çAu2.v‚Ì’Ê‚è‚ÉAflush_window_surfaces() ‚ªŒÄ‚Ño‚³‚ê‚é‚Í‚¸B 6. ‚µ‚©‚µAu1.v‚Åq‚ׂ½‚悤‚ÉAŽÀŒ±“I‚É‚ÍAflush_window_surfaces() ‚͌ĂÑo‚³‚ê‚ĂȂ¢B 7. –µ‚‚Å‚ ‚éB 8. ”w—–@‚É‚æ‚èA‚±‚ê‚ÍA‰¼’è‚̂Ȃ‚Æ‚àˆê•û‚ªŠÔˆá‚Á‚Ä‚¢‚鎖‚ðˆÓ–¡‚·‚éB
481 –¼‘OF396 mailto:sage [2018/02/22(–Ø) 00:45:26.84 ID:9+xI5ulA.net] ‚ ‚é‚¢‚ÍAPeek ‚³‚ê‚邾‚¯‚ÅAˆê•”‚̃ƒbƒZ[ƒW‚ÍŽæ‚èŽc‚³‚ê‚é‚È‚çEEEB
482 –¼‘OF396 mailto:sage [2018/02/22(–Ø) 01:30:28.67 ID:9+xI5ulA.net] Wine ‚ÅAMDI Child Wnd ‚Ì TITLE BAR ‚ðƒhƒ‰ƒbƒO‚µ‚½‚Æ‚«‚̈—‚ɂ‚¢‚ÄB DEFWND_DefWinProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) -->case WM_NCLBUTTONDOWN -->NC_HandleNCLButtonDown() -->case HTCAPTION -->SendMessageW( hwnd, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, lParam ) -->DEFWND_DefWinProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) -->case WM_SYSCOMMAND -->NC_HandleSysCommand() -->WINPOS_SysCommandSizeMove() ÅŒã‚ÌŠÖ”‚ÍAƒ^ƒCƒgƒ‹ƒo[‚ðƒhƒ‰ƒbƒO‚ðŠJŽn’¼Œã‚Ɉê‰ñ‚¾‚¯ŒÄ‚Ño‚³‚ê‚鎖 ‚ðŠm”F‚µ‚½B‚»‚ÌŒã‚̃hƒ‰ƒbƒO’†‚͌ĂÑo‚³‚ꂸA‚±‚ÌŠÖ”‚Ì“à•”‚Ńhƒ‰ƒbƒO ‚̈—‚ª‚³‚ê‚Ä‚¢‚é‰Â”\«‚ª‚‚¢B ‚±‚ÌÅŒã‚ÌŠÖ”‚Ì’†‚ÉAŽŸ‚̂悤‚ÈAƒƒbƒZ[ƒWEƒ‹[ƒv‚ª‚ ‚éF if (!GetMessageW( &msg, 0, 0, 0 )) break; if (CallMsgFilterW( &msg, MSGF_SIZE )) continue; /* Exit on button-up, Return, or Esc */ if ((msg.message == WM_LBUTTONUP) || ((msg.message == WM_KEYDOWN) && ((msg.wParam == VK_RETURN) || (msg.wParam == VK_ESCAPE)))) break; if ((msg.message != WM_KEYDOWN) && (msg.message != WM_MOUSEMOVE)) { TranslateMessage( &msg ); DispatchMessageW( &msg ); continue; /* We are not interested in other messages */ }
483 –¼‘OF396 mailto:sage [2018/02/22(–Ø) 01:32:06.83 ID:9+xI5ulA.net] ‚³‚ç‚ÉŽŸ‚̂悤‚ÈA˜g‚¾‚¯‚ð‘‚‚©AŽÀÛ‚É“®‚©‚µ‚Ä‚µ‚Ü‚¤ƒR[ƒh‚ª‘±‚ : if (!DragFullWindows) draw_moving_frame( parent, hdc, &sizingRect, thickframe ); else { RECT rect = sizingRect; MapWindowPoints( 0, parent, (POINT *)&rect, 2 ); SetWindowPos( hwnd, 0, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, ( hittest == HTCAPTION ) ? SWP_NOSIZE : 0 ); }
484 –¼‘OF396 mailto:sage [2018/02/22(–Ø) 02:01:49.71 ID:9+xI5ulA.net] ‚ [B FIXME‚ðÁ‚µ‚Ä‚µ‚Ü‚Á‚Ä‚¢‚½‚¾‚¯‚¾‚Á‚½EEEB update_surface_region() ‚âAflush_window_surfaces() ‚ÍA ƒhƒ‰ƒbƒO’†‚Å‚àAƒ}ƒEƒX‚ðÃŽ~‚µ‚Ä‚µ‚΂炂·‚邯ŒÄ‚΂ê‚邿‚¤‚Å‚·B ƒ}ƒEƒX‚ð“®‚©‚µ‚‚¯‚Ä‚¢‚邯ŒÄ‚΂ê‚È‚¢‚炵‚¢B
485 –¼‘OF396 mailto:sage [2018/02/22(–Ø) 02:44:50.36 ID:9+xI5ulA.net] y‚â‚Á‚ÆŒ´ˆö”»–¾z CMainFrame ‚ð WS_EX_LAYERED ‚Å“§–¾‰»‚µ‚Ä‚¢‚ÄA¡‰ñ‚ÌðŒ‚É“–‚Ă͂Ü
486 –¼‘OF‚鎞‚ÉA CMDIClientWnd ‚̃^ƒCƒgƒ‹ƒo[ã‚Ń}ƒEƒX‚̶ƒ{ƒ^ƒ“‚ð‰Ÿ‚µŽn‚ßA‚»‚Ì‚Ü‚Ü ƒ}ƒEƒX‚ð‚¸‚Á‚Æ“®‚©‚µ‘±‚¯‚邯AWINPOS_SysCommandSizeMove() ‚Ì’†‚Ì if (!GetMessageW( &msg, 0, 0, 0 )) break; ‚Ì•”•ª‚Ì GetMessageW() ŠÖ”‚Ì’†‚Å’âŽ~‚µ‚Ä‚µ‚Ü‚¤BÚׂÍAGetMessageW() ‚Ì ’†‚ÅAƒƒbƒZ[ƒWƒLƒ…[‚ª‹ó‚¾‚Á‚½ê‡‚ɌĂÑo‚³‚ê‚邯‚±‚ë‚ÌA wait_objects()@@@ ;dlls/user32/message.c -->wow_handlers.wait_message() -->wait_message()@@;dll/user32/winproc.c -->USER_Driver->pMsgWaitForMultipleObjectsEx() -->X11DRV_MsgWaitForMultipleObjectsEx() ‚ÌÅŒã‚ÌŠÖ”‚Ì’†‚Å’âŽ~‚µ‚Ä‚µ‚Ü‚¤B ³í‚È‚çAWM_NCMOUSEMOVE ƒƒbƒZ[ƒW‚ª“ž’…‚·‚邱‚Ƃɂæ‚Á‚ÄAŠÖ”‚©‚ç –ß‚Á‚Ä—ˆ‚é‚Í‚¸‚¾‚ÆŽv‚í‚ê‚éB [] [‚±‚±‰ó‚ê‚Ă܂·]
487 –¼‘OF396 mailto:sage [2018/02/22(–Ø) 10:45:19.02 ID:9+xI5ulA.net] >>469 2‚Â–Ú‚Ì WaitForMultipleObjectsEx() ‚Ì’†‚Å’âŽ~‚µ‚Ä‚µ‚Ü‚Á‚Ä‚¢‚邱‚Æ‚ª”»–¾B –{—ˆA擪‚É Msg ‚ª•t‚•û‚Ì API ‚ÍAƒƒbƒZ[ƒW‚Æ HANDLE ‚Ì—¼•û‚𓯎ž‚É ŠÄŽ‹‚·‚邿‚¤‚ȃR[ƒh‚łȂ‚Ă͂Ȃç‚È‚¢ƒnƒY‚Ȃ̂ÉA‚»‚¤‚È‚Á‚ĂȂ¢‚炵‚¢B process_events() ‚ªAMotionNotify ‚Ì XEvent ‚ª—ˆ‚Ä‚¢‚½‚ç WM_MOUSEMOVE ƒƒbƒZ[ƒW‚ðƒLƒ…[‚Ƀ|ƒXƒg‚·‚é‚炵‚¢‚ªAʼn‚Ɉê“x‚¾‚¯’²‚×‚Ä XEvent ‚ª —ˆ‚Ä‚¢‚È‚¢ê‡‚ÍAˆÈŒãA‘S‚ XEvent ‚𒲸‚¹‚¸‚É‘¼‚Ì HANDLE ŒQ‚̕ω»‚¾‚¯ ‚ð‘Ò‹@‚µ‚Ä‚µ‚Ü‚¤‚炵‚¢B DWORD CDECL X11DRV_MsgWaitForMultipleObjectsEx( DWORD count, const HANDLE *handles, @@@@@@@@@@@@@@@@@@@@@@@@DWORD timeout, DWORD mask, DWORD flags ) { @@DWORD ret; @@struct x11drv_thread_data *data = TlsGetValue( thread_data_tls_index ); @@if (!data) { @@@@if (!count && !timeout) return WAIT_TIMEOUT; @@@@return WaitForMultipleObjectsEx( count, handles, flags & MWMO_WAITALL, @@@@@@@@@@@@@@@@@@@@ timeout, flags & MWMO_ALERTABLE ); @@} @@if (data->current_event) mask = 0;@/* don't process nested events */ @@if (process_events( data->display, filter_event, mask )) ret = count - 1; @@else if (count || timeout) { @@@@ret = WaitForMultipleObjectsEx( count, handles, flags & MWMO_WAITALL, @@@@@@@@@@@@@@@@@@@@timeout, flags & MWMO_ALERTABLE ); @@@@if (ret == count - 1) process_events( data->display, filter_event, mask ); @@} @@else ret = WAIT_TIMEOUT; @@return ret; }
488 –¼‘OF396 mailto:sage [2018/02/22(–Ø) 10:46:53.05 ID:9+xI5ulA.net] y’Ê펞AWM_MOUSEMOVE ‚ªƒLƒ…[‚֒ljÁ‚³‚ê‚鎞‚ÌŽÀsŒo˜Hz X11DRV_MsgWaitForMultipleObjectsEx() --> process_events() ---> call_event_handler( Display *display, XEvent *event ) ---> handlers[event->type]( hwnd, event ); event->type = MotionNotify (6) ---> X11DRV_MotionNotify( HWND hwnd, XEvent *xev ) XMotionEvent *event = &xev->xmotion; INPUT input; ---> send_mouse_input( hwnd, event->window, event->state, &input ); ---> __wine_send_input( HWND hwnd, const INPUT *input ) ---> send_hardware_message( hwnd, input, 0 ); SERVER_START_REQ( send_hardware_message ) { switch (input->type) case INPUT_MOUSE: } ---> wine_server_call( req ); ---> DECL_HANDLER(send_hardware_message) (send a hardware message to a thread queue) ---> queue_mouse_message( desktop, req->win, &req->input, req->flags, sender ); messages[MOUSEEVENTF_MOVE (1)] = WM_MOUSEMOVE ---> queue_hardware_message() : WM_MOUSEMOVE list_add_tail( &input->msg_list, &msg->entry ); set_queue_bits( thread->queue, get_hardware_msg_bit(msg) ); ---> if (!always_queue || merge_message( input, msg )) free_message( msg ); else { msg->unique_id = 0; /* will be set once we return it to the app */ list_add_tail( &input->msg_list, &msg->entry ); set_queue_bits( thread->queue, get_hardware_msg_bit(msg) ); }
489 –¼‘OF396 mailto:sage [2018/02/22(–Ø) 10:47:48.18 ID:9+xI5ulA.net] yWM_NCMOUSEMOVE ‚Í WM_MOUSEMOVE ‚©‚çC³‚³‚ê‚éz PeekMessageW() ‚Ü‚½‚Í GetMessageW() ‚Ì’†‚ÅAhittest ‚ª HTCLIENT ˆÈŠO ‚ÌꇂÍAWM_MOUSEMOVE ‚ª WM_NCMOUSEMOVE ‚ÉC³‚³‚ê‚é : PeekMessageW() ‚Ü‚½‚ÍAGetMessageW() ---> peek_message() ---> switch(info.type) @@ case MSG_HARDWARE : ---> process_hardware_message() ---> process_mouse_message() { @@ if (hittest != HTCLIENT) { @@@ message += WM_NCMOUSEMOVE - WM_MOUSEMOVE; @@@ wparam = hittest; @@ }
490 –¼‘OFlogin:Penguin [2018/02/22(–Ø) 15:16:45.32 ID:9+xI5ulA.net] “ª‚É Msg ‚ª•t‚©‚È‚¢•û‚Ì WaitForMultipleObjecstEx() ‚à ‹““®‚ª‚¨‚©‚µ‚¢B timeout ‚É 0 ‚ðŽw’肵‚Ä‚àA–³ŒÀ‚É ‘Ò‹@‚µ‚Ä‚µ‚Ü‚¤‚±‚Æ‚ª‚ ‚éB
491 –¼‘OF396 mailto:sage [2018/02/22(–Ø) 16:31:11.62 ID:9+xI5ulA.net] Msg ‚ª•t‚•û‚Ì WaitXxxx ‚ÅAusleep() ‚ÅA0.3•
492 –¼‘OFb‚Ù‚Ç’âŽ~‚µ‚È‚ª‚çA Polling (Loop) ‚·‚邿‚¤‚É‚µ‚Ä‚©‚çAFIXME‚ŃƒbƒZ[ƒW‚ðŠÏŽ@‚µ‚Ă݂½B •’i‚ÍAusleep() –½—ß‚ÍAŒÄ‚Ño‚µ‚Ä‚©‚ç 0.3 •b‚Å–ß‚Á‚Ä‚‚éB ‚Æ‚±‚낪Aæ“ú‚©‚ç‚Ì’x‚‚È‚éðŒ‚Ńhƒ‰ƒbƒO‚µ‘±‚¯‚½ê‡A’Pƒ‚È usleep() ‚Ì 1–½—ß‚ªAŒÄ‚Ño‚µ‚Ä‚©‚çA‰i‹v‚É–ß‚Á‚Ä‚±‚È‚‚È‚éBƒhƒ‰ƒbƒO‚ð‚â‚߂邯A lŠÔ‚ª’·‚Š´‚¶‚é‚قǂ̒·‚¢ŽžŠÔ‚ªŒo‰ß‚µ‚Ä‚©‚ç–ß‚Á‚Ä‚‚éB ‚±‚ê‚ÍAWINE‚Ì–â‘è‚ł͂ȂALinux Kernel ‚Ì–â‘肾‚낤‚©HHH [] [‚±‚±‰ó‚ê‚Ă܂·]
493 –¼‘OF396 mailto:sage [2018/02/22(–Ø) 16:45:23.34 ID:9+xI5ulA.net] ‚â‚Á‚½‚±‚Æ‚ð‚à‚¤‚¿‚å‚Á‚ÆÚ‚µ‚‘‚¢‚Ä‚¨‚‚ÆA >>470 ‚Ì X11DRV_MsgWaitForMultipleObjectsEx() ‚ÌŠÖ”‚Ì2”Ô–Ú‚Ì WaitForMultipleObjectsEx() ‚̌ĂÑo‚µ‚̉ӊ‚ðŽŸ‚Ì—l‚ÉC³‚µ‚Ă݂½B (FIXME ‚Í‚à‚Á‚Æ•t‚¯‚Ä‚ ‚邪ȗª): if ( timeout == INFINITE ) { @@//*’†—ª* @@for ( ;; ) {@// ‹ê“÷‚Ì polling loop : @@@@ret = WaitForMultipleObjectsEx( count, handles, bWaitAll, @@@@@@@@0, // (ms) (Žw’肵‚Ä‚àãŽè‚s‚©‚È‚¢‚Ì‚Å0‚É‚µ‚Ă݂½) @@@@@@@@bAlertable ); @@@@if ( ret == WAIT_TIMEOUT ) { @@@@@@if ( process_events( data->display, filter_event, mask ) ) { @@@@@@@@ret = count; @@@@@@@@break; @@@@@@} @@@@} @@@@else { @@@@@@break; @@@@} @@@@FIXME( "call usleep\n" );@//(1) @@@@usleep(1000 * 300);@@@@//(2) Žd—lã‚ÍA300(ms)Œã‚É–ß‚éB @@@@FIXME( "returned from usleep\n" ); //(3) @@} } else { @@ret = WaitForMultipleObjectsEx( count, handles, flags & MWMO_WAITALL, @@@@@@@@@@@@@@@@@@timeout, flags & MWMO_ALERTABLE ); } ŠY“–‚ÌðŒ‚ÌŽž‚Ƀ}ƒEƒX‚ð“®‚©‚µ‘±‚¯‚邯A(1)‚̃ƒbƒZ[ƒW‚ªo‚½ŒãA (3)‚̃ƒbƒZ[ƒW‚ªAŽ–ŽÀãA–³ŒÀ‚ɑ҂Á‚Ä‚ào‚Ä‚±‚È‚‚È‚Á‚½Bƒhƒ‰ƒbƒO‚µ‚Ä ‚È‚¢‚Æ‚«‚É‚ÍAusleep()‚ÌŽd—l’Ê‚èA300(ms)Œã‚ɃƒbƒZ[ƒW‚ªo‚Ä‚‚éB
494 –¼‘OF396 mailto:sage [2018/02/22(–Ø) 17:29:11.00 ID:9+xI5ulA.net] ‚©‚È‚èFX‚â‚Á‚½‚‚à‚肾‚¯‚ÇA‚¿‚å‚Á‚Æ‚±‚êˆÈã[“ü‚è‚͓‚¢‚Ì‚ÅA‚à‚¤’ú‚߂悤‚©‚àB ˆÈ‰º‚Ì㋞‚©‚ç‚·‚邯LinuxƒJ[ƒlƒ‹‚Ì–â‘è‚©‚à’m‚ê‚È‚¢F 1. ƒ^ƒXƒNƒo[‚à‘€ì•s”\‚ɂȂéB 2. ’Pƒ‚È usleep() ‚à–³ŒÀ‚É‹A‚Á‚Ä‚±‚È‚¢B
495 –¼‘OF396 mailto:sage [2018/02/22(–Ø) 17:39:46.66 ID:9+xI5ulA.net] Wine‚Å‚ÍAÌ‚Ì MSDN Library ‚Ì CD ‚àƒCƒ“ƒXƒg[ƒ‹‚Ío—ˆ‚½‚¾‚ªŒ©‚ç‚ê‚È‚©‚Á‚½B hh.exe ‚ª xxx.COL ƒtƒ@ƒCƒ‹‚ðŠJ‚¯‚È‚¢‚ÆŒ¾‚Á‚Ä‚‚éB yyy.CHM ƒtƒ@ƒCƒ‹‚ÍAŠJ‚‚±‚Ƃ͂ł«‚½‚ªA‰E‚̃y[ƒ“‚¾‚¯‚ªŒ©‚¦‚ÄA¶‘¤‚Ì–ÚŽŸ‚â ŒŸõ‚Ì‚Ø[ƒ“‚ɂ͉½‚à•\ަ‚³‚ê‚È‚¢B ¡‰ñ WINE‚̃\[ƒX‚ðŒ©‚ÄŽv‚¤‚Ì‚ÍAˆÓŠO‚Æ‚¿‚á‚ñ‚Æ‘‚©‚ê‚Ä‚¢‚È‚¢‚Æ‚¢‚¤‚±‚ÆB MsgWaitXxxx ‚É‚àA–ß‚è’l‚ª–¾‚ç‚©‚ÉŠÔˆá‚Á‚Ä‚¢‚é•”•ª‚𔌩‚µ‚½B ‚Ü‚½ATRUE (1)‚ðˆø”‚É“n‚·•K—v‚ª‚ ‚邯‚±‚ë‚ÅA1‚ł͂Ȃ¢”ñ0 ‚Ì’l‚ð“n‚µ‚Ä‚¢‚é ‰ÓŠ‚àŒ©‚‚©‚Á‚½B‚»‚̂悤‚ȃR[ƒh‚ÍŒãX–â‘è‚𗈂·‚©‚à’m‚ê‚È‚¢B ‚»‚ê‚ÉAMsgWaitXxx ‚à‚¿‚á‚ñ‚Æ‘‚©‚ê‚Ä‚¢‚È‚¢B“¯Žž‚ɑҋ@‚·‚é‚Ì‚ÍAƒAƒvƒŠEƒvƒƒOƒ‰ƒ} ‚ª‚Ç‚ñ‚¾‚¯Šæ’£‚Á‚Ä‚à‚©‚¯‚È‚¢‚©‚ç API ‚ª—pˆÓ‚³‚ê‚Ä‚¢‚é‚Ì‚¾‚ªA‚»‚±‚É–¾‚ç‚©‚È ƒƒWƒbƒN‚̊ԈႢ‚ª‚ ‚éB —L–¼‚ȃAƒvƒŠ‚¾‚¯‚Í‚¿‚á‚ñ‚Æ“®ì‚·‚邪AŽÀ‚Í–Í•í‚Ì’ö“x‚ªˆÓŠO‚Æ’á‚¢‚©‚àB —L–¼‚ȃAƒvƒŠ‚¾‚¯‚Í“®‚‚悤‚É’²®‚³‚ê‚Ä‚¢‚éEEEB
496 –¼‘OF396 mailto:sage [2018/02/22(–Ø) 18:45:28.30 ID:9+xI5ulA.net] usleep() ‚Ì•”•ª‚ð setitimer(), pause() ‚ɕς¦‚Ă݂½‚çA‚»‚±‚ÍŽw’肵‚½ ŽžŠÔ‚Å‚¿‚á‚ñ‚Æ‹A‚Á‚Ä‚‚邿‚¤‚ɂȂÁ‚½B‚Å‚àALinux‘S‘Ì‚ª’âŽ~‚ɋ߂¢ó‘Ô‚É ‚È‚éÇó‚͕ςí‚ç‚È‚¢B’[––“à‚Ì FIXME ‚Ì•\ަ‚ª“r’†‚Ì•¶Žš‚܂ő‚©‚ꂽó‘Ô‚Å ‰üs‚܂ł¢‚‘O‚É’·‚¢ŠÔ’âŽ~‚·‚錻ۂª‹N‚«‚Ä‚µ‚Ü‚Á‚Ä‚¢‚éB
497 –¼‘OF396 mailto:sage [2018/02/22(–Ø) 23:32:51.41 ID:9+xI5ulA.net] X Window System ‚ÍAServer ‚Æ Client ‚Å’ÊM‚ðs‚Á‚Ä‚¢‚é‚©‚çAClient‘¤‚ł͈—‚ª ˆêu‚Å‹A‚Á‚Ä—ˆ‚Ä‚¢‚邿‚¤‚ÉŒ©‚¦‚Ä‚àAServer‘¤‚ł͈—‚ɦ‚ŽžŠÔ‚ª‚©‚©‚Á‚Ä‚¢‚é‰Â”\« ‚ª‚ ‚é‚©‚à‚µ‚ê‚È‚¢B‚¾‚©‚ç Client‘¤‚ÅAŠÖ”‚̌ĂÑo‚µ‚Ì‘OŒã‚ÌŽžŠÔ‚ðŒv‘ª‚ð‚µ‚Ä‚à ‚»‚ê‚Í’P‚ÉServer ‚ɃRƒ}ƒ“ƒh‚𑗂鈗‚ÌŽžŠÔ‚ðŒv‘ª‚µ‚Ä‚¢‚é‚ɉ߂¬‚È‚¢‚Ì‚©‚à ’m‚ê‚È‚¢BƒCƒ[ƒW‚̃oƒCƒg
498 –¼‘OF”‚ª‘½‚¢‚¢‚Æ‚«‚É‚ÍA’ÊMŽž‚̃f[ƒ^EƒRƒs[‚ÉŽžŠÔ‚ª‚©‚©‚é ‚©‚ç‘½ŽžŠÔ‚ª‚©‚©‚é‚©‚à’m‚ê‚È‚¢‚ªA‚»‚ê‚͂܂¾•\–Êã‚ÌŽžŠÔ‚ɉ߂¬‚¸AServer ‘¤‚Í Shape‚Ì‚‚蔲‚«ˆ—(?)‚âd‚ˇ‚킹‚̈—‚É–c‘å‚ÈŽžŠÔ‚ª‚©‚©‚Á‚Ä‚¢‚é‰Â”\«‚à”Û’è‚Å‚«‚È‚¢B ‚¾‚©‚çAXCreateBitmapFromData(), XShapeCombineMask(), XPutImage() ‚Ì‘OŒã‚ÌŽžŠÔ‚ð Œv‘ª‚µ‚Ä‚¢‚邾‚¯‚ł͑¬‚Œ©‚¦‚Ä‚àAŒ©‚¦‚È‚¢êŠ‚ÅCPUƒpƒ[‚ð‘SŠJ‚É‚µ‚Ä‚ª‚ñ‚΂Á‚Ä‚à ‚Ü‚¾ˆ—‚ðI‚¦‚ĂȂ¢‚Ì‚©‚à‚µ‚ê‚È‚¢B ‚¾‚©‚çALinux Kernel ‚ÍAX Server‚É CPU ƒpƒ[‚ð‘SŠJ‚܂ŗ^‚¦‚悤‚Æ‚µ‚Ä‚¢‚éEEEB Client‘¤‚ÅŒv‘ª‚µ‚½ŽžŠÔ‚ÍŒ©‚¹‚©‚¯‚ÌŽžŠÔ‚Å‚ ‚Á‚ÄAˆ—‘S‘̂̎žŠÔ‚ł͂Ȃ¢EEEB ‚¾‚©‚çAƒ^ƒXƒNƒo[‚È‚Ç‚à“®‚©‚¸AƒfƒoƒbƒO•\ަ‚Ì’[––‚Ì•¶Žš‚à’†“r”¼’[‚ÈꊂÅWAIT ó‘ԂɂȂÁ‚Ä‚µ‚Ü‚¤EEEB ‚±‚ꂪ^‘Š‚¾‚낤‚©H [] [‚±‚±‰ó‚ê‚Ă܂·]
499 –¼‘OF396 mailto:sage [2018/02/22(–Ø) 23:41:51.80 ID:9+xI5ulA.net] ‚»‚¤‚¢‚¦‚ÎAupdate_surface_region() ‚ªŒÄ‚Ño‚³‚ꂽ‚±‚Æ‚ðŽ¦‚·ƒfƒoƒbƒO•¶Žš—ñ‚ÍAŒã‚©‚ç‚Ü‚Æ‚ß‚Ä ƒhƒhƒb‚Æo‚Ä‚‚éB‚»‚ê‚ÍA•¶Žš—ñ‚ªuo‚ĂȂ¢vŠÔ‚ɂ͊֔‚ªŒÄ‚΂ê‚ĂȂ¢‚±‚Æ‚ðˆÓ–¡‚·‚é –ó‚ł͂ȂAŽÀ‚͌Ă΂ê‚Ă͂¢‚邪A•¶Žš—ñ‚ª flush ‚³‚ê‚ĂȂ¢‚©A‚Ü‚½‚ÍAflush ‚³‚ê‚Ä‚¢‚Ä‚àA’[––‚É CPU ƒŠƒ\[ƒX‚ªŠ„‚è“–‚Ä‚ç‚ê‚È‚¢‚©‚çA•¶Žš•\ަ‚¾‚¯‚ªs‚í‚ꂸ‚É •¶Žš—ñ‚ªƒoƒbƒtƒ@‚É—‚Ü‚Á‚½ó‘ԂɂȂÁ‚Ä‚µ‚Ü‚Á‚Ä‚¢‚éEEEEB ‚±‚¤l‚¦‚ê‚Î’Òå낪‡‚¤‚©‚àB
500 –¼‘OF396 mailto:sage [2018/02/23(‹à) 00:00:03.49 ID:rGoiNTvu.net] –{‰Æ‚Ì Windows‚Å‚ÍA•`‰æˆ—‚ªd‚¢‚Æ‚«‚É‚ÍAOnPaint ‚â OnDraw ‚ÌŠÖ”‚ªI‚í‚é‚܂Š‚ÌŽžŠÔ‚à’·‚¢B‚¾‚©‚çAƒƒbƒZ[ƒW‚ª‚½‚‚³‚ñ‚½‚Ü‚Á‚Ä‚¢‚é‚̂ɕ`‰æ‚ª’Ç‚¢‚‚¢‚Ä‚¢‚È‚¢Ž–‚ÍA ƒƒbƒZ[ƒWEƒLƒ…[‚ÉŽc‚Á‚Ä‚¢‚郃bƒZ[ƒW‚̌”‚ª‘½‚¢Ž–‚Å‘å‘̂̔»’f‚ª•t‚B‚¾‚©‚çA InvalidateRect(NULL)‚ð‚µ‚Ä‚¨‚¯‚ÎA•`‰æ‚ª’Ç‚¢‚‚¢‚ĂȂ¢ê‡‚ÍAƒƒbƒZ[ƒWƒ‹[ƒv ‚ª WM_PAINTƒƒbƒZ[ƒW‚ð‘—‚éƒ^ƒCƒ~ƒ“ƒO‚ðŽ©“®“I‚ÉŒã‰ñ‚µ‚É‚µ‚Ä‚‚ê‚éB ‚Æ‚±‚낪AX Window System ‚Ìê‡AŽÀÛ‚Ì•`‰æ‚ª‚Ü‚¾I‚í‚Á‚ĂȂ¢ê‡‚Å‚àA u•`‰æŠÖ”vŽ©‘͈̂êu‚É‚µ‚Ä–ß‚Á‚Ä‚«‚Ä‚µ‚Ü‚¤‚©‚çAã‹L‚̃Aƒ‹ƒSƒŠƒYƒ€‚ªuЍˆá‚¢v‚ð ‹N‚±‚µ‚Ä‚µ‚Ü‚¤‚±‚Æ‚ª‚ ‚éEEEB ‚»‚ç‚Ɉ«‚¢Ž–‚ÉAWINE‚ªA“à•”‚Å Surface ‚ðŽ‚Á‚Ä‚¢‚邯‚«‚É‚ÍALineTo ŠÖ”Ž©‘̂͂‘¬‚É ˆ—‚ðI‚¦‚é‚Ì‚ÉAƒAƒvƒŠ‚ª—\‘z‚à‚µ‚È‚¢ƒ^ƒCƒ~ƒ“ƒO‚ÅAŽžŠÔ‚ÌŠ|‚©‚é flush ‚̈—‚ªs‚í‚ê ‚Ä‚µ‚Ü‚¤B ‚»‚¤‚·‚邯AOnPaint ‚Í‚‘¬‚ÉI‚í‚Á‚½‚ÆŠ¨ˆá‚¢‚µ‚ÄAWM_PAINT ƒƒbƒZ[ƒW‚ªAƒ}ƒEƒXEƒƒbƒZ[ƒW‚É Š®‘S‚ɘA“®‚µ‚Ä‘å—ʂɶ¬‚³‚ê‚Ä‚µ‚Ü‚¤B‚·‚邯APending ó‘Ô‚Ì X Window ‚̈—‚ª‚Ç‚ñ‚Ç‚ñ ‘Ò‚¿s—ñ‚É—‚Ü‚Á‚Ä‚¢‚Á‚Ä‚µ‚Ü‚¤B ƒhƒ‰ƒbƒO’†‚ÍAWM_PAINT ‚ª•bŠÔ20‰ñ‚à‘—‚ç‚ê‚é‚Ì‚ÉAServer ‚ªŽÀÛ‚Ì•`‰æ‚ðI‚¦‚é‚Ì‚ÍA ‚»‚̉½\”{‚àŽžŠÔ‚ª‚©‚©‚Á‚Ä‚µ‚Ü‚¤B ‚±‚ñ‚ÈŠ´‚¶‚¾‚낤‚©B
501 –¼‘OF396 mailto:sage [2018/02/23(‹à) 00:09:19.71 ID:rGoiNTvu.net] ‚³‚ç‚ÉA>>466-467 , >>469 ‚É‘‚¢‚½AWINPOS_SysCommandSizeMove() ‚ÍA CWinApp ‚ȂǂƂ͕ʂÌA“ÆŽ©‚̃ƒbƒZ[ƒWƒ‹[ƒv‚ðŽ‚Á‚Ä‚¢‚éB ‚»‚±‚Å‚ÍA‚³‚ç‚ÉAWM_PAINT ‚ª•s“K؂ɑå—ʂɔ¶‚µ‚Ä‚µ‚Ü‚Á‚Ä‚¢‚é ‰Â”\«‚ª‚ ‚éB ‚¾‚ñ‚¾‚ñ•ª‚©‚Á‚Ä‚«‚½‚©‚àB
502 –¼‘OF396 mailto:sage [2018/02/23(‹à) 00:23:13.75 ID:rGoiNTvu.net] Œ´ˆö‚Í„’è‚Å‚«‚Ä‚«‚½‚¯‚ÇA‚³‚ÄA‚Ç‚¤‚â‚Á‚Ä‚±‚ê‚ð‰ðŒˆ‚·‚ê‚΂¢‚¢‚©EEEB
503 –¼‘OFlogin:Penguin mailto:sage [2018/02/23(‹à) 09:55:12.25 ID:o5jNB0tx.net] ƒ‰ƒCƒZƒ“ƒX‚ÌŠÖŒW‚Å‚â‚₱‚µ‚¢‚±‚Ƃɬ‚é‰Â”\«‚ª‘¶Ý‚·‚é‚©‚ç ‚Tch‚Öƒ\[ƒXƒR[ƒh‚Í‘‚©‚È‚¢‚Å ‚‡‚‰‚”‚ˆ‚•‚‚Žg‚Á‚½‚Ù‚¤‚ª‚¢‚¢
504 –¼‘OFlogin:Penguin mailto:sage [2018/02/23(‹à) 10:10:14.53 ID:53V98ywt.net] —±“x‚Ì’á‚¢ƒpƒbƒ`‚ð‚¿‚å‚±‚¿‚傱ƒAƒbƒv‚·‚邯—Ç‚¢‚̂łÍB ˜_—’l‚Ì‚ ‚â‚Ü‚è‚𒼂·‚â‚‚Ƃ©B
505 –¼‘OF396 mailto:sage [2018/02/23(‹à) 12:30:36.00 ID:rGoiNTvu.net] >>484 ‚»‚ê‚Å‚ÍA“ú–{l‚ÌŽ©•ª‚ÉŽæ‚Á‚ÄŽè‚à‘«‚à‚łȂ¢ó‹µ‚ɂȂÁ‚Ä‚µ‚Ü‚¤‚Ì‚ÅA‚Æ‚Ä‚à ¢‚è‚Ü‚·B
506 –¼‘OFlogin:Penguin mailto:sage [2018/02/23(‹à) 12:34:30.91 ID:o5jNB0tx.net] >>486 ‚È‚ºH ƒRƒR‚É‘‚¯‚Ζâ‘肪¶‚¶‚é‰Â”\«‚à‚ ‚é‚Ì‚É
507 –¼‘OF396 mailto:sage [2018/02/23(‹à) 12:36:23.19 ID:rGoiNTvu.net] ‹¦—Í‚µ‚É‚‚‚µ‚É‚‚‚È‚é‚æ‚¤‚ÉŽdŒü‚¯‚ç‚ê‚ÄA‚Ç‚¤‚µ‚悤‚à‚È‚¢ó‘ԂɂȂÁ‚Ä‚é‹C‚à‚·‚éB makeŽž‚Ì•\ަ‚Ì–³‘Ê‚ª‘½‚·‚¬‚ÄA“Á‚ÉŒx‚ªo‚Ä‚¢‚Ä‚àŒ©“¦‚µ‚â‚·‚¢‚µAHDD‚à–c‘å‚É Á”ï‚·‚邵Aƒ_ƒEƒ“ƒ[ƒh‚âƒAƒbƒvƒ[ƒh‚É‚à”œ‘å‚ÈŽžŠÔ‚ª‚©‚©‚邵B ‚È‚ñ‚¾‚©AƒAƒƒŠƒJ‚Æ–k‰¢‚̎Љï“IŠÂ‹«ˆÈŠO‚ł͂ƂÁ‚Ä‚à•‰’S‚ª‘å‚«‚¢‚©‚àA
508 –¼‘OF396 mailto:sage [2018/02/23(‹à) 12:36:59.52 ID:rGoiNTvu.net] >>487 ˆÓ–¡‚ª•ª‚©‚è‚Ü‚¹‚ñB
509 –¼‘OFlogin:Penguin mailto:sage [2018/02/23(‹à) 12:38:43.64 ID:o5jNB0tx.net] >>489 ‚±‚±‚Ƀ\[ƒXƒR[ƒh‚𑂯‚Î5ch‚ªŒ —˜‚ðŽå’£‚·‚é‹°‚ꂪ‚ ‚é ‚ ‚È‚½‚ª‘‚¢‚½‚à‚̂ł ‚Á‚Ä‚à ‚»‚ê‚Í–â‘è‚Å‚µ‚傤H