[Rust/Winit] 레퍼런스 문서, crate winit 메인

이 글은 rust의 gui 라이브러리인 winit의 공식 문서를 번역한 글입니다.

https://docs.rs/winit/0.15.1/winit/
winit - RustWinit allows you to build a window on as many platforms as possible. Building a window Before you can build a window, you first need to build an EventsLoop . This is done with the EventsLoop::new() function. Example: use winit :: EventsLoop ; let events_loop = EventsLoop :: new (); Once this is done...docs.rs 오역이나 부족한 부분에 대한 피드백은 감사히 받겠습니다.


Crate winit[−][src][−]Winit은 많은 플랫폼에서 윈도우 창을 빌드할 수 있게 해줍니다.

Building a window윈도우를 빌드하기 전에, 먼저 EventsLoop를 생성해야 합니다.  EventsLoop::new() 함수를 사용하면 됩니다.

Example:
usewinit::EventsLoop; letevents_loop=EventsLoop::new(); 이 작업에 성공했다면, 윈도우를 생성하는 두가지 방법이 존재합니다.



첫번째 방법은 가장 간단한 방법이고, 모든 것을 기본값으로 제공합니다.

두번째 방법은 윈도우를 만들기 전에 WindowBuilder 객체를 생성하고 수정해서 윈도우가 어떻게 나타나고 동작할지를 커스터마이징할수 있습니다.

Events handling윈도우가 생성되고 나서,  일련의 events들이 발생하게 됩니다. 예를 들어 언제든지 사용자가 윈도우를 움직이거나, 윈도우의 사이즈를 조정하거나, 마우스를 움직이거나 하는 것 등이 이벤트가 발생하는 것이죠.
윈도우에서 발생한 이벤트는 윈도우가 생성된  EventsLoop에서 회수될 수 있습니다.
여기에도 두가지 방법이 있죠.

첫번째 방법은 events_loop.poll_events(...)를 부르는 건데요. 윈도우가 떠있는 동안 모든 이벤트들을 회수할 수 있고, 새로운 이벤트가 나타나지 않는다면 즉시 반환하게 됩니다.  보통은 비디오 게임처럼 연속적으로 화면을 렌더링하는 어플리케이션에서 이 메서드를 사용하곤 합니다.

usewinit::{Event, WindowEvent};

loop { events_loop.poll_events(|event| { matchevent { Event::WindowEvent { event: WindowEvent::Resized(w, h), .. } => { println!("The window was resized to {}x{}", w, h); }, _=> () } }); }

두번째 방법은events_loop.run_forever(...)를 호출하는 겁니다. 이름이 말해주는 것처럼, 이 메소드는 끝없이 실행됩니다. ControlFlow::Break.가 반환돼서 멈추기 전까지요.

usewinit::{ControlFlow, Event, WindowEvent};

events_loop.run_forever(|event| { matchevent { Event::WindowEvent { event: WindowEvent::CloseRequested, .. } => { println!("The close button was pressed; stopping"); ControlFlow::Break }, _=>ControlFlow::Continue, } }); 만약 여러개의 윈도우를 사용하고자 한다면, WindowEvent 이벤트가 가진 멤버 window_id를 사용하면 됩니다. You can compare it with the value returned by the  method of Window의id()메소드가 반환한 값과 그것을 비교해서 어떤 윈도우가 이벤트를 받았는지 알 수 있습니다.


Drawing on the windowWinit은 윈도우에 그리는 것과 관련된 일체의 함수도 제공하지 않습니다. 하지만 윈도우의 raw 핸들을 받아서 사용할 수는 있죠.(os 모듈이 이것을 지원합니다.) 그렇게 OpenGL/Vulkan/DirectX/Metal 등 윈도우에 그려넣을 수 있는 컨텍스트들을 생성할 수 있습니다.
Modules /모듈 | os | 플랫폼 종속적인 메소드들을 포함한다. |

Structs /구조체 | AvailableMonitorsIter | 사용가능한 monitors들의 리스트를 가리키는 반복자. | | DeviceId | 입력 장치 식별자. | | EventsLoop | 시스템에게서 받았거나, 이벤트루프에 등록된 윈도우에게서 받은 이벤트들을 회수할 수 있는 방법을 제공합니다. | | EventsLoopClosed | EventsLoopProxy가 더이상 존재하지 않는 EventsLoop를 깨우려 할 때 반환되는 에러. | | EventsLoopProxy | 다른 스레드로부터EventsLoop를 깨울 때 사용됨. | | Icon | 윈도우의 타이틀바나 작업표시줄 등에 사용되는 아이콘. | | KeyboardInput | 키보드의 입력 이벤트를 표현한다. | | ModifiersState | 키보드 한정자들의 현재 상태를 표현한다. | | MonitorId | monitor를 위한 식별자. | | Touch | touch 이벤트를 표현한다. | | Window | window를 표현한다. | | WindowAttributes | window를 생성할 때 사용되는 속성들. | | WindowBuilder | 윈도우를 빌드할 때 사용하는 객체. | | WindowId | window의 식별자. 각각의 window는 유일함(unique). |



Enums /열거타입들 | BadIcon | Icon::from_rgba 를 유효하지 않은 인자들로 사용했을 때 발생하는 에러 | | ControlFlow | EventsLoop::run_forever 메서드에 주어진 사용자 콜백에 의해 반환됨. | | CreationError | 윈도우나 머리없는? 렌더러를 생성할 동안에 발생할 수 있는 에러. | | CursorState | winit이 cursor를 어떻게 다루는지를 묘사한다. | | DeviceEvent | 어떤 특정 윈도우와도 관계가 없는 raw 하드웨어 이벤트를 나타낸다. | | ElementState | key의 입력 상태를 나타낸다. | | Event | generic event를 나타낸다. | | MouseButton | 마우스 컨트롤러의 버튼을 나타낸다. | | MouseCursor | 마우스 커서의 상태를 나타낸다. | | MouseScrollDelta | 마우스의 스크롤 휠의 상태 변화를 나타낸다. | | TouchPhase | 터치스크린의 입력 상태를 나타낸다. | | VirtualKeyCode | 키보드의 key를 위한 기호 이름들. | | WindowEvent | Window에서 온 이벤트를 나타낸다. |



Type Definitions /타입 정의 | AxisId | 일부 장치의 특정 아날로그 축에 대한 식별자. | | ButtonId | 일부 장치의 특정 버튼에 대한 식별자. | | ScanCode | 하드웨어 종속적인 키보드 scan code. |