Skip to content

Commit d9bb9db

Browse files
committed
Add support for icons and cursors
1 parent 6268026 commit d9bb9db

File tree

9 files changed

+23
-5
lines changed

9 files changed

+23
-5
lines changed

games/snake/.gitignore

+4-1
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,7 @@
77
Cargo.lock
88

99
# These are backup files generated by rustfmt
10-
**/*.rs.bk
10+
**/*.rs.bk
11+
12+
# Resource files
13+
*.res

games/snake/assets/cursor.aseprite

925 Bytes
Binary file not shown.

games/snake/assets/cursor.ico

12.6 KB
Binary file not shown.

games/snake/assets/icon.aseprite

925 Bytes
Binary file not shown.

games/snake/assets/icon.ico

17.9 KB
Binary file not shown.

games/snake/build.rs

+9
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ fn main() {
99

1010
#[cfg(windows)]
1111
link_windows_libs();
12+
13+
#[cfg(windows)]
14+
set_windows_icon();
1215
}
1316

1417
#[cfg(windows)]
@@ -19,3 +22,9 @@ fn link_windows_libs() {
1922
println!("cargo:rustc-link-lib=static=openal32");
2023
println!("cargo:rustc-link-lib=static=user32")
2124
}
25+
26+
#[cfg(windows)]
27+
fn set_windows_icon() {
28+
std::process::Command::new("llvm-rc").arg("./resources.rc").spawn().unwrap().wait().unwrap();
29+
println!("cargo:rustc-link-arg=./games/snake/resources.res");
30+
}

games/snake/resources.rc

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
APP_ICON ICON "./assets/icon.ico"
2+
CURSOR_ICON ICON "./assets/cursor.ico"

games/snake/src/scenes/menu/scene.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,13 @@ impl Scene<GlobalAppData> for MenuScene {
9292
Ok(())
9393
}
9494

95-
fn on_activation(&mut self, _app: &mut GameApp) -> Result<(), String> {
95+
fn on_activation(&mut self, app: &mut GameApp) -> Result<(), String> {
96+
app.window.set_cursor_visibility(true);
9697
Ok(())
9798
}
9899

99-
fn on_deactivation(&mut self, _app: &mut GameApp) -> Result<(), String> {
100+
fn on_deactivation(&mut self, app: &mut GameApp) -> Result<(), String> {
101+
app.window.set_cursor_visibility(false);
100102
Ok(())
101103
}
102104

lemao-platforms/lemao-windows-winapi/src/window.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ impl WindowWinAPI {
3939
unsafe {
4040
let timestamp = SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_millis();
4141
let class_cstr = CString::new(format!("LemaoWindow_{}", timestamp)).unwrap();
42+
let app_icon_cstr = CString::new("APP_ICON").unwrap();
43+
let cursor_icon_cstr = CString::new("CURSOR_ICON").unwrap();
4244
let module_handle = winapi::GetModuleHandleA(ptr::null_mut());
4345

4446
let wnd_class = winapi::WNDCLASS {
@@ -49,8 +51,8 @@ impl WindowWinAPI {
4951
style: winapi::CS_OWNDC,
5052
cbClsExtra: 0,
5153
cbWndExtra: 0,
52-
hIcon: winapi::LoadIconA(ptr::null_mut(), 32512 as *const i8),
53-
hCursor: winapi::LoadCursorA(ptr::null_mut(), 32512 as *const i8),
54+
hIcon: winapi::LoadImageA(module_handle, app_icon_cstr.as_ptr(), winapi::IMAGE_ICON, 0, 0, winapi::LR_DEFAULTSIZE) as *mut winapi::HICON__,
55+
hCursor: winapi::LoadImageA(module_handle, cursor_icon_cstr.as_ptr(), winapi::IMAGE_ICON, 0, 0, winapi::LR_DEFAULTSIZE) as *mut winapi::HICON__,
5456
lpszMenuName: ptr::null_mut(),
5557
};
5658

0 commit comments

Comments
 (0)