Glfw: ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ ๋ฌด์‹œ / ์ž…๋ ฅ ํˆฌ๋ช… / ์ ์ค‘ ํ…Œ์ŠคํŠธ ๋น„ํ™œ์„ฑํ™”

์— ๋งŒ๋“  2018๋…„ 03์›” 20์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: glfw/glfw

์•ˆ๋…•ํ•˜์‹ญ๋‹ˆ๊นŒ,

๊ฐ€์žฅ ์ ์ ˆํ•œ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์šฉ์–ด๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๊ธด ์ œ๋ชฉ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‚ฌ๋žŒ๋“ค์ด ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ์ด๊ฒƒ์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ฐฝ ํžŒํŠธ์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ ์š”์ฒญ์ž…๋‹ˆ๋‹ค. ์ž ์ •์ ์œผ๋กœ GLFW_MOUSE_PASSTHRU (์ •ํ™•ํ•œ ์ด๋ฆ„์€ ๋ฏธ์ •)์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. #1166(์ด ๊ฒŒ์‹œ๋ฌผ์˜ ๋์— ์žˆ๋Š” GIF)์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ์ž‘์—…์˜ ์ผ๋ถ€๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

(์ฐธ๊ณ ๋กœ ์ด๊ฒƒ์€ ์‹œ๊ฐ์ ์ธ ๊ด€์ ์—์„œ ํˆฌ๋ช…์„ฑ๊ณผ ๊ด€๋ จ์ด ์—†์œผ๋ฉฐ ์ด๋ฏธ ์—ฌ๋Ÿฌ ๋ฒˆ ๋…ผ์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค: https://github.com/glfw/glfw/issues?utf8=%E2%9C%93&q=transparent)


์ฐฝ
WndProc ์ฒ˜๋ฆฌ๊ธฐ๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

if (msg == WM_NCHITTEST)
    return HTTRANSPARENT;

๋งฅ
'NSWindow'(ํ…Œ์ŠคํŠธ๋˜์ง€ ์•Š์Œ)์˜ 'ignoresMouseEvents' ์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
https://developer.apple.com/documentation/appkit/nswindow/1419354-ignoresmouseevents?language=objc

์ฐฝ์ด ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ์— ํˆฌ๋ช…ํ•œ์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ถ€์šธ ๊ฐ’์ž…๋‹ˆ๋‹ค.

์›จ์ด๋žœ๋“œ
์•„๋งˆ๋„ 'wl_surface::set_input_region'(ํ…Œ์ŠคํŠธ๋˜์ง€ ์•Š์Œ)
https://wayland.freedesktop.org/docs/html/apa.html#protocol -spec-wl_surface

์ด ์˜์—ญ ์™ธ๋ถ€์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ž…๋ ฅ ์ด๋ฒคํŠธ๋Š” ์„œ๋ฒ„ ํ‘œ๋ฉด ์Šคํƒ์˜ ๋‹ค์Œ ํ‘œ๋ฉด์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ํ•ฉ์„ฑ๊ธฐ๋Š” ํ‘œ๋ฉด ์™ธ๋ถ€์— ์žˆ๋Š” ์ž…๋ ฅ ์˜์—ญ ๋ถ€๋ถ„์„ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค. [...] ์ž…๋ ฅ ์˜์—ญ์˜ ์ดˆ๊ธฐ๊ฐ’์€ ๋ฌดํ•œ๋Œ€์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ „์ฒด ํ‘œ๋ฉด์ด ์ž…๋ ฅ์„ ์ˆ˜๋ฝํ•ฉ๋‹ˆ๋‹ค. ๋ณด๋ฅ˜ ์ค‘์ธ ์ž…๋ ฅ ์˜์—ญ ์„ค์ •์—๋Š” ๋ณต์‚ฌ ์˜๋ฏธ๊ฐ€ ์žˆ์œผ๋ฉฐ wl_region ๊ฐœ์ฒด๋Š” ์ฆ‰์‹œ ์†Œ๋ฉธ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. NULL wl_region์€ ์ž…๋ ฅ ์˜์—ญ์ด ๋ฌดํ•œ์œผ๋กœ ์„ค์ •๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

X11
X11์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ Qt๋Š” xcb_xfixes_create_region() + xcb_xfixes_set_window_shape_region_checked .
https://git.merproject.org/mer-core/qtbase/blob/master/qtbase/src/plugins/platforms/xcb/qxcbwindow.cpp#L1151


์ปจํ…์ŠคํŠธ(gif): glfw ์ฐฝ(๋‚ด ๋งˆ์šฐ์Šค ์ปค์„œ ๋ฐ”๋กœ ์•„๋ž˜์— ์žˆ์Œ)์„ ๋“œ๋ž˜๊ทธํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์•„๋ž˜์— ์žˆ๋Š” ์ฐฝ์„ ๊ฐ์ง€ํ•ด์•ผ ํ•ด๋‹น ์ฐฝ์— ๋“œ๋กญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. #1166๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ๋‚ด ๋ชจ๋“  ์ฐฝ์˜ ๋ฐ”ํƒ• ํ™”๋ฉด ํฌ๊ธฐ/์œ„์น˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ๋Œ€๋žต์ ์ธ(๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ) ๊ทผ์‚ฌ๊ฐ’์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฌผ๋ก  ์ด๊ฒƒ์€ ์ฐฝ ๊ด€๋ฆฌ์ž๋ฅผ ์šฐํšŒํ•˜๊ณ  ์ฐฝ์˜ ์ ์ ˆํ•œ z ์ˆœ์„œ( ์™ธ๊ตญ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ฐฝ).

ํŽธ์ง‘ ๋ช…ํ™•ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด ํ˜„์žฌ win32 ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  WndProc ํ›„ํฌ๋ฅผ ์„ค์น˜ํ•˜์—ฌ ์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

viewport_20180318


์ด๋ฆ„ ์ง€์ •๊ณผ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๊ธฐ์กด GLFW ์ฐฝ์—์„œ ์ด ๊ธฐ๋Šฅ์„ ํ† ๊ธ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„ ๊นŒ๋‹ค๋กญ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ง€๊ธˆ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹ํ•ด๋‹น ์ฐฝ์— ๋Œ€ํ•ด ํ˜„์žฌ ์บก์ฒ˜๋œ ๋งˆ์šฐ์Šค ์œ„์น˜๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ ์ด์ƒ์ ์ด๊ณ  ๋ฐ”๋žŒ์งํ•œ ๊ฒƒ์ด๋ฉฐ ๋” ๋งŽ์€ ๊ฒƒ์„ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์œ ์—ฐํ•œ. ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ GLFW_IGNORE_MOUSE_INPUTS ์™€ ๊ฐ™์€ ์ด๋ฆ„์„ ์ œ์•ˆํ•˜์ง€ ์•Š์€ ์ด์œ ์ž…๋‹ˆ๋‹ค. CursorPosCallback ๊ณผ glfwGetCursorPos() ๋‘˜ ๋‹ค ์—ฌ์ „ํžˆ ์ž˜ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ดํ•ดํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค,
์˜ค๋งˆ๋ฅด

Wayland Windows X11 enhancement macOS

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด ๊ธฐ๋Šฅ์€ @rokups์— ์˜ํ•ด #1568๊ณผ ํ•จ๊ป˜ GLFW_MOUSE_PASSTHROUGH ๋กœ ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ 3.4์— ํฌํ•จ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

์•ˆ๋…•ํ•˜์‹ญ๋‹ˆ๊นŒ,
์ด์— ๋Œ€ํ•œ ๋ง์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์•„์ด๋””์–ด๊ฐ€ ํ›Œ๋ฅญํ•˜๊ณ  GLFW์—์„œ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ์‹์œผ๋กœ ๋ญ”๊ฐ€๋ฅผ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. Linux์˜ ๋‹ค๋ฅธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ฐฝ ์œ„์— ์˜ค๋ฒ„๋ ˆ์ด๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์˜ค๋ฒ„๋ ˆ์ด ๋’ค์˜ ํ•ญ๋ชฉ์„ ํด๋ฆญํ•˜๊ณ  ์‹ถ์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์€ @rokups์— ์˜ํ•ด #1568๊ณผ ํ•จ๊ป˜ GLFW_MOUSE_PASSTHROUGH ๋กœ ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ 3.4์— ํฌํ•จ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰