koffi 0.9.4 → 0.9.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (823) hide show
  1. package/LICENSE.txt +661 -0
  2. package/README.md +50 -8
  3. package/package.json +24 -6
  4. package/src/call.hh +2 -1
  5. package/src/call_arm32.cc +498 -0
  6. package/src/call_arm32_fwd.S +108 -0
  7. package/src/call_arm64.cc +57 -57
  8. package/src/call_arm64_fwd.S +24 -29
  9. package/src/call_x64_sysv.cc +29 -43
  10. package/src/call_x64_win.cc +37 -40
  11. package/src/call_x86.cc +46 -59
  12. package/src/ffi.cc +29 -27
  13. package/src/ffi.hh +19 -12
  14. package/src/util.cc +58 -24
  15. package/src/util.hh +103 -19
  16. package/test/qemu/.gitkeep +0 -0
  17. package/test/registry/machines.json +112 -0
  18. package/test/registry/sha256sum.txt +21 -0
  19. package/test/test.js +493 -0
  20. package/vendor/dragonbox/CMakeLists.txt +122 -122
  21. package/vendor/dragonbox/LICENSE-Apache2-LLVM +218 -218
  22. package/vendor/dragonbox/LICENSE-Boost +23 -23
  23. package/vendor/dragonbox/README.md +277 -277
  24. package/vendor/dragonbox/cmake/dragonboxConfig.cmake +1 -1
  25. package/vendor/dragonbox/include/dragonbox/dragonbox.h +6 -2
  26. package/vendor/dragonbox/include/dragonbox/dragonbox_to_chars.h +108 -108
  27. package/vendor/dragonbox/other_files/Dragonbox.pdf +0 -0
  28. package/vendor/dragonbox/other_files/unknown_win64_vc2019.html +539 -539
  29. package/vendor/dragonbox/source/dragonbox_to_chars.cpp +303 -303
  30. package/vendor/dragonbox/subproject/3rdparty/grisu_exact/CMakeLists.txt +23 -23
  31. package/vendor/dragonbox/subproject/3rdparty/grisu_exact/fp_to_chars.cpp +238 -238
  32. package/vendor/dragonbox/subproject/3rdparty/grisu_exact/fp_to_chars.h +95 -95
  33. package/vendor/dragonbox/subproject/3rdparty/grisu_exact/grisu_exact.h +2666 -2666
  34. package/vendor/dragonbox/subproject/3rdparty/ryu/CMakeLists.txt +16 -16
  35. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/common.h +114 -114
  36. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/d2s.c +509 -509
  37. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/d2s_full_table.h +367 -367
  38. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/d2s_intrinsics.h +357 -357
  39. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/digit_table.h +35 -35
  40. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/f2s.c +345 -345
  41. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/f2s_full_table.h +55 -55
  42. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/f2s_intrinsics.h +128 -128
  43. package/vendor/dragonbox/subproject/3rdparty/ryu/ryu/ryu.h +46 -46
  44. package/vendor/dragonbox/subproject/3rdparty/schubfach/CMakeLists.txt +21 -21
  45. package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_32.cc +699 -699
  46. package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_32.h +31 -31
  47. package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_64.cc +1354 -1354
  48. package/vendor/dragonbox/subproject/3rdparty/schubfach/schubfach_64.h +31 -31
  49. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/example_shaded_plots.m +68 -68
  50. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/license.txt +25 -25
  51. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_distribution.m +92 -92
  52. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_distribution_prctile.m +121 -121
  53. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_histogram_shaded.m +99 -99
  54. package/vendor/dragonbox/subproject/3rdparty/shaded_plots/plot_shaded.m +93 -93
  55. package/vendor/dragonbox/subproject/benchmark/CMakeLists.txt +64 -64
  56. package/vendor/dragonbox/subproject/benchmark/include/benchmark.h +40 -40
  57. package/vendor/dragonbox/subproject/benchmark/matlab/plot_benchmarks.m +21 -21
  58. package/vendor/dragonbox/subproject/benchmark/matlab/plot_digit_benchmark.m +78 -78
  59. package/vendor/dragonbox/subproject/benchmark/matlab/plot_uniform_benchmark.m +95 -95
  60. package/vendor/dragonbox/subproject/benchmark/source/benchmark.cpp +237 -237
  61. package/vendor/dragonbox/subproject/benchmark/source/dragonbox.cpp +30 -30
  62. package/vendor/dragonbox/subproject/benchmark/source/grisu_exact.cpp +36 -36
  63. package/vendor/dragonbox/subproject/benchmark/source/ryu.cpp +27 -27
  64. package/vendor/dragonbox/subproject/benchmark/source/schubfach.cpp +31 -31
  65. package/vendor/dragonbox/subproject/common/CMakeLists.txt +41 -41
  66. package/vendor/dragonbox/subproject/common/include/best_rational_approx.h +96 -96
  67. package/vendor/dragonbox/subproject/common/include/big_uint.h +217 -217
  68. package/vendor/dragonbox/subproject/common/include/continued_fractions.h +173 -173
  69. package/vendor/dragonbox/subproject/common/include/good_rational_approx.h +266 -266
  70. package/vendor/dragonbox/subproject/common/include/random_float.h +182 -182
  71. package/vendor/dragonbox/subproject/common/include/rational_continued_fractions.h +56 -56
  72. package/vendor/dragonbox/subproject/common/source/big_uint.cpp +601 -601
  73. package/vendor/dragonbox/subproject/meta/CMakeLists.txt +40 -40
  74. package/vendor/dragonbox/subproject/meta/results/binary32_generated_cache.txt +81 -81
  75. package/vendor/dragonbox/subproject/meta/results/binary64_compressed_cache_error_table.txt +9 -9
  76. package/vendor/dragonbox/subproject/meta/results/binary64_generated_cache.txt +622 -622
  77. package/vendor/dragonbox/subproject/meta/source/generate_cache.cpp +126 -126
  78. package/vendor/dragonbox/subproject/meta/source/live_test.cpp +81 -81
  79. package/vendor/dragonbox/subproject/meta/source/perf_test.cpp +104 -104
  80. package/vendor/dragonbox/subproject/meta/source/sandbox.cpp +20 -20
  81. package/vendor/dragonbox/subproject/test/CMakeLists.txt +69 -69
  82. package/vendor/dragonbox/subproject/test/results/plot_required_bits.m +17 -17
  83. package/vendor/dragonbox/subproject/test/source/test_all_shorter_interval_cases.cpp +88 -88
  84. package/vendor/dragonbox/subproject/test/source/uniform_random_test.cpp +95 -95
  85. package/vendor/dragonbox/subproject/test/source/verify_cache_precision.cpp +337 -337
  86. package/vendor/dragonbox/subproject/test/source/verify_compressed_cache.cpp +154 -154
  87. package/vendor/dragonbox/subproject/test/source/verify_fast_multiplication.cpp +168 -168
  88. package/vendor/dragonbox/subproject/test/source/verify_log_computation.cpp +251 -251
  89. package/vendor/dragonbox/subproject/test/source/verify_magic_division.cpp +113 -113
  90. package/vendor/libcc/libcc.cc +36 -18
  91. package/vendor/libcc/libcc.hh +23 -1
  92. package/vendor/raylib/BINDINGS.md +123 -0
  93. package/vendor/raylib/CHANGELOG +1495 -0
  94. package/vendor/raylib/CMakeLists.txt +33 -0
  95. package/vendor/raylib/CMakeOptions.txt +87 -0
  96. package/vendor/raylib/CONTRIBUTING.md +76 -0
  97. package/vendor/raylib/CONTRIBUTORS.md +63 -0
  98. package/vendor/raylib/CONVENTIONS.md +95 -0
  99. package/vendor/raylib/HISTORY.md +364 -0
  100. package/vendor/raylib/LICENSE +16 -0
  101. package/vendor/raylib/README.md +141 -0
  102. package/vendor/raylib/ROADMAP.md +76 -0
  103. package/vendor/raylib/SPONSORS.md +68 -0
  104. package/vendor/raylib/cmake/AddIfFlagCompiles.cmake +12 -0
  105. package/vendor/raylib/cmake/BuildOptions.cmake +18 -0
  106. package/vendor/raylib/cmake/CompileDefinitions.cmake +110 -0
  107. package/vendor/raylib/cmake/CompilerFlags.cmake +79 -0
  108. package/vendor/raylib/cmake/EnumOption.cmake +9 -0
  109. package/vendor/raylib/cmake/GlfwImport.cmake +34 -0
  110. package/vendor/raylib/cmake/InstallConfigurations.cmake +29 -0
  111. package/vendor/raylib/cmake/JoinPaths.cmake +26 -0
  112. package/vendor/raylib/cmake/LibraryConfigurations.cmake +108 -0
  113. package/vendor/raylib/cmake/LibraryPathToLinkerFlags.cmake +24 -0
  114. package/vendor/raylib/cmake/PackConfigurations.cmake +13 -0
  115. package/vendor/raylib/cmake/PopulateConfigVariablesLocally.cmake +11 -0
  116. package/vendor/raylib/cmake/raylib-config-version.cmake +21 -0
  117. package/vendor/raylib/cmake/raylib-config.cmake +76 -0
  118. package/vendor/raylib/examples/CMakeLists.txt +139 -0
  119. package/vendor/raylib/examples/Makefile +565 -0
  120. package/vendor/raylib/examples/Makefile.Android +405 -0
  121. package/vendor/raylib/examples/Makefile.Web +1053 -0
  122. package/vendor/raylib/examples/README.md +203 -0
  123. package/vendor/raylib/examples/audio/audio_module_playing.c +146 -0
  124. package/vendor/raylib/examples/audio/audio_module_playing.png +0 -0
  125. package/vendor/raylib/examples/audio/audio_multichannel_sound.c +73 -0
  126. package/vendor/raylib/examples/audio/audio_multichannel_sound.png +0 -0
  127. package/vendor/raylib/examples/audio/audio_music_stream.c +93 -0
  128. package/vendor/raylib/examples/audio/audio_music_stream.png +0 -0
  129. package/vendor/raylib/examples/audio/audio_raw_stream.c +167 -0
  130. package/vendor/raylib/examples/audio/audio_raw_stream.png +0 -0
  131. package/vendor/raylib/examples/audio/audio_sound_loading.c +64 -0
  132. package/vendor/raylib/examples/audio/audio_sound_loading.png +0 -0
  133. package/vendor/raylib/examples/audio/resources/LICENSE.md +10 -0
  134. package/vendor/raylib/examples/audio/resources/coin.wav +0 -0
  135. package/vendor/raylib/examples/audio/resources/country.mp3 +0 -0
  136. package/vendor/raylib/examples/audio/resources/mini1111.xm +0 -0
  137. package/vendor/raylib/examples/audio/resources/sound.wav +0 -0
  138. package/vendor/raylib/examples/audio/resources/spring.wav +0 -0
  139. package/vendor/raylib/examples/audio/resources/target.flac +0 -0
  140. package/vendor/raylib/examples/audio/resources/target.ogg +0 -0
  141. package/vendor/raylib/examples/audio/resources/weird.wav +0 -0
  142. package/vendor/raylib/examples/build.zig +86 -0
  143. package/vendor/raylib/examples/core/core_2d_camera.c +132 -0
  144. package/vendor/raylib/examples/core/core_2d_camera.png +0 -0
  145. package/vendor/raylib/examples/core/core_2d_camera_platformer.c +293 -0
  146. package/vendor/raylib/examples/core/core_2d_camera_platformer.png +0 -0
  147. package/vendor/raylib/examples/core/core_2d_camera_smooth_pixelperfect.png +0 -0
  148. package/vendor/raylib/examples/core/core_3d_camera_first_person.c +97 -0
  149. package/vendor/raylib/examples/core/core_3d_camera_first_person.png +0 -0
  150. package/vendor/raylib/examples/core/core_3d_camera_free.c +83 -0
  151. package/vendor/raylib/examples/core/core_3d_camera_free.png +0 -0
  152. package/vendor/raylib/examples/core/core_3d_camera_mode.c +73 -0
  153. package/vendor/raylib/examples/core/core_3d_camera_mode.png +0 -0
  154. package/vendor/raylib/examples/core/core_3d_picking.c +107 -0
  155. package/vendor/raylib/examples/core/core_3d_picking.png +0 -0
  156. package/vendor/raylib/examples/core/core_basic_screen_manager.c +150 -0
  157. package/vendor/raylib/examples/core/core_basic_screen_manager.png +0 -0
  158. package/vendor/raylib/examples/core/core_basic_window.c +62 -0
  159. package/vendor/raylib/examples/core/core_basic_window.png +0 -0
  160. package/vendor/raylib/examples/core/core_basic_window_web.c +85 -0
  161. package/vendor/raylib/examples/core/core_custom_frame_control.c +125 -0
  162. package/vendor/raylib/examples/core/core_custom_frame_control.png +0 -0
  163. package/vendor/raylib/examples/core/core_custom_logging.c +84 -0
  164. package/vendor/raylib/examples/core/core_custom_logging.png +0 -0
  165. package/vendor/raylib/examples/core/core_drop_files.c +76 -0
  166. package/vendor/raylib/examples/core/core_drop_files.png +0 -0
  167. package/vendor/raylib/examples/core/core_input_gamepad.c +195 -0
  168. package/vendor/raylib/examples/core/core_input_gamepad.png +0 -0
  169. package/vendor/raylib/examples/core/core_input_gestures.c +115 -0
  170. package/vendor/raylib/examples/core/core_input_gestures.png +0 -0
  171. package/vendor/raylib/examples/core/core_input_keys.c +59 -0
  172. package/vendor/raylib/examples/core/core_input_keys.png +0 -0
  173. package/vendor/raylib/examples/core/core_input_mouse.c +65 -0
  174. package/vendor/raylib/examples/core/core_input_mouse.png +0 -0
  175. package/vendor/raylib/examples/core/core_input_mouse_wheel.c +58 -0
  176. package/vendor/raylib/examples/core/core_input_mouse_wheel.png +0 -0
  177. package/vendor/raylib/examples/core/core_input_multitouch.c +70 -0
  178. package/vendor/raylib/examples/core/core_input_multitouch.png +0 -0
  179. package/vendor/raylib/examples/core/core_loading_thread.c +147 -0
  180. package/vendor/raylib/examples/core/core_loading_thread.png +0 -0
  181. package/vendor/raylib/examples/core/core_quat_conversion.c +132 -0
  182. package/vendor/raylib/examples/core/core_quat_conversion.png +0 -0
  183. package/vendor/raylib/examples/core/core_random_values.c +67 -0
  184. package/vendor/raylib/examples/core/core_random_values.png +0 -0
  185. package/vendor/raylib/examples/core/core_scissor_test.c +71 -0
  186. package/vendor/raylib/examples/core/core_scissor_test.png +0 -0
  187. package/vendor/raylib/examples/core/core_smooth_pixelperfect.c +117 -0
  188. package/vendor/raylib/examples/core/core_smooth_pixelperfect.png +0 -0
  189. package/vendor/raylib/examples/core/core_split_screen.c +155 -0
  190. package/vendor/raylib/examples/core/core_split_screen.png +0 -0
  191. package/vendor/raylib/examples/core/core_storage_values.c +87 -0
  192. package/vendor/raylib/examples/core/core_storage_values.png +0 -0
  193. package/vendor/raylib/examples/core/core_vr_simulator.c +143 -0
  194. package/vendor/raylib/examples/core/core_vr_simulator.png +0 -0
  195. package/vendor/raylib/examples/core/core_window_flags.c +191 -0
  196. package/vendor/raylib/examples/core/core_window_flags.png +0 -0
  197. package/vendor/raylib/examples/core/core_window_letterbox.c +112 -0
  198. package/vendor/raylib/examples/core/core_window_letterbox.png +0 -0
  199. package/vendor/raylib/examples/core/core_world_screen.c +78 -0
  200. package/vendor/raylib/examples/core/core_world_screen.png +0 -0
  201. package/vendor/raylib/examples/core/resources/LICENSE.md +4 -0
  202. package/vendor/raylib/examples/core/resources/distortion100.fs +52 -0
  203. package/vendor/raylib/examples/core/resources/distortion330.fs +53 -0
  204. package/vendor/raylib/examples/core/resources/ps3.png +0 -0
  205. package/vendor/raylib/examples/core/resources/xbox.png +0 -0
  206. package/vendor/raylib/examples/examples_template.c +100 -0
  207. package/vendor/raylib/examples/models/models_animation.c +114 -0
  208. package/vendor/raylib/examples/models/models_animation.png +0 -0
  209. package/vendor/raylib/examples/models/models_billboard.c +75 -0
  210. package/vendor/raylib/examples/models/models_billboard.png +0 -0
  211. package/vendor/raylib/examples/models/models_box_collisions.c +121 -0
  212. package/vendor/raylib/examples/models/models_box_collisions.png +0 -0
  213. package/vendor/raylib/examples/models/models_cubicmap.c +87 -0
  214. package/vendor/raylib/examples/models/models_cubicmap.png +0 -0
  215. package/vendor/raylib/examples/models/models_first_person_maze.c +122 -0
  216. package/vendor/raylib/examples/models/models_first_person_maze.png +0 -0
  217. package/vendor/raylib/examples/models/models_geometric_shapes.c +80 -0
  218. package/vendor/raylib/examples/models/models_geometric_shapes.png +0 -0
  219. package/vendor/raylib/examples/models/models_heightmap.c +82 -0
  220. package/vendor/raylib/examples/models/models_heightmap.png +0 -0
  221. package/vendor/raylib/examples/models/models_loading.c +146 -0
  222. package/vendor/raylib/examples/models/models_loading.png +0 -0
  223. package/vendor/raylib/examples/models/models_loading_gltf.c +105 -0
  224. package/vendor/raylib/examples/models/models_loading_gltf.png +0 -0
  225. package/vendor/raylib/examples/models/models_loading_vox.c +130 -0
  226. package/vendor/raylib/examples/models/models_loading_vox.png +0 -0
  227. package/vendor/raylib/examples/models/models_mesh_generation.c +179 -0
  228. package/vendor/raylib/examples/models/models_mesh_generation.png +0 -0
  229. package/vendor/raylib/examples/models/models_mesh_picking.c +223 -0
  230. package/vendor/raylib/examples/models/models_mesh_picking.png +0 -0
  231. package/vendor/raylib/examples/models/models_orthographic_projection.c +99 -0
  232. package/vendor/raylib/examples/models/models_orthographic_projection.png +0 -0
  233. package/vendor/raylib/examples/models/models_rlgl_solar_system.c +172 -0
  234. package/vendor/raylib/examples/models/models_rlgl_solar_system.png +0 -0
  235. package/vendor/raylib/examples/models/models_skybox.c +262 -0
  236. package/vendor/raylib/examples/models/models_skybox.png +0 -0
  237. package/vendor/raylib/examples/models/models_waving_cubes.c +112 -0
  238. package/vendor/raylib/examples/models/models_waving_cubes.png +0 -0
  239. package/vendor/raylib/examples/models/models_yaw_pitch_roll.c +117 -0
  240. package/vendor/raylib/examples/models/models_yaw_pitch_roll.png +0 -0
  241. package/vendor/raylib/examples/models/resources/LICENSE.md +23 -0
  242. package/vendor/raylib/examples/models/resources/billboard.png +0 -0
  243. package/vendor/raylib/examples/models/resources/cubicmap.png +0 -0
  244. package/vendor/raylib/examples/models/resources/cubicmap_atlas.png +0 -0
  245. package/vendor/raylib/examples/models/resources/dresden_square_1k.hdr +0 -0
  246. package/vendor/raylib/examples/models/resources/dresden_square_2k.hdr +0 -0
  247. package/vendor/raylib/examples/models/resources/heightmap.png +0 -0
  248. package/vendor/raylib/examples/models/resources/models/gltf/AnimatedMorphCube.glb +0 -0
  249. package/vendor/raylib/examples/models/resources/models/gltf/AnimatedTriangle.gltf +118 -0
  250. package/vendor/raylib/examples/models/resources/models/gltf/BoxAnimated.glb +0 -0
  251. package/vendor/raylib/examples/models/resources/models/gltf/LICENSE +23 -0
  252. package/vendor/raylib/examples/models/resources/models/gltf/girl.glb +0 -0
  253. package/vendor/raylib/examples/models/resources/models/gltf/raylib_32x32.glb +0 -0
  254. package/vendor/raylib/examples/models/resources/models/gltf/rigged_figure.glb +0 -0
  255. package/vendor/raylib/examples/models/resources/models/gltf/vertex_colored_object.glb +0 -0
  256. package/vendor/raylib/examples/models/resources/models/iqm/guy.blend +0 -0
  257. package/vendor/raylib/examples/models/resources/models/iqm/guy.iqm +0 -0
  258. package/vendor/raylib/examples/models/resources/models/iqm/guyanim.iqm +0 -0
  259. package/vendor/raylib/examples/models/resources/models/iqm/guytex.png +0 -0
  260. package/vendor/raylib/examples/models/resources/models/iqm/vertex_colored_object.iqm +0 -0
  261. package/vendor/raylib/examples/models/resources/models/obj/bridge.obj +1725 -0
  262. package/vendor/raylib/examples/models/resources/models/obj/bridge_diffuse.png +0 -0
  263. package/vendor/raylib/examples/models/resources/models/obj/castle.obj +12919 -0
  264. package/vendor/raylib/examples/models/resources/models/obj/castle_diffuse.png +0 -0
  265. package/vendor/raylib/examples/models/resources/models/obj/cube.obj +68 -0
  266. package/vendor/raylib/examples/models/resources/models/obj/cube_diffuse.png +0 -0
  267. package/vendor/raylib/examples/models/resources/models/obj/house.obj +4564 -0
  268. package/vendor/raylib/examples/models/resources/models/obj/house_diffuse.png +0 -0
  269. package/vendor/raylib/examples/models/resources/models/obj/market.obj +7301 -0
  270. package/vendor/raylib/examples/models/resources/models/obj/market_diffuse.png +0 -0
  271. package/vendor/raylib/examples/models/resources/models/obj/plane.obj +10858 -0
  272. package/vendor/raylib/examples/models/resources/models/obj/plane_diffuse.png +0 -0
  273. package/vendor/raylib/examples/models/resources/models/obj/turret.obj +1888 -0
  274. package/vendor/raylib/examples/models/resources/models/obj/turret_diffuse.png +0 -0
  275. package/vendor/raylib/examples/models/resources/models/obj/well.obj +1030 -0
  276. package/vendor/raylib/examples/models/resources/models/obj/well_diffuse.png +0 -0
  277. package/vendor/raylib/examples/models/resources/models/vox/LICENSE +9 -0
  278. package/vendor/raylib/examples/models/resources/models/vox/chr_knight.vox +0 -0
  279. package/vendor/raylib/examples/models/resources/models/vox/chr_sword.vox +0 -0
  280. package/vendor/raylib/examples/models/resources/models/vox/monu9.vox +0 -0
  281. package/vendor/raylib/examples/models/resources/shaders/glsl100/cubemap.fs +29 -0
  282. package/vendor/raylib/examples/models/resources/shaders/glsl100/cubemap.vs +20 -0
  283. package/vendor/raylib/examples/models/resources/shaders/glsl100/skybox.fs +31 -0
  284. package/vendor/raylib/examples/models/resources/shaders/glsl100/skybox.vs +24 -0
  285. package/vendor/raylib/examples/models/resources/shaders/glsl330/cubemap.fs +30 -0
  286. package/vendor/raylib/examples/models/resources/shaders/glsl330/cubemap.vs +20 -0
  287. package/vendor/raylib/examples/models/resources/shaders/glsl330/skybox.fs +30 -0
  288. package/vendor/raylib/examples/models/resources/shaders/glsl330/skybox.vs +24 -0
  289. package/vendor/raylib/examples/models/resources/skybox.png +0 -0
  290. package/vendor/raylib/examples/models/rlights.h +183 -0
  291. package/vendor/raylib/examples/others/easings.h +263 -0
  292. package/vendor/raylib/examples/others/easings_testbed.c +227 -0
  293. package/vendor/raylib/examples/others/embedded_files_loading.c +103 -0
  294. package/vendor/raylib/examples/others/external/include/GLFW/glfw3.h +5538 -0
  295. package/vendor/raylib/examples/others/external/include/GLFW/glfw3native.h +572 -0
  296. package/vendor/raylib/examples/others/external/include/glad.h +5466 -0
  297. package/vendor/raylib/examples/others/external/lib/libglfw3.a +0 -0
  298. package/vendor/raylib/examples/others/raudio_standalone.c +152 -0
  299. package/vendor/raylib/examples/others/raylib_opengl_interop.c +152 -0
  300. package/vendor/raylib/examples/others/raylib_opengl_interop.png +0 -0
  301. package/vendor/raylib/examples/others/resources/audio/country.mp3 +0 -0
  302. package/vendor/raylib/examples/others/resources/audio/target.ogg +0 -0
  303. package/vendor/raylib/examples/others/resources/audio/weird.wav +0 -0
  304. package/vendor/raylib/examples/others/resources/audio_data.h +4893 -0
  305. package/vendor/raylib/examples/others/resources/image_data.h +9848 -0
  306. package/vendor/raylib/examples/others/resources/shaders/glsl100/point_particle.fs +16 -0
  307. package/vendor/raylib/examples/others/resources/shaders/glsl100/point_particle.vs +24 -0
  308. package/vendor/raylib/examples/others/resources/shaders/glsl330/point_particle.fs +17 -0
  309. package/vendor/raylib/examples/others/resources/shaders/glsl330/point_particle.vs +24 -0
  310. package/vendor/raylib/examples/others/resources/shaders/glsl430/gol.glsl +41 -0
  311. package/vendor/raylib/examples/others/resources/shaders/glsl430/gol_render.glsl +29 -0
  312. package/vendor/raylib/examples/others/resources/shaders/glsl430/gol_transfert.glsl +51 -0
  313. package/vendor/raylib/examples/others/rlgl_compute_shader.c +173 -0
  314. package/vendor/raylib/examples/others/rlgl_standalone.c +469 -0
  315. package/vendor/raylib/examples/physics/physics_demo.c +128 -0
  316. package/vendor/raylib/examples/physics/physics_demo.png +0 -0
  317. package/vendor/raylib/examples/physics/physics_friction.c +142 -0
  318. package/vendor/raylib/examples/physics/physics_friction.png +0 -0
  319. package/vendor/raylib/examples/physics/physics_movement.c +128 -0
  320. package/vendor/raylib/examples/physics/physics_movement.png +0 -0
  321. package/vendor/raylib/examples/physics/physics_restitution.c +129 -0
  322. package/vendor/raylib/examples/physics/physics_restitution.png +0 -0
  323. package/vendor/raylib/examples/physics/physics_shatter.c +111 -0
  324. package/vendor/raylib/examples/physics/physics_shatter.png +0 -0
  325. package/vendor/raylib/examples/raylib_compile_execute.bat +32 -0
  326. package/vendor/raylib/examples/raylib_makefile_example.bat +27 -0
  327. package/vendor/raylib/examples/shaders/resources/LICENSE.md +11 -0
  328. package/vendor/raylib/examples/shaders/resources/fudesumi.png +0 -0
  329. package/vendor/raylib/examples/shaders/resources/mask.png +0 -0
  330. package/vendor/raylib/examples/shaders/resources/models/barracks.obj +22251 -0
  331. package/vendor/raylib/examples/shaders/resources/models/barracks_diffuse.png +0 -0
  332. package/vendor/raylib/examples/shaders/resources/models/church.obj +5116 -0
  333. package/vendor/raylib/examples/shaders/resources/models/church_diffuse.png +0 -0
  334. package/vendor/raylib/examples/shaders/resources/models/watermill.obj +5316 -0
  335. package/vendor/raylib/examples/shaders/resources/models/watermill_diffuse.png +0 -0
  336. package/vendor/raylib/examples/shaders/resources/plasma.png +0 -0
  337. package/vendor/raylib/examples/shaders/resources/raysan.png +0 -0
  338. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/base.fs +23 -0
  339. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/base.vs +26 -0
  340. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/base_lighting.vs +59 -0
  341. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/base_lighting_instanced.vs +36 -0
  342. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/bloom.fs +39 -0
  343. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/blur.fs +34 -0
  344. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/color_mix.fs +26 -0
  345. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/cross_hatching.fs +47 -0
  346. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/cross_stitching.fs +57 -0
  347. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/cubes_panning.fs +60 -0
  348. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/depth.fs +26 -0
  349. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/distortion.fs +54 -0
  350. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/dream_vision.fs +37 -0
  351. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/eratosthenes.fs +60 -0
  352. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/fisheye.fs +43 -0
  353. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/fog.fs +94 -0
  354. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/grayscale.fs +25 -0
  355. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/julia_set.fs +83 -0
  356. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/lighting.fs +81 -0
  357. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/mask.fs +24 -0
  358. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/outline.fs +34 -0
  359. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/palette_switch.fs +41 -0
  360. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/pixelizer.fs +32 -0
  361. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/posterization.fs +29 -0
  362. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/predator.fs +31 -0
  363. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/raymarching.fs +431 -0
  364. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/reload.fs +39 -0
  365. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/scanlines.fs +44 -0
  366. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/sobel.fs +40 -0
  367. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/spotlight.fs +77 -0
  368. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/swirl.fs +46 -0
  369. package/vendor/raylib/examples/shaders/resources/shaders/glsl100/wave.fs +36 -0
  370. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/base.fs +22 -0
  371. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/base.vs +26 -0
  372. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/base_lighting.vs +59 -0
  373. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/bloom.fs +37 -0
  374. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/blur.fs +32 -0
  375. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/cross_hatching.fs +45 -0
  376. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/cross_stitching.fs +55 -0
  377. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/distortion.fs +52 -0
  378. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/dream_vision.fs +35 -0
  379. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/fisheye.fs +41 -0
  380. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/fog.fs +92 -0
  381. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/grayscale.fs +23 -0
  382. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/palette_switch.fs +27 -0
  383. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/pixelizer.fs +30 -0
  384. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/posterization.fs +27 -0
  385. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/predator.fs +29 -0
  386. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/scanlines.fs +42 -0
  387. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/sobel.fs +38 -0
  388. package/vendor/raylib/examples/shaders/resources/shaders/glsl120/swirl.fs +44 -0
  389. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/base.fs +25 -0
  390. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/base.vs +26 -0
  391. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/base_lighting.vs +32 -0
  392. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/base_lighting_instanced.vs +36 -0
  393. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/bloom.fs +40 -0
  394. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/blur.fs +35 -0
  395. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/color_mix.fs +27 -0
  396. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/cross_hatching.fs +48 -0
  397. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/cross_stitching.fs +59 -0
  398. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/cubes_panning.fs +61 -0
  399. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/depth.fs +27 -0
  400. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/distortion.fs +56 -0
  401. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/dream_vision.fs +34 -0
  402. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/eratosthenes.fs +59 -0
  403. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/fisheye.fs +40 -0
  404. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/fog.fs +95 -0
  405. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/grayscale.fs +26 -0
  406. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/julia_set.fs +81 -0
  407. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/lighting.fs +82 -0
  408. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/mask.fs +22 -0
  409. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/outline.fs +35 -0
  410. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/overdraw.fs +26 -0
  411. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/palette_switch.fs +30 -0
  412. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/pixelizer.fs +33 -0
  413. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/posterization.fs +31 -0
  414. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/predator.fs +32 -0
  415. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/raymarching.fs +430 -0
  416. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/reload.fs +40 -0
  417. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/scanlines.fs +49 -0
  418. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/sobel.fs +41 -0
  419. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/spotlight.fs +65 -0
  420. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/swirl.fs +47 -0
  421. package/vendor/raylib/examples/shaders/resources/shaders/glsl330/wave.fs +37 -0
  422. package/vendor/raylib/examples/shaders/resources/space.png +0 -0
  423. package/vendor/raylib/examples/shaders/resources/texel_checker.png +0 -0
  424. package/vendor/raylib/examples/shaders/rlights.h +183 -0
  425. package/vendor/raylib/examples/shaders/shaders_basic_lighting.c +152 -0
  426. package/vendor/raylib/examples/shaders/shaders_basic_lighting.png +0 -0
  427. package/vendor/raylib/examples/shaders/shaders_custom_uniform.c +127 -0
  428. package/vendor/raylib/examples/shaders/shaders_custom_uniform.png +0 -0
  429. package/vendor/raylib/examples/shaders/shaders_eratosthenes.c +92 -0
  430. package/vendor/raylib/examples/shaders/shaders_eratosthenes.png +0 -0
  431. package/vendor/raylib/examples/shaders/shaders_fog.c +160 -0
  432. package/vendor/raylib/examples/shaders/shaders_fog.png +0 -0
  433. package/vendor/raylib/examples/shaders/shaders_hot_reloading.c +130 -0
  434. package/vendor/raylib/examples/shaders/shaders_hot_reloading.png +0 -0
  435. package/vendor/raylib/examples/shaders/shaders_julia_set.c +191 -0
  436. package/vendor/raylib/examples/shaders/shaders_julia_set.png +0 -0
  437. package/vendor/raylib/examples/shaders/shaders_mesh_instancing.c +224 -0
  438. package/vendor/raylib/examples/shaders/shaders_mesh_instancing.png +0 -0
  439. package/vendor/raylib/examples/shaders/shaders_model_shader.c +103 -0
  440. package/vendor/raylib/examples/shaders/shaders_model_shader.png +0 -0
  441. package/vendor/raylib/examples/shaders/shaders_multi_sample2d.c +105 -0
  442. package/vendor/raylib/examples/shaders/shaders_multi_sample2d.png +0 -0
  443. package/vendor/raylib/examples/shaders/shaders_palette_switch.c +147 -0
  444. package/vendor/raylib/examples/shaders/shaders_palette_switch.png +0 -0
  445. package/vendor/raylib/examples/shaders/shaders_postprocessing.c +170 -0
  446. package/vendor/raylib/examples/shaders/shaders_postprocessing.png +0 -0
  447. package/vendor/raylib/examples/shaders/shaders_raymarching.c +113 -0
  448. package/vendor/raylib/examples/shaders/shaders_raymarching.png +0 -0
  449. package/vendor/raylib/examples/shaders/shaders_shapes_textures.c +116 -0
  450. package/vendor/raylib/examples/shaders/shaders_shapes_textures.png +0 -0
  451. package/vendor/raylib/examples/shaders/shaders_simple_mask.c +144 -0
  452. package/vendor/raylib/examples/shaders/shaders_simple_mask.png +0 -0
  453. package/vendor/raylib/examples/shaders/shaders_spotlight.c +254 -0
  454. package/vendor/raylib/examples/shaders/shaders_spotlight.png +0 -0
  455. package/vendor/raylib/examples/shaders/shaders_texture_drawing.c +80 -0
  456. package/vendor/raylib/examples/shaders/shaders_texture_drawing.png +0 -0
  457. package/vendor/raylib/examples/shaders/shaders_texture_outline.c +97 -0
  458. package/vendor/raylib/examples/shaders/shaders_texture_outline.png +0 -0
  459. package/vendor/raylib/examples/shaders/shaders_texture_waves.c +110 -0
  460. package/vendor/raylib/examples/shaders/shaders_texture_waves.png +0 -0
  461. package/vendor/raylib/examples/shapes/shapes_basic_shapes.c +78 -0
  462. package/vendor/raylib/examples/shapes/shapes_basic_shapes.png +0 -0
  463. package/vendor/raylib/examples/shapes/shapes_bouncing_ball.c +76 -0
  464. package/vendor/raylib/examples/shapes/shapes_bouncing_ball.png +0 -0
  465. package/vendor/raylib/examples/shapes/shapes_collision_area.c +108 -0
  466. package/vendor/raylib/examples/shapes/shapes_collision_area.png +0 -0
  467. package/vendor/raylib/examples/shapes/shapes_colors_palette.c +99 -0
  468. package/vendor/raylib/examples/shapes/shapes_colors_palette.png +0 -0
  469. package/vendor/raylib/examples/shapes/shapes_draw_circle_sector.c +83 -0
  470. package/vendor/raylib/examples/shapes/shapes_draw_circle_sector.png +0 -0
  471. package/vendor/raylib/examples/shapes/shapes_draw_rectangle_rounded.c +89 -0
  472. package/vendor/raylib/examples/shapes/shapes_draw_rectangle_rounded.png +0 -0
  473. package/vendor/raylib/examples/shapes/shapes_draw_ring.c +96 -0
  474. package/vendor/raylib/examples/shapes/shapes_draw_ring.png +0 -0
  475. package/vendor/raylib/examples/shapes/shapes_easings_ball_anim.c +110 -0
  476. package/vendor/raylib/examples/shapes/shapes_easings_ball_anim.png +0 -0
  477. package/vendor/raylib/examples/shapes/shapes_easings_box_anim.c +136 -0
  478. package/vendor/raylib/examples/shapes/shapes_easings_box_anim.png +0 -0
  479. package/vendor/raylib/examples/shapes/shapes_easings_rectangle_array.c +118 -0
  480. package/vendor/raylib/examples/shapes/shapes_easings_rectangle_array.png +0 -0
  481. package/vendor/raylib/examples/shapes/shapes_following_eyes.c +104 -0
  482. package/vendor/raylib/examples/shapes/shapes_following_eyes.png +0 -0
  483. package/vendor/raylib/examples/shapes/shapes_lines_bezier.c +59 -0
  484. package/vendor/raylib/examples/shapes/shapes_lines_bezier.png +0 -0
  485. package/vendor/raylib/examples/shapes/shapes_logo_raylib.c +56 -0
  486. package/vendor/raylib/examples/shapes/shapes_logo_raylib.png +0 -0
  487. package/vendor/raylib/examples/shapes/shapes_logo_raylib_anim.c +160 -0
  488. package/vendor/raylib/examples/shapes/shapes_logo_raylib_anim.png +0 -0
  489. package/vendor/raylib/examples/shapes/shapes_rectangle_scaling.c +94 -0
  490. package/vendor/raylib/examples/shapes/shapes_rectangle_scaling.png +0 -0
  491. package/vendor/raylib/examples/text/resources/KAISG.ttf +0 -0
  492. package/vendor/raylib/examples/text/resources/LICENSE.md +20 -0
  493. package/vendor/raylib/examples/text/resources/anonymous_pro_bold.ttf +0 -0
  494. package/vendor/raylib/examples/text/resources/custom_alagard.png +0 -0
  495. package/vendor/raylib/examples/text/resources/custom_jupiter_crash.png +0 -0
  496. package/vendor/raylib/examples/text/resources/custom_mecha.png +0 -0
  497. package/vendor/raylib/examples/text/resources/dejavu.fnt +1115 -0
  498. package/vendor/raylib/examples/text/resources/dejavu.png +0 -0
  499. package/vendor/raylib/examples/text/resources/fonts/alagard.png +0 -0
  500. package/vendor/raylib/examples/text/resources/fonts/alpha_beta.png +0 -0
  501. package/vendor/raylib/examples/text/resources/fonts/jupiter_crash.png +0 -0
  502. package/vendor/raylib/examples/text/resources/fonts/mecha.png +0 -0
  503. package/vendor/raylib/examples/text/resources/fonts/pixantiqua.png +0 -0
  504. package/vendor/raylib/examples/text/resources/fonts/pixelplay.png +0 -0
  505. package/vendor/raylib/examples/text/resources/fonts/romulus.png +0 -0
  506. package/vendor/raylib/examples/text/resources/fonts/setback.png +0 -0
  507. package/vendor/raylib/examples/text/resources/noto_cjk.fnt +580 -0
  508. package/vendor/raylib/examples/text/resources/noto_cjk.png +0 -0
  509. package/vendor/raylib/examples/text/resources/pixantiqua.fnt +188 -0
  510. package/vendor/raylib/examples/text/resources/pixantiqua.png +0 -0
  511. package/vendor/raylib/examples/text/resources/pixantiqua.ttf +0 -0
  512. package/vendor/raylib/examples/text/resources/shaders/glsl100/alpha_discard.fs +20 -0
  513. package/vendor/raylib/examples/text/resources/shaders/glsl100/sdf.fs +25 -0
  514. package/vendor/raylib/examples/text/resources/shaders/glsl330/alpha_discard.fs +19 -0
  515. package/vendor/raylib/examples/text/resources/shaders/glsl330/sdf.fs +26 -0
  516. package/vendor/raylib/examples/text/resources/symbola.fnt +191 -0
  517. package/vendor/raylib/examples/text/resources/symbola.png +0 -0
  518. package/vendor/raylib/examples/text/text_draw_3d.c +739 -0
  519. package/vendor/raylib/examples/text/text_draw_3d.png +0 -0
  520. package/vendor/raylib/examples/text/text_font_filters.c +134 -0
  521. package/vendor/raylib/examples/text/text_font_filters.png +0 -0
  522. package/vendor/raylib/examples/text/text_font_loading.c +91 -0
  523. package/vendor/raylib/examples/text/text_font_loading.png +0 -0
  524. package/vendor/raylib/examples/text/text_font_sdf.c +141 -0
  525. package/vendor/raylib/examples/text/text_font_sdf.png +0 -0
  526. package/vendor/raylib/examples/text/text_font_spritefont.c +85 -0
  527. package/vendor/raylib/examples/text/text_font_spritefont.png +0 -0
  528. package/vendor/raylib/examples/text/text_format_text.c +62 -0
  529. package/vendor/raylib/examples/text/text_format_text.png +0 -0
  530. package/vendor/raylib/examples/text/text_input_box.c +127 -0
  531. package/vendor/raylib/examples/text/text_input_box.png +0 -0
  532. package/vendor/raylib/examples/text/text_raylib_fonts.c +105 -0
  533. package/vendor/raylib/examples/text/text_raylib_fonts.png +0 -0
  534. package/vendor/raylib/examples/text/text_rectangle_bounds.c +264 -0
  535. package/vendor/raylib/examples/text/text_rectangle_bounds.png +0 -0
  536. package/vendor/raylib/examples/text/text_unicode.c +465 -0
  537. package/vendor/raylib/examples/text/text_unicode.png +0 -0
  538. package/vendor/raylib/examples/text/text_writing_anim.c +62 -0
  539. package/vendor/raylib/examples/text/text_writing_anim.png +0 -0
  540. package/vendor/raylib/examples/textures/resources/KAISG.ttf +0 -0
  541. package/vendor/raylib/examples/textures/resources/LICENSE.md +18 -0
  542. package/vendor/raylib/examples/textures/resources/boom.wav +0 -0
  543. package/vendor/raylib/examples/textures/resources/button.png +0 -0
  544. package/vendor/raylib/examples/textures/resources/buttonfx.wav +0 -0
  545. package/vendor/raylib/examples/textures/resources/cat.png +0 -0
  546. package/vendor/raylib/examples/textures/resources/custom_jupiter_crash.png +0 -0
  547. package/vendor/raylib/examples/textures/resources/cyberpunk_street_background.png +0 -0
  548. package/vendor/raylib/examples/textures/resources/cyberpunk_street_foreground.png +0 -0
  549. package/vendor/raylib/examples/textures/resources/cyberpunk_street_midground.png +0 -0
  550. package/vendor/raylib/examples/textures/resources/explosion.png +0 -0
  551. package/vendor/raylib/examples/textures/resources/fudesumi.png +0 -0
  552. package/vendor/raylib/examples/textures/resources/fudesumi.raw +0 -0
  553. package/vendor/raylib/examples/textures/resources/ninepatch_button.png +0 -0
  554. package/vendor/raylib/examples/textures/resources/parrots.png +0 -0
  555. package/vendor/raylib/examples/textures/resources/patterns.png +0 -0
  556. package/vendor/raylib/examples/textures/resources/raylib_logo.png +0 -0
  557. package/vendor/raylib/examples/textures/resources/scarfy.png +0 -0
  558. package/vendor/raylib/examples/textures/resources/spark_flame.png +0 -0
  559. package/vendor/raylib/examples/textures/resources/wabbit_alpha.png +0 -0
  560. package/vendor/raylib/examples/textures/textures_background_scrolling.c +87 -0
  561. package/vendor/raylib/examples/textures/textures_background_scrolling.png +0 -0
  562. package/vendor/raylib/examples/textures/textures_blend_modes.c +93 -0
  563. package/vendor/raylib/examples/textures/textures_blend_modes.png +0 -0
  564. package/vendor/raylib/examples/textures/textures_bunnymark.c +120 -0
  565. package/vendor/raylib/examples/textures/textures_bunnymark.png +0 -0
  566. package/vendor/raylib/examples/textures/textures_draw_tiled.c +165 -0
  567. package/vendor/raylib/examples/textures/textures_draw_tiled.png +0 -0
  568. package/vendor/raylib/examples/textures/textures_image_drawing.c +91 -0
  569. package/vendor/raylib/examples/textures/textures_image_drawing.png +0 -0
  570. package/vendor/raylib/examples/textures/textures_image_generation.c +102 -0
  571. package/vendor/raylib/examples/textures/textures_image_generation.png +0 -0
  572. package/vendor/raylib/examples/textures/textures_image_loading.c +64 -0
  573. package/vendor/raylib/examples/textures/textures_image_loading.png +0 -0
  574. package/vendor/raylib/examples/textures/textures_image_processing.c +169 -0
  575. package/vendor/raylib/examples/textures/textures_image_processing.png +0 -0
  576. package/vendor/raylib/examples/textures/textures_image_text.c +83 -0
  577. package/vendor/raylib/examples/textures/textures_image_text.png +0 -0
  578. package/vendor/raylib/examples/textures/textures_logo_raylib.c +57 -0
  579. package/vendor/raylib/examples/textures/textures_logo_raylib.png +0 -0
  580. package/vendor/raylib/examples/textures/textures_mouse_painting.c +221 -0
  581. package/vendor/raylib/examples/textures/textures_mouse_painting.png +0 -0
  582. package/vendor/raylib/examples/textures/textures_npatch_drawing.c +109 -0
  583. package/vendor/raylib/examples/textures/textures_npatch_drawing.png +0 -0
  584. package/vendor/raylib/examples/textures/textures_particles_blending.c +135 -0
  585. package/vendor/raylib/examples/textures/textures_particles_blending.png +0 -0
  586. package/vendor/raylib/examples/textures/textures_polygon.c +100 -0
  587. package/vendor/raylib/examples/textures/textures_polygon.png +0 -0
  588. package/vendor/raylib/examples/textures/textures_raw_data.c +99 -0
  589. package/vendor/raylib/examples/textures/textures_raw_data.png +0 -0
  590. package/vendor/raylib/examples/textures/textures_rectangle.c +99 -0
  591. package/vendor/raylib/examples/textures/textures_rectangle.png +0 -0
  592. package/vendor/raylib/examples/textures/textures_sprite_button.c +97 -0
  593. package/vendor/raylib/examples/textures/textures_sprite_button.png +0 -0
  594. package/vendor/raylib/examples/textures/textures_sprite_explosion.c +120 -0
  595. package/vendor/raylib/examples/textures/textures_sprite_explosion.png +0 -0
  596. package/vendor/raylib/examples/textures/textures_srcrec_dstrec.c +82 -0
  597. package/vendor/raylib/examples/textures/textures_srcrec_dstrec.png +0 -0
  598. package/vendor/raylib/examples/textures/textures_to_image.c +68 -0
  599. package/vendor/raylib/examples/textures/textures_to_image.png +0 -0
  600. package/vendor/raylib/logo/raylib.ico +0 -0
  601. package/vendor/raylib/logo/raylib_128x128.png +0 -0
  602. package/vendor/raylib/logo/raylib_144x144.png +0 -0
  603. package/vendor/raylib/logo/raylib_16x16.png +0 -0
  604. package/vendor/raylib/logo/raylib_180x180.png +0 -0
  605. package/vendor/raylib/logo/raylib_24x24.png +0 -0
  606. package/vendor/raylib/logo/raylib_256x256.png +0 -0
  607. package/vendor/raylib/logo/raylib_32x32.png +0 -0
  608. package/vendor/raylib/logo/raylib_36x36.png +0 -0
  609. package/vendor/raylib/logo/raylib_48x48.png +0 -0
  610. package/vendor/raylib/logo/raylib_512x512.png +0 -0
  611. package/vendor/raylib/logo/raylib_64x64.png +0 -0
  612. package/vendor/raylib/logo/raylib_72x72.png +0 -0
  613. package/vendor/raylib/logo/raylib_96x96.png +0 -0
  614. package/vendor/raylib/logo/raylib_logo_animation.gif +0 -0
  615. package/vendor/raylib/parser/LICENSE +16 -0
  616. package/vendor/raylib/parser/README.md +63 -0
  617. package/vendor/raylib/parser/raylib_api.json +6668 -0
  618. package/vendor/raylib/parser/raylib_api.txt +3568 -0
  619. package/vendor/raylib/parser/raylib_api.xml +2509 -0
  620. package/vendor/raylib/parser/raylib_parser.c +1003 -0
  621. package/vendor/raylib/projects/4coder/Makefile +401 -0
  622. package/vendor/raylib/projects/4coder/Makefile.Android +300 -0
  623. package/vendor/raylib/projects/4coder/main.c +39 -0
  624. package/vendor/raylib/projects/4coder/project.4coder +54 -0
  625. package/vendor/raylib/projects/Builder/README.md +24 -0
  626. package/vendor/raylib/projects/Builder/examples/README.md +1 -0
  627. package/vendor/raylib/projects/Builder/examples/meson.build +25 -0
  628. package/vendor/raylib/projects/Builder/meson.build +25 -0
  629. package/vendor/raylib/projects/CMake/CMakeLists.txt +44 -0
  630. package/vendor/raylib/projects/CMake/core_basic_window.c +62 -0
  631. package/vendor/raylib/projects/CodeBlocks/README.md +22 -0
  632. package/vendor/raylib/projects/CodeBlocks/compiler_settings.png +0 -0
  633. package/vendor/raylib/projects/CodeBlocks/core_basic_window.c +58 -0
  634. package/vendor/raylib/projects/CodeBlocks/core_basic_window.cbp +137 -0
  635. package/vendor/raylib/projects/Geany/core_basic_window.c +52 -0
  636. package/vendor/raylib/projects/Geany/raylib.c.tags +452 -0
  637. package/vendor/raylib/projects/Geany/raylib_compile_execute.bat +21 -0
  638. package/vendor/raylib/projects/Geany/raylib_compile_sources.bat +42 -0
  639. package/vendor/raylib/projects/Geany/raylib_project.geany +41 -0
  640. package/vendor/raylib/projects/Notepad++/README.md +19 -0
  641. package/vendor/raylib/projects/Notepad++/c_raylib.xml +3104 -0
  642. package/vendor/raylib/projects/Notepad++/npes_saved_mingw.txt +0 -0
  643. package/vendor/raylib/projects/Notepad++/npes_saved_tcc.txt +0 -0
  644. package/vendor/raylib/projects/Notepad++/npes_saved_w64devkit.txt +0 -0
  645. package/vendor/raylib/projects/Notepad++/npes_saved_zig.txt +0 -0
  646. package/vendor/raylib/projects/Notepad++/raylib_npp_parser/raylib_npp.xml +3060 -0
  647. package/vendor/raylib/projects/Notepad++/raylib_npp_parser/raylib_npp_parser.c +150 -0
  648. package/vendor/raylib/projects/Notepad++/raylib_npp_parser/raylib_to_parse.h +631 -0
  649. package/vendor/raylib/projects/README.md +18 -0
  650. package/vendor/raylib/projects/SublimeText/README.md +13 -0
  651. package/vendor/raylib/projects/SublimeText/raylib.sublime-build +13 -0
  652. package/vendor/raylib/projects/SublimeText/raylib.sublime-project +8 -0
  653. package/vendor/raylib/projects/VS2019/raylib/raylib.rc +0 -0
  654. package/vendor/raylib/projects/VS2019/raylib/resource.h +14 -0
  655. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.NativeActivity/android_native_app_glue.c +437 -0
  656. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.NativeActivity/android_native_app_glue.h +344 -0
  657. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.NativeActivity/main.c +64 -0
  658. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/AndroidManifest.xml +22 -0
  659. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/build.xml +90 -0
  660. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/project.properties +3 -0
  661. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/raylib_android.Packaging.androidproj +134 -0
  662. package/vendor/raylib/projects/VS2019-Android/raylib_android/raylib_android.Packaging/res/values/strings.xml +4 -0
  663. package/vendor/raylib/projects/VSCode/.vscode/c_cpp_properties.json +63 -0
  664. package/vendor/raylib/projects/VSCode/.vscode/launch.json +60 -0
  665. package/vendor/raylib/projects/VSCode/.vscode/settings.json +11 -0
  666. package/vendor/raylib/projects/VSCode/.vscode/tasks.json +71 -0
  667. package/vendor/raylib/projects/VSCode/Makefile +408 -0
  668. package/vendor/raylib/projects/VSCode/Makefile.Android +300 -0
  669. package/vendor/raylib/projects/VSCode/main.c +83 -0
  670. package/vendor/raylib/projects/VSCode/main.code-workspace +16 -0
  671. package/vendor/raylib/projects/scripts/README.md +68 -0
  672. package/vendor/raylib/projects/scripts/build-linux.sh +169 -0
  673. package/vendor/raylib/projects/scripts/build-osx.sh +171 -0
  674. package/vendor/raylib/projects/scripts/build-rpi.sh +169 -0
  675. package/vendor/raylib/projects/scripts/build-windows.bat +219 -0
  676. package/vendor/raylib/projects/scripts/core_basic_window.c +61 -0
  677. package/vendor/raylib/raylib.pc.in +13 -0
  678. package/vendor/raylib/src/CMakeLists.txt +121 -0
  679. package/vendor/raylib/src/Makefile +696 -0
  680. package/vendor/raylib/src/build.zig +60 -0
  681. package/vendor/raylib/src/config.h +230 -0
  682. package/vendor/raylib/src/external/cgltf.h +6501 -0
  683. package/vendor/raylib/src/external/dirent.h +183 -0
  684. package/vendor/raylib/src/external/dr_flac.h +12269 -0
  685. package/vendor/raylib/src/external/dr_mp3.h +4787 -0
  686. package/vendor/raylib/src/external/dr_wav.h +8019 -0
  687. package/vendor/raylib/src/external/glad.h +8640 -0
  688. package/vendor/raylib/src/external/glfw/.mailmap +10 -0
  689. package/vendor/raylib/src/external/glfw/CMake/GenerateMappings.cmake +33 -0
  690. package/vendor/raylib/src/external/glfw/CMake/Info.plist.in +38 -0
  691. package/vendor/raylib/src/external/glfw/CMake/MacOSXBundleInfo.plist.in +38 -0
  692. package/vendor/raylib/src/external/glfw/CMake/cmake_uninstall.cmake.in +29 -0
  693. package/vendor/raylib/src/external/glfw/CMake/glfw3.pc.in +13 -0
  694. package/vendor/raylib/src/external/glfw/CMake/glfw3Config.cmake.in +3 -0
  695. package/vendor/raylib/src/external/glfw/CMake/i686-w64-mingw32-clang.cmake +13 -0
  696. package/vendor/raylib/src/external/glfw/CMake/i686-w64-mingw32.cmake +13 -0
  697. package/vendor/raylib/src/external/glfw/CMake/modules/FindEpollShim.cmake +17 -0
  698. package/vendor/raylib/src/external/glfw/CMake/modules/FindOSMesa.cmake +18 -0
  699. package/vendor/raylib/src/external/glfw/CMake/modules/FindWaylandProtocols.cmake +26 -0
  700. package/vendor/raylib/src/external/glfw/CMake/modules/FindXKBCommon.cmake +34 -0
  701. package/vendor/raylib/src/external/glfw/CMake/x86_64-w64-mingw32-clang.cmake +13 -0
  702. package/vendor/raylib/src/external/glfw/CMake/x86_64-w64-mingw32.cmake +13 -0
  703. package/vendor/raylib/src/external/glfw/CMakeLists.txt +323 -0
  704. package/vendor/raylib/src/external/glfw/LICENSE.md +23 -0
  705. package/vendor/raylib/src/external/glfw/README.md +477 -0
  706. package/vendor/raylib/src/external/glfw/deps/getopt.c +230 -0
  707. package/vendor/raylib/src/external/glfw/deps/getopt.h +57 -0
  708. package/vendor/raylib/src/external/glfw/deps/glad/gl.h +3840 -0
  709. package/vendor/raylib/src/external/glfw/deps/glad/khrplatform.h +282 -0
  710. package/vendor/raylib/src/external/glfw/deps/glad/vk_platform.h +92 -0
  711. package/vendor/raylib/src/external/glfw/deps/glad/vulkan.h +3480 -0
  712. package/vendor/raylib/src/external/glfw/deps/glad_gl.c +1791 -0
  713. package/vendor/raylib/src/external/glfw/deps/glad_vulkan.c +593 -0
  714. package/vendor/raylib/src/external/glfw/deps/mingw/_mingw_dxhelper.h +117 -0
  715. package/vendor/raylib/src/external/glfw/deps/mingw/dinput.h +2467 -0
  716. package/vendor/raylib/src/external/glfw/deps/mingw/xinput.h +239 -0
  717. package/vendor/raylib/src/external/glfw/deps/vs2008/stdint.h +247 -0
  718. package/vendor/raylib/src/external/glfw/include/GLFW/glfw3.h +6075 -0
  719. package/vendor/raylib/src/external/glfw/include/GLFW/glfw3native.h +530 -0
  720. package/vendor/raylib/src/external/glfw/src/CMakeLists.txt +246 -0
  721. package/vendor/raylib/src/external/glfw/src/cocoa_init.m +620 -0
  722. package/vendor/raylib/src/external/glfw/src/cocoa_joystick.h +46 -0
  723. package/vendor/raylib/src/external/glfw/src/cocoa_joystick.m +483 -0
  724. package/vendor/raylib/src/external/glfw/src/cocoa_monitor.m +631 -0
  725. package/vendor/raylib/src/external/glfw/src/cocoa_platform.h +206 -0
  726. package/vendor/raylib/src/external/glfw/src/cocoa_time.c +62 -0
  727. package/vendor/raylib/src/external/glfw/src/cocoa_window.m +1923 -0
  728. package/vendor/raylib/src/external/glfw/src/context.c +756 -0
  729. package/vendor/raylib/src/external/glfw/src/egl_context.c +846 -0
  730. package/vendor/raylib/src/external/glfw/src/egl_context.h +229 -0
  731. package/vendor/raylib/src/external/glfw/src/glfw.rc.in +30 -0
  732. package/vendor/raylib/src/external/glfw/src/glfw_config.h.in +58 -0
  733. package/vendor/raylib/src/external/glfw/src/glx_context.c +699 -0
  734. package/vendor/raylib/src/external/glfw/src/glx_context.h +181 -0
  735. package/vendor/raylib/src/external/glfw/src/init.c +357 -0
  736. package/vendor/raylib/src/external/glfw/src/input.c +1406 -0
  737. package/vendor/raylib/src/external/glfw/src/internal.h +799 -0
  738. package/vendor/raylib/src/external/glfw/src/linux_joystick.c +428 -0
  739. package/vendor/raylib/src/external/glfw/src/linux_joystick.h +59 -0
  740. package/vendor/raylib/src/external/glfw/src/mappings.h +1550 -0
  741. package/vendor/raylib/src/external/glfw/src/mappings.h.in +73 -0
  742. package/vendor/raylib/src/external/glfw/src/monitor.c +542 -0
  743. package/vendor/raylib/src/external/glfw/src/nsgl_context.h +66 -0
  744. package/vendor/raylib/src/external/glfw/src/nsgl_context.m +369 -0
  745. package/vendor/raylib/src/external/glfw/src/null_init.c +57 -0
  746. package/vendor/raylib/src/external/glfw/src/null_joystick.c +53 -0
  747. package/vendor/raylib/src/external/glfw/src/null_joystick.h +31 -0
  748. package/vendor/raylib/src/external/glfw/src/null_monitor.c +159 -0
  749. package/vendor/raylib/src/external/glfw/src/null_platform.h +89 -0
  750. package/vendor/raylib/src/external/glfw/src/null_window.c +670 -0
  751. package/vendor/raylib/src/external/glfw/src/osmesa_context.c +372 -0
  752. package/vendor/raylib/src/external/glfw/src/osmesa_context.h +90 -0
  753. package/vendor/raylib/src/external/glfw/src/posix_thread.c +105 -0
  754. package/vendor/raylib/src/external/glfw/src/posix_thread.h +51 -0
  755. package/vendor/raylib/src/external/glfw/src/posix_time.c +90 -0
  756. package/vendor/raylib/src/external/glfw/src/posix_time.h +44 -0
  757. package/vendor/raylib/src/external/glfw/src/vulkan.c +332 -0
  758. package/vendor/raylib/src/external/glfw/src/wgl_context.c +798 -0
  759. package/vendor/raylib/src/external/glfw/src/wgl_context.h +160 -0
  760. package/vendor/raylib/src/external/glfw/src/win32_init.c +636 -0
  761. package/vendor/raylib/src/external/glfw/src/win32_joystick.c +753 -0
  762. package/vendor/raylib/src/external/glfw/src/win32_joystick.h +53 -0
  763. package/vendor/raylib/src/external/glfw/src/win32_monitor.c +537 -0
  764. package/vendor/raylib/src/external/glfw/src/win32_platform.h +462 -0
  765. package/vendor/raylib/src/external/glfw/src/win32_thread.c +99 -0
  766. package/vendor/raylib/src/external/glfw/src/win32_time.c +76 -0
  767. package/vendor/raylib/src/external/glfw/src/win32_window.c +2405 -0
  768. package/vendor/raylib/src/external/glfw/src/window.c +1114 -0
  769. package/vendor/raylib/src/external/glfw/src/wl_init.c +1310 -0
  770. package/vendor/raylib/src/external/glfw/src/wl_monitor.c +231 -0
  771. package/vendor/raylib/src/external/glfw/src/wl_platform.h +352 -0
  772. package/vendor/raylib/src/external/glfw/src/wl_window.c +1814 -0
  773. package/vendor/raylib/src/external/glfw/src/x11_init.c +1500 -0
  774. package/vendor/raylib/src/external/glfw/src/x11_monitor.c +614 -0
  775. package/vendor/raylib/src/external/glfw/src/x11_platform.h +798 -0
  776. package/vendor/raylib/src/external/glfw/src/x11_window.c +3310 -0
  777. package/vendor/raylib/src/external/glfw/src/xkb_unicode.c +942 -0
  778. package/vendor/raylib/src/external/glfw/src/xkb_unicode.h +28 -0
  779. package/vendor/raylib/src/external/jar_mod.h +1596 -0
  780. package/vendor/raylib/src/external/jar_xm.h +2470 -0
  781. package/vendor/raylib/src/external/miniaudio.h +70273 -0
  782. package/vendor/raylib/src/external/msf_gif.h +717 -0
  783. package/vendor/raylib/src/external/par_shapes.h +2155 -0
  784. package/vendor/raylib/src/external/sdefl.h +696 -0
  785. package/vendor/raylib/src/external/sinfl.h +584 -0
  786. package/vendor/raylib/src/external/stb_image.h +7897 -0
  787. package/vendor/raylib/src/external/stb_image_resize.h +2634 -0
  788. package/vendor/raylib/src/external/stb_image_write.h +1724 -0
  789. package/vendor/raylib/src/external/stb_rect_pack.h +623 -0
  790. package/vendor/raylib/src/external/stb_truetype.h +5077 -0
  791. package/vendor/raylib/src/external/stb_vorbis.h +5475 -0
  792. package/vendor/raylib/src/external/tinyobj_loader_c.h +1589 -0
  793. package/vendor/raylib/src/external/vox_loader.h +710 -0
  794. package/vendor/raylib/src/extras/easings.h +263 -0
  795. package/vendor/raylib/src/extras/physac.h +1977 -0
  796. package/vendor/raylib/src/extras/raygui.h +4342 -0
  797. package/vendor/raylib/src/extras/rmem.h +751 -0
  798. package/vendor/raylib/src/raudio.c +2380 -0
  799. package/vendor/raylib/src/raudio.h +198 -0
  800. package/vendor/raylib/src/raylib.dll.rc +27 -0
  801. package/vendor/raylib/src/raylib.dll.rc.data +0 -0
  802. package/vendor/raylib/src/raylib.h +1536 -0
  803. package/vendor/raylib/src/raylib.ico +0 -0
  804. package/vendor/raylib/src/raylib.rc +27 -0
  805. package/vendor/raylib/src/raylib.rc.data +0 -0
  806. package/vendor/raylib/src/raymath.h +1853 -0
  807. package/vendor/raylib/src/rcamera.h +567 -0
  808. package/vendor/raylib/src/rcore.c +6772 -0
  809. package/vendor/raylib/src/rgestures.h +566 -0
  810. package/vendor/raylib/src/rglfw.c +126 -0
  811. package/vendor/raylib/src/rlgl.h +4677 -0
  812. package/vendor/raylib/src/rmodels.c +5041 -0
  813. package/vendor/raylib/src/rshapes.c +1759 -0
  814. package/vendor/raylib/src/rtext.c +1790 -0
  815. package/vendor/raylib/src/rtextures.c +4761 -0
  816. package/vendor/raylib/src/shell.html +328 -0
  817. package/vendor/raylib/src/utils.c +433 -0
  818. package/vendor/raylib/src/utils.h +81 -0
  819. package/vendor/sqlite3/shell.c +23487 -0
  820. package/vendor/sqlite3/sqlite3.c +239246 -0
  821. package/vendor/sqlite3/sqlite3.h +12802 -0
  822. package/vendor/sqlite3/sqlite3ext.h +689 -0
  823. package/CMakeLists.txt +0 -60
@@ -0,0 +1,2405 @@
1
+ //========================================================================
2
+ // GLFW 3.4 Win32 - www.glfw.org
3
+ //------------------------------------------------------------------------
4
+ // Copyright (c) 2002-2006 Marcus Geelnard
5
+ // Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
6
+ //
7
+ // This software is provided 'as-is', without any express or implied
8
+ // warranty. In no event will the authors be held liable for any damages
9
+ // arising from the use of this software.
10
+ //
11
+ // Permission is granted to anyone to use this software for any purpose,
12
+ // including commercial applications, and to alter it and redistribute it
13
+ // freely, subject to the following restrictions:
14
+ //
15
+ // 1. The origin of this software must not be misrepresented; you must not
16
+ // claim that you wrote the original software. If you use this software
17
+ // in a product, an acknowledgment in the product documentation would
18
+ // be appreciated but is not required.
19
+ //
20
+ // 2. Altered source versions must be plainly marked as such, and must not
21
+ // be misrepresented as being the original software.
22
+ //
23
+ // 3. This notice may not be removed or altered from any source
24
+ // distribution.
25
+ //
26
+ //========================================================================
27
+ // Please use C89 style variable declarations in this file because VS 2010
28
+ //========================================================================
29
+
30
+ #include "internal.h"
31
+
32
+ #include <limits.h>
33
+ #include <stdlib.h>
34
+ #include <malloc.h>
35
+ #include <string.h>
36
+ #include <windowsx.h>
37
+ #include <shellapi.h>
38
+
39
+ // Returns the window style for the specified window
40
+ //
41
+ static DWORD getWindowStyle(const _GLFWwindow* window)
42
+ {
43
+ DWORD style = WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
44
+
45
+ if (window->monitor)
46
+ style |= WS_POPUP;
47
+ else
48
+ {
49
+ style |= WS_SYSMENU | WS_MINIMIZEBOX;
50
+
51
+ if (window->decorated)
52
+ {
53
+ style |= WS_CAPTION;
54
+
55
+ if (window->resizable)
56
+ style |= WS_MAXIMIZEBOX | WS_THICKFRAME;
57
+ }
58
+ else
59
+ style |= WS_POPUP;
60
+ }
61
+
62
+ return style;
63
+ }
64
+
65
+ // Returns the extended window style for the specified window
66
+ //
67
+ static DWORD getWindowExStyle(const _GLFWwindow* window)
68
+ {
69
+ DWORD style = WS_EX_APPWINDOW;
70
+
71
+ if (window->monitor || window->floating)
72
+ style |= WS_EX_TOPMOST;
73
+
74
+ return style;
75
+ }
76
+
77
+ // Returns the image whose area most closely matches the desired one
78
+ //
79
+ static const GLFWimage* chooseImage(int count, const GLFWimage* images,
80
+ int width, int height)
81
+ {
82
+ int i, leastDiff = INT_MAX;
83
+ const GLFWimage* closest = NULL;
84
+
85
+ for (i = 0; i < count; i++)
86
+ {
87
+ const int currDiff = abs(images[i].width * images[i].height -
88
+ width * height);
89
+ if (currDiff < leastDiff)
90
+ {
91
+ closest = images + i;
92
+ leastDiff = currDiff;
93
+ }
94
+ }
95
+
96
+ return closest;
97
+ }
98
+
99
+ // Creates an RGBA icon or cursor
100
+ //
101
+ static HICON createIcon(const GLFWimage* image,
102
+ int xhot, int yhot, GLFWbool icon)
103
+ {
104
+ int i;
105
+ HDC dc;
106
+ HICON handle;
107
+ HBITMAP color, mask;
108
+ BITMAPV5HEADER bi;
109
+ ICONINFO ii;
110
+ unsigned char* target = NULL;
111
+ unsigned char* source = image->pixels;
112
+
113
+ ZeroMemory(&bi, sizeof(bi));
114
+ bi.bV5Size = sizeof(bi);
115
+ bi.bV5Width = image->width;
116
+ bi.bV5Height = -image->height;
117
+ bi.bV5Planes = 1;
118
+ bi.bV5BitCount = 32;
119
+ bi.bV5Compression = BI_BITFIELDS;
120
+ bi.bV5RedMask = 0x00ff0000;
121
+ bi.bV5GreenMask = 0x0000ff00;
122
+ bi.bV5BlueMask = 0x000000ff;
123
+ bi.bV5AlphaMask = 0xff000000;
124
+
125
+ dc = GetDC(NULL);
126
+ color = CreateDIBSection(dc,
127
+ (BITMAPINFO*) &bi,
128
+ DIB_RGB_COLORS,
129
+ (void**) &target,
130
+ NULL,
131
+ (DWORD) 0);
132
+ ReleaseDC(NULL, dc);
133
+
134
+ if (!color)
135
+ {
136
+ _glfwInputErrorWin32(GLFW_PLATFORM_ERROR,
137
+ "Win32: Failed to create RGBA bitmap");
138
+ return NULL;
139
+ }
140
+
141
+ mask = CreateBitmap(image->width, image->height, 1, 1, NULL);
142
+ if (!mask)
143
+ {
144
+ _glfwInputErrorWin32(GLFW_PLATFORM_ERROR,
145
+ "Win32: Failed to create mask bitmap");
146
+ DeleteObject(color);
147
+ return NULL;
148
+ }
149
+
150
+ for (i = 0; i < image->width * image->height; i++)
151
+ {
152
+ target[0] = source[2];
153
+ target[1] = source[1];
154
+ target[2] = source[0];
155
+ target[3] = source[3];
156
+ target += 4;
157
+ source += 4;
158
+ }
159
+
160
+ ZeroMemory(&ii, sizeof(ii));
161
+ ii.fIcon = icon;
162
+ ii.xHotspot = xhot;
163
+ ii.yHotspot = yhot;
164
+ ii.hbmMask = mask;
165
+ ii.hbmColor = color;
166
+
167
+ handle = CreateIconIndirect(&ii);
168
+
169
+ DeleteObject(color);
170
+ DeleteObject(mask);
171
+
172
+ if (!handle)
173
+ {
174
+ if (icon)
175
+ {
176
+ _glfwInputErrorWin32(GLFW_PLATFORM_ERROR,
177
+ "Win32: Failed to create icon");
178
+ }
179
+ else
180
+ {
181
+ _glfwInputErrorWin32(GLFW_PLATFORM_ERROR,
182
+ "Win32: Failed to create cursor");
183
+ }
184
+ }
185
+
186
+ return handle;
187
+ }
188
+
189
+ // Translate content area size to full window size according to styles and DPI
190
+ //
191
+ static void getFullWindowSize(DWORD style, DWORD exStyle,
192
+ int contentWidth, int contentHeight,
193
+ int* fullWidth, int* fullHeight,
194
+ UINT dpi)
195
+ {
196
+ RECT rect = { 0, 0, contentWidth, contentHeight };
197
+
198
+ if (_glfwIsWindows10AnniversaryUpdateOrGreaterWin32())
199
+ AdjustWindowRectExForDpi(&rect, style, FALSE, exStyle, dpi);
200
+ else
201
+ AdjustWindowRectEx(&rect, style, FALSE, exStyle);
202
+
203
+ *fullWidth = rect.right - rect.left;
204
+ *fullHeight = rect.bottom - rect.top;
205
+ }
206
+
207
+ // Enforce the content area aspect ratio based on which edge is being dragged
208
+ //
209
+ static void applyAspectRatio(_GLFWwindow* window, int edge, RECT* area)
210
+ {
211
+ int xoff, yoff;
212
+ UINT dpi = USER_DEFAULT_SCREEN_DPI;
213
+ const float ratio = (float) window->numer / (float) window->denom;
214
+
215
+ if (_glfwIsWindows10AnniversaryUpdateOrGreaterWin32())
216
+ dpi = GetDpiForWindow(window->win32.handle);
217
+
218
+ getFullWindowSize(getWindowStyle(window), getWindowExStyle(window),
219
+ 0, 0, &xoff, &yoff, dpi);
220
+
221
+ if (edge == WMSZ_LEFT || edge == WMSZ_BOTTOMLEFT ||
222
+ edge == WMSZ_RIGHT || edge == WMSZ_BOTTOMRIGHT)
223
+ {
224
+ area->bottom = area->top + yoff +
225
+ (int) ((area->right - area->left - xoff) / ratio);
226
+ }
227
+ else if (edge == WMSZ_TOPLEFT || edge == WMSZ_TOPRIGHT)
228
+ {
229
+ area->top = area->bottom - yoff -
230
+ (int) ((area->right - area->left - xoff) / ratio);
231
+ }
232
+ else if (edge == WMSZ_TOP || edge == WMSZ_BOTTOM)
233
+ {
234
+ area->right = area->left + xoff +
235
+ (int) ((area->bottom - area->top - yoff) * ratio);
236
+ }
237
+ }
238
+
239
+ // Updates the cursor image according to its cursor mode
240
+ //
241
+ static void updateCursorImage(_GLFWwindow* window)
242
+ {
243
+ if (window->cursorMode == GLFW_CURSOR_NORMAL)
244
+ {
245
+ if (window->cursor)
246
+ SetCursor(window->cursor->win32.handle);
247
+ else
248
+ SetCursor(LoadCursorW(NULL, IDC_ARROW));
249
+ }
250
+ else
251
+ SetCursor(NULL);
252
+ }
253
+
254
+ // Updates the cursor clip rect
255
+ //
256
+ static void updateClipRect(_GLFWwindow* window)
257
+ {
258
+ if (window)
259
+ {
260
+ RECT clipRect;
261
+ GetClientRect(window->win32.handle, &clipRect);
262
+ ClientToScreen(window->win32.handle, (POINT*) &clipRect.left);
263
+ ClientToScreen(window->win32.handle, (POINT*) &clipRect.right);
264
+ ClipCursor(&clipRect);
265
+ }
266
+ else
267
+ ClipCursor(NULL);
268
+ }
269
+
270
+ // Enables WM_INPUT messages for the mouse for the specified window
271
+ //
272
+ static void enableRawMouseMotion(_GLFWwindow* window)
273
+ {
274
+ const RAWINPUTDEVICE rid = { 0x01, 0x02, 0, window->win32.handle };
275
+
276
+ if (!RegisterRawInputDevices(&rid, 1, sizeof(rid)))
277
+ {
278
+ _glfwInputErrorWin32(GLFW_PLATFORM_ERROR,
279
+ "Win32: Failed to register raw input device");
280
+ }
281
+ }
282
+
283
+ // Disables WM_INPUT messages for the mouse
284
+ //
285
+ static void disableRawMouseMotion(_GLFWwindow* window)
286
+ {
287
+ const RAWINPUTDEVICE rid = { 0x01, 0x02, RIDEV_REMOVE, NULL };
288
+
289
+ if (!RegisterRawInputDevices(&rid, 1, sizeof(rid)))
290
+ {
291
+ _glfwInputErrorWin32(GLFW_PLATFORM_ERROR,
292
+ "Win32: Failed to remove raw input device");
293
+ }
294
+ }
295
+
296
+ // Apply disabled cursor mode to a focused window
297
+ //
298
+ static void disableCursor(_GLFWwindow* window)
299
+ {
300
+ _glfw.win32.disabledCursorWindow = window;
301
+ _glfwPlatformGetCursorPos(window,
302
+ &_glfw.win32.restoreCursorPosX,
303
+ &_glfw.win32.restoreCursorPosY);
304
+ updateCursorImage(window);
305
+ _glfwCenterCursorInContentArea(window);
306
+ updateClipRect(window);
307
+
308
+ if (window->rawMouseMotion)
309
+ enableRawMouseMotion(window);
310
+ }
311
+
312
+ // Exit disabled cursor mode for the specified window
313
+ //
314
+ static void enableCursor(_GLFWwindow* window)
315
+ {
316
+ if (window->rawMouseMotion)
317
+ disableRawMouseMotion(window);
318
+
319
+ _glfw.win32.disabledCursorWindow = NULL;
320
+ updateClipRect(NULL);
321
+ _glfwPlatformSetCursorPos(window,
322
+ _glfw.win32.restoreCursorPosX,
323
+ _glfw.win32.restoreCursorPosY);
324
+ updateCursorImage(window);
325
+ }
326
+
327
+ // Returns whether the cursor is in the content area of the specified window
328
+ //
329
+ static GLFWbool cursorInContentArea(_GLFWwindow* window)
330
+ {
331
+ RECT area;
332
+ POINT pos;
333
+
334
+ if (!GetCursorPos(&pos))
335
+ return GLFW_FALSE;
336
+
337
+ if (WindowFromPoint(pos) != window->win32.handle)
338
+ return GLFW_FALSE;
339
+
340
+ GetClientRect(window->win32.handle, &area);
341
+ ClientToScreen(window->win32.handle, (POINT*) &area.left);
342
+ ClientToScreen(window->win32.handle, (POINT*) &area.right);
343
+
344
+ return PtInRect(&area, pos);
345
+ }
346
+
347
+ // Update native window styles to match attributes
348
+ //
349
+ static void updateWindowStyles(const _GLFWwindow* window)
350
+ {
351
+ RECT rect;
352
+ DWORD style = GetWindowLongW(window->win32.handle, GWL_STYLE);
353
+ style &= ~(WS_OVERLAPPEDWINDOW | WS_POPUP);
354
+ style |= getWindowStyle(window);
355
+
356
+ GetClientRect(window->win32.handle, &rect);
357
+
358
+ if (_glfwIsWindows10AnniversaryUpdateOrGreaterWin32())
359
+ {
360
+ AdjustWindowRectExForDpi(&rect, style, FALSE,
361
+ getWindowExStyle(window),
362
+ GetDpiForWindow(window->win32.handle));
363
+ }
364
+ else
365
+ AdjustWindowRectEx(&rect, style, FALSE, getWindowExStyle(window));
366
+
367
+ ClientToScreen(window->win32.handle, (POINT*) &rect.left);
368
+ ClientToScreen(window->win32.handle, (POINT*) &rect.right);
369
+ SetWindowLongW(window->win32.handle, GWL_STYLE, style);
370
+ SetWindowPos(window->win32.handle, HWND_TOP,
371
+ rect.left, rect.top,
372
+ rect.right - rect.left, rect.bottom - rect.top,
373
+ SWP_FRAMECHANGED | SWP_NOACTIVATE | SWP_NOZORDER);
374
+ }
375
+
376
+ // Update window framebuffer transparency
377
+ //
378
+ static void updateFramebufferTransparency(const _GLFWwindow* window)
379
+ {
380
+ BOOL composition, opaque;
381
+ DWORD color;
382
+
383
+ if (!IsWindowsVistaOrGreater())
384
+ return;
385
+
386
+ if (FAILED(DwmIsCompositionEnabled(&composition)) || !composition)
387
+ return;
388
+
389
+ if (IsWindows8OrGreater() ||
390
+ (SUCCEEDED(DwmGetColorizationColor(&color, &opaque)) && !opaque))
391
+ {
392
+ HRGN region = CreateRectRgn(0, 0, -1, -1);
393
+ DWM_BLURBEHIND bb = {0};
394
+ bb.dwFlags = DWM_BB_ENABLE | DWM_BB_BLURREGION;
395
+ bb.hRgnBlur = region;
396
+ bb.fEnable = TRUE;
397
+
398
+ DwmEnableBlurBehindWindow(window->win32.handle, &bb);
399
+ DeleteObject(region);
400
+ }
401
+ else
402
+ {
403
+ // HACK: Disable framebuffer transparency on Windows 7 when the
404
+ // colorization color is opaque, because otherwise the window
405
+ // contents is blended additively with the previous frame instead
406
+ // of replacing it
407
+ DWM_BLURBEHIND bb = {0};
408
+ bb.dwFlags = DWM_BB_ENABLE;
409
+ DwmEnableBlurBehindWindow(window->win32.handle, &bb);
410
+ }
411
+ }
412
+
413
+ // Retrieves and translates modifier keys
414
+ //
415
+ static int getKeyMods(void)
416
+ {
417
+ int mods = 0;
418
+
419
+ if (GetKeyState(VK_SHIFT) & 0x8000)
420
+ mods |= GLFW_MOD_SHIFT;
421
+ if (GetKeyState(VK_CONTROL) & 0x8000)
422
+ mods |= GLFW_MOD_CONTROL;
423
+ if (GetKeyState(VK_MENU) & 0x8000)
424
+ mods |= GLFW_MOD_ALT;
425
+ if ((GetKeyState(VK_LWIN) | GetKeyState(VK_RWIN)) & 0x8000)
426
+ mods |= GLFW_MOD_SUPER;
427
+ if (GetKeyState(VK_CAPITAL) & 1)
428
+ mods |= GLFW_MOD_CAPS_LOCK;
429
+ if (GetKeyState(VK_NUMLOCK) & 1)
430
+ mods |= GLFW_MOD_NUM_LOCK;
431
+
432
+ return mods;
433
+ }
434
+
435
+ static void fitToMonitor(_GLFWwindow* window)
436
+ {
437
+ MONITORINFO mi = { sizeof(mi) };
438
+ GetMonitorInfo(window->monitor->win32.handle, &mi);
439
+ SetWindowPos(window->win32.handle, HWND_TOPMOST,
440
+ mi.rcMonitor.left,
441
+ mi.rcMonitor.top,
442
+ mi.rcMonitor.right - mi.rcMonitor.left,
443
+ mi.rcMonitor.bottom - mi.rcMonitor.top,
444
+ SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOCOPYBITS);
445
+ }
446
+
447
+ // Make the specified window and its video mode active on its monitor
448
+ //
449
+ static void acquireMonitor(_GLFWwindow* window)
450
+ {
451
+ if (!_glfw.win32.acquiredMonitorCount)
452
+ {
453
+ SetThreadExecutionState(ES_CONTINUOUS | ES_DISPLAY_REQUIRED);
454
+
455
+ // HACK: When mouse trails are enabled the cursor becomes invisible when
456
+ // the OpenGL ICD switches to page flipping
457
+ SystemParametersInfo(SPI_GETMOUSETRAILS, 0, &_glfw.win32.mouseTrailSize, 0);
458
+ SystemParametersInfo(SPI_SETMOUSETRAILS, 0, 0, 0);
459
+ }
460
+
461
+ if (!window->monitor->window)
462
+ _glfw.win32.acquiredMonitorCount++;
463
+
464
+ _glfwSetVideoModeWin32(window->monitor, &window->videoMode);
465
+ _glfwInputMonitorWindow(window->monitor, window);
466
+ }
467
+
468
+ // Remove the window and restore the original video mode
469
+ //
470
+ static void releaseMonitor(_GLFWwindow* window)
471
+ {
472
+ if (window->monitor->window != window)
473
+ return;
474
+
475
+ _glfw.win32.acquiredMonitorCount--;
476
+ if (!_glfw.win32.acquiredMonitorCount)
477
+ {
478
+ SetThreadExecutionState(ES_CONTINUOUS);
479
+
480
+ // HACK: Restore mouse trail length saved in acquireMonitor
481
+ SystemParametersInfo(SPI_SETMOUSETRAILS, _glfw.win32.mouseTrailSize, 0, 0);
482
+ }
483
+
484
+ _glfwInputMonitorWindow(window->monitor, NULL);
485
+ _glfwRestoreVideoModeWin32(window->monitor);
486
+ }
487
+
488
+ // Window callback function (handles window messages)
489
+ //
490
+ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg,
491
+ WPARAM wParam, LPARAM lParam)
492
+ {
493
+ _GLFWwindow* window = GetPropW(hWnd, L"GLFW");
494
+ if (!window)
495
+ {
496
+ // This is the message handling for the hidden helper window
497
+ // and for a regular window during its initial creation
498
+
499
+ switch (uMsg)
500
+ {
501
+ case WM_NCCREATE:
502
+ {
503
+ if (_glfwIsWindows10AnniversaryUpdateOrGreaterWin32())
504
+ {
505
+ const CREATESTRUCTW* cs = (const CREATESTRUCTW*) lParam;
506
+ const _GLFWwndconfig* wndconfig = cs->lpCreateParams;
507
+
508
+ // On per-monitor DPI aware V1 systems, only enable
509
+ // non-client scaling for windows that scale the client area
510
+ // We need WM_GETDPISCALEDSIZE from V2 to keep the client
511
+ // area static when the non-client area is scaled
512
+ if (wndconfig && wndconfig->scaleToMonitor)
513
+ EnableNonClientDpiScaling(hWnd);
514
+ }
515
+
516
+ break;
517
+ }
518
+
519
+ case WM_DISPLAYCHANGE:
520
+ _glfwPollMonitorsWin32();
521
+ break;
522
+
523
+ case WM_DEVICECHANGE:
524
+ {
525
+ if (!_glfw.joysticksInitialized)
526
+ break;
527
+
528
+ if (wParam == DBT_DEVICEARRIVAL)
529
+ {
530
+ DEV_BROADCAST_HDR* dbh = (DEV_BROADCAST_HDR*) lParam;
531
+ if (dbh && dbh->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE)
532
+ _glfwDetectJoystickConnectionWin32();
533
+ }
534
+ else if (wParam == DBT_DEVICEREMOVECOMPLETE)
535
+ {
536
+ DEV_BROADCAST_HDR* dbh = (DEV_BROADCAST_HDR*) lParam;
537
+ if (dbh && dbh->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE)
538
+ _glfwDetectJoystickDisconnectionWin32();
539
+ }
540
+
541
+ break;
542
+ }
543
+ }
544
+
545
+ return DefWindowProcW(hWnd, uMsg, wParam, lParam);
546
+ }
547
+
548
+ switch (uMsg)
549
+ {
550
+ case WM_MOUSEACTIVATE:
551
+ {
552
+ // HACK: Postpone cursor disabling when the window was activated by
553
+ // clicking a caption button
554
+ if (HIWORD(lParam) == WM_LBUTTONDOWN)
555
+ {
556
+ if (LOWORD(lParam) != HTCLIENT)
557
+ window->win32.frameAction = GLFW_TRUE;
558
+ }
559
+
560
+ break;
561
+ }
562
+
563
+ case WM_CAPTURECHANGED:
564
+ {
565
+ // HACK: Disable the cursor once the caption button action has been
566
+ // completed or cancelled
567
+ if (lParam == 0 && window->win32.frameAction)
568
+ {
569
+ if (window->cursorMode == GLFW_CURSOR_DISABLED)
570
+ disableCursor(window);
571
+
572
+ window->win32.frameAction = GLFW_FALSE;
573
+ }
574
+
575
+ break;
576
+ }
577
+
578
+ case WM_SETFOCUS:
579
+ {
580
+ _glfwInputWindowFocus(window, GLFW_TRUE);
581
+
582
+ // HACK: Do not disable cursor while the user is interacting with
583
+ // a caption button
584
+ if (window->win32.frameAction)
585
+ break;
586
+
587
+ if (window->cursorMode == GLFW_CURSOR_DISABLED)
588
+ disableCursor(window);
589
+
590
+ return 0;
591
+ }
592
+
593
+ case WM_KILLFOCUS:
594
+ {
595
+ if (window->cursorMode == GLFW_CURSOR_DISABLED)
596
+ enableCursor(window);
597
+
598
+ if (window->monitor && window->autoIconify)
599
+ _glfwPlatformIconifyWindow(window);
600
+
601
+ _glfwInputWindowFocus(window, GLFW_FALSE);
602
+ return 0;
603
+ }
604
+
605
+ case WM_SYSCOMMAND:
606
+ {
607
+ switch (wParam & 0xfff0)
608
+ {
609
+ case SC_SCREENSAVE:
610
+ case SC_MONITORPOWER:
611
+ {
612
+ if (window->monitor)
613
+ {
614
+ // We are running in full screen mode, so disallow
615
+ // screen saver and screen blanking
616
+ return 0;
617
+ }
618
+ else
619
+ break;
620
+ }
621
+
622
+ // User trying to access application menu using ALT?
623
+ case SC_KEYMENU:
624
+ {
625
+ if (!window->win32.keymenu)
626
+ return 0;
627
+
628
+ break;
629
+ }
630
+ }
631
+ break;
632
+ }
633
+
634
+ case WM_CLOSE:
635
+ {
636
+ _glfwInputWindowCloseRequest(window);
637
+ return 0;
638
+ }
639
+
640
+ case WM_INPUTLANGCHANGE:
641
+ {
642
+ _glfwUpdateKeyNamesWin32();
643
+ break;
644
+ }
645
+
646
+ case WM_CHAR:
647
+ case WM_SYSCHAR:
648
+ {
649
+ if (wParam >= 0xd800 && wParam <= 0xdbff)
650
+ window->win32.highSurrogate = (WCHAR) wParam;
651
+ else
652
+ {
653
+ unsigned int codepoint = 0;
654
+
655
+ if (wParam >= 0xdc00 && wParam <= 0xdfff)
656
+ {
657
+ if (window->win32.highSurrogate)
658
+ {
659
+ codepoint += (window->win32.highSurrogate - 0xd800) << 10;
660
+ codepoint += (WCHAR) wParam - 0xdc00;
661
+ codepoint += 0x10000;
662
+ }
663
+ }
664
+ else
665
+ codepoint = (WCHAR) wParam;
666
+
667
+ window->win32.highSurrogate = 0;
668
+ _glfwInputChar(window, codepoint, getKeyMods(), uMsg != WM_SYSCHAR);
669
+ }
670
+
671
+ if (uMsg == WM_SYSCHAR && window->win32.keymenu)
672
+ break;
673
+
674
+ return 0;
675
+ }
676
+
677
+ case WM_UNICHAR:
678
+ {
679
+ if (wParam == UNICODE_NOCHAR)
680
+ {
681
+ // WM_UNICHAR is not sent by Windows, but is sent by some
682
+ // third-party input method engine
683
+ // Returning TRUE here announces support for this message
684
+ return TRUE;
685
+ }
686
+
687
+ _glfwInputChar(window, (unsigned int) wParam, getKeyMods(), GLFW_TRUE);
688
+ return 0;
689
+ }
690
+
691
+ case WM_KEYDOWN:
692
+ case WM_SYSKEYDOWN:
693
+ case WM_KEYUP:
694
+ case WM_SYSKEYUP:
695
+ {
696
+ int key, scancode;
697
+ const int action = (HIWORD(lParam) & KF_UP) ? GLFW_RELEASE : GLFW_PRESS;
698
+ const int mods = getKeyMods();
699
+
700
+ scancode = (HIWORD(lParam) & (KF_EXTENDED | 0xff));
701
+ if (!scancode)
702
+ {
703
+ // NOTE: Some synthetic key messages have a scancode of zero
704
+ // HACK: Map the virtual key back to a usable scancode
705
+ scancode = MapVirtualKeyW((UINT) wParam, MAPVK_VK_TO_VSC);
706
+ }
707
+
708
+ key = _glfw.win32.keycodes[scancode];
709
+
710
+ // The Ctrl keys require special handling
711
+ if (wParam == VK_CONTROL)
712
+ {
713
+ if (HIWORD(lParam) & KF_EXTENDED)
714
+ {
715
+ // Right side keys have the extended key bit set
716
+ key = GLFW_KEY_RIGHT_CONTROL;
717
+ }
718
+ else
719
+ {
720
+ // NOTE: Alt Gr sends Left Ctrl followed by Right Alt
721
+ // HACK: We only want one event for Alt Gr, so if we detect
722
+ // this sequence we discard this Left Ctrl message now
723
+ // and later report Right Alt normally
724
+ MSG next;
725
+ const DWORD time = GetMessageTime();
726
+
727
+ if (PeekMessageW(&next, NULL, 0, 0, PM_NOREMOVE))
728
+ {
729
+ if (next.message == WM_KEYDOWN ||
730
+ next.message == WM_SYSKEYDOWN ||
731
+ next.message == WM_KEYUP ||
732
+ next.message == WM_SYSKEYUP)
733
+ {
734
+ if (next.wParam == VK_MENU &&
735
+ (HIWORD(next.lParam) & KF_EXTENDED) &&
736
+ next.time == time)
737
+ {
738
+ // Next message is Right Alt down so discard this
739
+ break;
740
+ }
741
+ }
742
+ }
743
+
744
+ // This is a regular Left Ctrl message
745
+ key = GLFW_KEY_LEFT_CONTROL;
746
+ }
747
+ }
748
+ else if (wParam == VK_PROCESSKEY)
749
+ {
750
+ // IME notifies that keys have been filtered by setting the
751
+ // virtual key-code to VK_PROCESSKEY
752
+ break;
753
+ }
754
+
755
+ if (action == GLFW_RELEASE && wParam == VK_SHIFT)
756
+ {
757
+ // HACK: Release both Shift keys on Shift up event, as when both
758
+ // are pressed the first release does not emit any event
759
+ // NOTE: The other half of this is in _glfwPlatformPollEvents
760
+ _glfwInputKey(window, GLFW_KEY_LEFT_SHIFT, scancode, action, mods);
761
+ _glfwInputKey(window, GLFW_KEY_RIGHT_SHIFT, scancode, action, mods);
762
+ }
763
+ else if (wParam == VK_SNAPSHOT)
764
+ {
765
+ // HACK: Key down is not reported for the Print Screen key
766
+ _glfwInputKey(window, key, scancode, GLFW_PRESS, mods);
767
+ _glfwInputKey(window, key, scancode, GLFW_RELEASE, mods);
768
+ }
769
+ else
770
+ _glfwInputKey(window, key, scancode, action, mods);
771
+
772
+ break;
773
+ }
774
+
775
+ case WM_LBUTTONDOWN:
776
+ case WM_RBUTTONDOWN:
777
+ case WM_MBUTTONDOWN:
778
+ case WM_XBUTTONDOWN:
779
+ case WM_LBUTTONUP:
780
+ case WM_RBUTTONUP:
781
+ case WM_MBUTTONUP:
782
+ case WM_XBUTTONUP:
783
+ {
784
+ int i, button, action;
785
+
786
+ if (uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONUP)
787
+ button = GLFW_MOUSE_BUTTON_LEFT;
788
+ else if (uMsg == WM_RBUTTONDOWN || uMsg == WM_RBUTTONUP)
789
+ button = GLFW_MOUSE_BUTTON_RIGHT;
790
+ else if (uMsg == WM_MBUTTONDOWN || uMsg == WM_MBUTTONUP)
791
+ button = GLFW_MOUSE_BUTTON_MIDDLE;
792
+ else if (GET_XBUTTON_WPARAM(wParam) == XBUTTON1)
793
+ button = GLFW_MOUSE_BUTTON_4;
794
+ else
795
+ button = GLFW_MOUSE_BUTTON_5;
796
+
797
+ if (uMsg == WM_LBUTTONDOWN || uMsg == WM_RBUTTONDOWN ||
798
+ uMsg == WM_MBUTTONDOWN || uMsg == WM_XBUTTONDOWN)
799
+ {
800
+ action = GLFW_PRESS;
801
+ }
802
+ else
803
+ action = GLFW_RELEASE;
804
+
805
+ for (i = 0; i <= GLFW_MOUSE_BUTTON_LAST; i++)
806
+ {
807
+ if (window->mouseButtons[i] == GLFW_PRESS)
808
+ break;
809
+ }
810
+
811
+ if (i > GLFW_MOUSE_BUTTON_LAST)
812
+ SetCapture(hWnd);
813
+
814
+ _glfwInputMouseClick(window, button, action, getKeyMods());
815
+
816
+ for (i = 0; i <= GLFW_MOUSE_BUTTON_LAST; i++)
817
+ {
818
+ if (window->mouseButtons[i] == GLFW_PRESS)
819
+ break;
820
+ }
821
+
822
+ if (i > GLFW_MOUSE_BUTTON_LAST)
823
+ ReleaseCapture();
824
+
825
+ if (uMsg == WM_XBUTTONDOWN || uMsg == WM_XBUTTONUP)
826
+ return TRUE;
827
+
828
+ return 0;
829
+ }
830
+
831
+ case WM_MOUSEMOVE:
832
+ {
833
+ const int x = GET_X_LPARAM(lParam);
834
+ const int y = GET_Y_LPARAM(lParam);
835
+
836
+ if (!window->win32.cursorTracked)
837
+ {
838
+ TRACKMOUSEEVENT tme;
839
+ ZeroMemory(&tme, sizeof(tme));
840
+ tme.cbSize = sizeof(tme);
841
+ tme.dwFlags = TME_LEAVE;
842
+ tme.hwndTrack = window->win32.handle;
843
+ TrackMouseEvent(&tme);
844
+
845
+ window->win32.cursorTracked = GLFW_TRUE;
846
+ _glfwInputCursorEnter(window, GLFW_TRUE);
847
+ }
848
+
849
+ if (window->cursorMode == GLFW_CURSOR_DISABLED)
850
+ {
851
+ const int dx = x - window->win32.lastCursorPosX;
852
+ const int dy = y - window->win32.lastCursorPosY;
853
+
854
+ if (_glfw.win32.disabledCursorWindow != window)
855
+ break;
856
+ if (window->rawMouseMotion)
857
+ break;
858
+
859
+ _glfwInputCursorPos(window,
860
+ window->virtualCursorPosX + dx,
861
+ window->virtualCursorPosY + dy);
862
+ }
863
+ else
864
+ _glfwInputCursorPos(window, x, y);
865
+
866
+ window->win32.lastCursorPosX = x;
867
+ window->win32.lastCursorPosY = y;
868
+
869
+ return 0;
870
+ }
871
+
872
+ case WM_INPUT:
873
+ {
874
+ UINT size = 0;
875
+ HRAWINPUT ri = (HRAWINPUT) lParam;
876
+ RAWINPUT* data = NULL;
877
+ int dx, dy;
878
+
879
+ if (_glfw.win32.disabledCursorWindow != window)
880
+ break;
881
+ if (!window->rawMouseMotion)
882
+ break;
883
+
884
+ GetRawInputData(ri, RID_INPUT, NULL, &size, sizeof(RAWINPUTHEADER));
885
+ if (size > (UINT) _glfw.win32.rawInputSize)
886
+ {
887
+ free(_glfw.win32.rawInput);
888
+ _glfw.win32.rawInput = calloc(size, 1);
889
+ _glfw.win32.rawInputSize = size;
890
+ }
891
+
892
+ size = _glfw.win32.rawInputSize;
893
+ if (GetRawInputData(ri, RID_INPUT,
894
+ _glfw.win32.rawInput, &size,
895
+ sizeof(RAWINPUTHEADER)) == (UINT) -1)
896
+ {
897
+ _glfwInputError(GLFW_PLATFORM_ERROR,
898
+ "Win32: Failed to retrieve raw input data");
899
+ break;
900
+ }
901
+
902
+ data = _glfw.win32.rawInput;
903
+ if (data->data.mouse.usFlags & MOUSE_MOVE_ABSOLUTE)
904
+ {
905
+ dx = data->data.mouse.lLastX - window->win32.lastCursorPosX;
906
+ dy = data->data.mouse.lLastY - window->win32.lastCursorPosY;
907
+ }
908
+ else
909
+ {
910
+ dx = data->data.mouse.lLastX;
911
+ dy = data->data.mouse.lLastY;
912
+ }
913
+
914
+ _glfwInputCursorPos(window,
915
+ window->virtualCursorPosX + dx,
916
+ window->virtualCursorPosY + dy);
917
+
918
+ window->win32.lastCursorPosX += dx;
919
+ window->win32.lastCursorPosY += dy;
920
+ break;
921
+ }
922
+
923
+ case WM_MOUSELEAVE:
924
+ {
925
+ window->win32.cursorTracked = GLFW_FALSE;
926
+ _glfwInputCursorEnter(window, GLFW_FALSE);
927
+ return 0;
928
+ }
929
+
930
+ case WM_MOUSEWHEEL:
931
+ {
932
+ _glfwInputScroll(window, 0.0, (SHORT) HIWORD(wParam) / (double) WHEEL_DELTA);
933
+ return 0;
934
+ }
935
+
936
+ case WM_MOUSEHWHEEL:
937
+ {
938
+ // This message is only sent on Windows Vista and later
939
+ // NOTE: The X-axis is inverted for consistency with macOS and X11
940
+ _glfwInputScroll(window, -((SHORT) HIWORD(wParam) / (double) WHEEL_DELTA), 0.0);
941
+ return 0;
942
+ }
943
+
944
+ case WM_ENTERSIZEMOVE:
945
+ case WM_ENTERMENULOOP:
946
+ {
947
+ if (window->win32.frameAction)
948
+ break;
949
+
950
+ // HACK: Enable the cursor while the user is moving or
951
+ // resizing the window or using the window menu
952
+ if (window->cursorMode == GLFW_CURSOR_DISABLED)
953
+ enableCursor(window);
954
+
955
+ break;
956
+ }
957
+
958
+ case WM_EXITSIZEMOVE:
959
+ case WM_EXITMENULOOP:
960
+ {
961
+ if (window->win32.frameAction)
962
+ break;
963
+
964
+ // HACK: Disable the cursor once the user is done moving or
965
+ // resizing the window or using the menu
966
+ if (window->cursorMode == GLFW_CURSOR_DISABLED)
967
+ disableCursor(window);
968
+
969
+ break;
970
+ }
971
+
972
+ case WM_SIZE:
973
+ {
974
+ const int width = LOWORD(lParam);
975
+ const int height = HIWORD(lParam);
976
+ const GLFWbool iconified = wParam == SIZE_MINIMIZED;
977
+ const GLFWbool maximized = wParam == SIZE_MAXIMIZED ||
978
+ (window->win32.maximized &&
979
+ wParam != SIZE_RESTORED);
980
+
981
+ if (_glfw.win32.disabledCursorWindow == window)
982
+ updateClipRect(window);
983
+
984
+ if (window->win32.iconified != iconified)
985
+ _glfwInputWindowIconify(window, iconified);
986
+
987
+ if (window->win32.maximized != maximized)
988
+ _glfwInputWindowMaximize(window, maximized);
989
+
990
+ if (width != window->win32.width || height != window->win32.height)
991
+ {
992
+ window->win32.width = width;
993
+ window->win32.height = height;
994
+
995
+ _glfwInputFramebufferSize(window, width, height);
996
+ _glfwInputWindowSize(window, width, height);
997
+ }
998
+
999
+ if (window->monitor && window->win32.iconified != iconified)
1000
+ {
1001
+ if (iconified)
1002
+ releaseMonitor(window);
1003
+ else
1004
+ {
1005
+ acquireMonitor(window);
1006
+ fitToMonitor(window);
1007
+ }
1008
+ }
1009
+
1010
+ window->win32.iconified = iconified;
1011
+ window->win32.maximized = maximized;
1012
+ return 0;
1013
+ }
1014
+
1015
+ case WM_MOVE:
1016
+ {
1017
+ if (_glfw.win32.disabledCursorWindow == window)
1018
+ updateClipRect(window);
1019
+
1020
+ // NOTE: This cannot use LOWORD/HIWORD recommended by MSDN, as
1021
+ // those macros do not handle negative window positions correctly
1022
+ _glfwInputWindowPos(window,
1023
+ GET_X_LPARAM(lParam),
1024
+ GET_Y_LPARAM(lParam));
1025
+ return 0;
1026
+ }
1027
+
1028
+ case WM_SIZING:
1029
+ {
1030
+ if (window->numer == GLFW_DONT_CARE ||
1031
+ window->denom == GLFW_DONT_CARE)
1032
+ {
1033
+ break;
1034
+ }
1035
+
1036
+ applyAspectRatio(window, (int) wParam, (RECT*) lParam);
1037
+ return TRUE;
1038
+ }
1039
+
1040
+ case WM_GETMINMAXINFO:
1041
+ {
1042
+ int xoff, yoff;
1043
+ UINT dpi = USER_DEFAULT_SCREEN_DPI;
1044
+ MINMAXINFO* mmi = (MINMAXINFO*) lParam;
1045
+
1046
+ if (window->monitor)
1047
+ break;
1048
+
1049
+ if (_glfwIsWindows10AnniversaryUpdateOrGreaterWin32())
1050
+ dpi = GetDpiForWindow(window->win32.handle);
1051
+
1052
+ getFullWindowSize(getWindowStyle(window), getWindowExStyle(window),
1053
+ 0, 0, &xoff, &yoff, dpi);
1054
+
1055
+ if (window->minwidth != GLFW_DONT_CARE &&
1056
+ window->minheight != GLFW_DONT_CARE)
1057
+ {
1058
+ mmi->ptMinTrackSize.x = window->minwidth + xoff;
1059
+ mmi->ptMinTrackSize.y = window->minheight + yoff;
1060
+ }
1061
+
1062
+ if (window->maxwidth != GLFW_DONT_CARE &&
1063
+ window->maxheight != GLFW_DONT_CARE)
1064
+ {
1065
+ mmi->ptMaxTrackSize.x = window->maxwidth + xoff;
1066
+ mmi->ptMaxTrackSize.y = window->maxheight + yoff;
1067
+ }
1068
+
1069
+ if (!window->decorated)
1070
+ {
1071
+ MONITORINFO mi;
1072
+ const HMONITOR mh = MonitorFromWindow(window->win32.handle,
1073
+ MONITOR_DEFAULTTONEAREST);
1074
+
1075
+ ZeroMemory(&mi, sizeof(mi));
1076
+ mi.cbSize = sizeof(mi);
1077
+ GetMonitorInfo(mh, &mi);
1078
+
1079
+ mmi->ptMaxPosition.x = mi.rcWork.left - mi.rcMonitor.left;
1080
+ mmi->ptMaxPosition.y = mi.rcWork.top - mi.rcMonitor.top;
1081
+ mmi->ptMaxSize.x = mi.rcWork.right - mi.rcWork.left;
1082
+ mmi->ptMaxSize.y = mi.rcWork.bottom - mi.rcWork.top;
1083
+ }
1084
+
1085
+ return 0;
1086
+ }
1087
+
1088
+ case WM_PAINT:
1089
+ {
1090
+ _glfwInputWindowDamage(window);
1091
+ break;
1092
+ }
1093
+
1094
+ case WM_ERASEBKGND:
1095
+ {
1096
+ return TRUE;
1097
+ }
1098
+
1099
+ case WM_NCACTIVATE:
1100
+ case WM_NCPAINT:
1101
+ {
1102
+ // Prevent title bar from being drawn after restoring a minimized
1103
+ // undecorated window
1104
+ if (!window->decorated)
1105
+ return TRUE;
1106
+
1107
+ break;
1108
+ }
1109
+
1110
+ case WM_DWMCOMPOSITIONCHANGED:
1111
+ case WM_DWMCOLORIZATIONCOLORCHANGED:
1112
+ {
1113
+ if (window->win32.transparent)
1114
+ updateFramebufferTransparency(window);
1115
+ return 0;
1116
+ }
1117
+
1118
+ case WM_GETDPISCALEDSIZE:
1119
+ {
1120
+ if (window->win32.scaleToMonitor)
1121
+ break;
1122
+
1123
+ // Adjust the window size to keep the content area size constant
1124
+ if (_glfwIsWindows10CreatorsUpdateOrGreaterWin32())
1125
+ {
1126
+ RECT source = {0}, target = {0};
1127
+ SIZE* size = (SIZE*) lParam;
1128
+
1129
+ AdjustWindowRectExForDpi(&source, getWindowStyle(window),
1130
+ FALSE, getWindowExStyle(window),
1131
+ GetDpiForWindow(window->win32.handle));
1132
+ AdjustWindowRectExForDpi(&target, getWindowStyle(window),
1133
+ FALSE, getWindowExStyle(window),
1134
+ LOWORD(wParam));
1135
+
1136
+ size->cx += (target.right - target.left) -
1137
+ (source.right - source.left);
1138
+ size->cy += (target.bottom - target.top) -
1139
+ (source.bottom - source.top);
1140
+ return TRUE;
1141
+ }
1142
+
1143
+ break;
1144
+ }
1145
+
1146
+ case WM_DPICHANGED:
1147
+ {
1148
+ const float xscale = HIWORD(wParam) / (float) USER_DEFAULT_SCREEN_DPI;
1149
+ const float yscale = LOWORD(wParam) / (float) USER_DEFAULT_SCREEN_DPI;
1150
+
1151
+ // Resize windowed mode windows that either permit rescaling or that
1152
+ // need it to compensate for non-client area scaling
1153
+ if (!window->monitor &&
1154
+ (window->win32.scaleToMonitor ||
1155
+ _glfwIsWindows10CreatorsUpdateOrGreaterWin32()))
1156
+ {
1157
+ RECT* suggested = (RECT*) lParam;
1158
+ SetWindowPos(window->win32.handle, HWND_TOP,
1159
+ suggested->left,
1160
+ suggested->top,
1161
+ suggested->right - suggested->left,
1162
+ suggested->bottom - suggested->top,
1163
+ SWP_NOACTIVATE | SWP_NOZORDER);
1164
+ }
1165
+
1166
+ _glfwInputWindowContentScale(window, xscale, yscale);
1167
+ break;
1168
+ }
1169
+
1170
+ case WM_SETCURSOR:
1171
+ {
1172
+ if (LOWORD(lParam) == HTCLIENT)
1173
+ {
1174
+ updateCursorImage(window);
1175
+ return TRUE;
1176
+ }
1177
+
1178
+ break;
1179
+ }
1180
+
1181
+ case WM_DROPFILES:
1182
+ {
1183
+ HDROP drop = (HDROP) wParam;
1184
+ POINT pt;
1185
+ int i;
1186
+
1187
+ const int count = DragQueryFileW(drop, 0xffffffff, NULL, 0);
1188
+ char** paths = calloc(count, sizeof(char*));
1189
+
1190
+ // Move the mouse to the position of the drop
1191
+ DragQueryPoint(drop, &pt);
1192
+ _glfwInputCursorPos(window, pt.x, pt.y);
1193
+
1194
+ for (i = 0; i < count; i++)
1195
+ {
1196
+ const UINT length = DragQueryFileW(drop, i, NULL, 0);
1197
+ WCHAR* buffer = calloc((size_t) length + 1, sizeof(WCHAR));
1198
+
1199
+ DragQueryFileW(drop, i, buffer, length + 1);
1200
+ paths[i] = _glfwCreateUTF8FromWideStringWin32(buffer);
1201
+
1202
+ free(buffer);
1203
+ }
1204
+
1205
+ _glfwInputDrop(window, count, (const char**) paths);
1206
+
1207
+ for (i = 0; i < count; i++)
1208
+ free(paths[i]);
1209
+ free(paths);
1210
+
1211
+ DragFinish(drop);
1212
+ return 0;
1213
+ }
1214
+ }
1215
+
1216
+ return DefWindowProcW(hWnd, uMsg, wParam, lParam);
1217
+ }
1218
+
1219
+ // Creates the GLFW window
1220
+ //
1221
+ static int createNativeWindow(_GLFWwindow* window,
1222
+ const _GLFWwndconfig* wndconfig,
1223
+ const _GLFWfbconfig* fbconfig)
1224
+ {
1225
+ int xpos, ypos, fullWidth, fullHeight;
1226
+ WCHAR* wideTitle;
1227
+ DWORD style = getWindowStyle(window);
1228
+ DWORD exStyle = getWindowExStyle(window);
1229
+
1230
+ if (window->monitor)
1231
+ {
1232
+ GLFWvidmode mode;
1233
+
1234
+ // NOTE: This window placement is temporary and approximate, as the
1235
+ // correct position and size cannot be known until the monitor
1236
+ // video mode has been picked in _glfwSetVideoModeWin32
1237
+ _glfwPlatformGetMonitorPos(window->monitor, &xpos, &ypos);
1238
+ _glfwPlatformGetVideoMode(window->monitor, &mode);
1239
+ fullWidth = mode.width;
1240
+ fullHeight = mode.height;
1241
+ }
1242
+ else
1243
+ {
1244
+ xpos = CW_USEDEFAULT;
1245
+ ypos = CW_USEDEFAULT;
1246
+
1247
+ window->win32.maximized = wndconfig->maximized;
1248
+ if (wndconfig->maximized)
1249
+ style |= WS_MAXIMIZE;
1250
+
1251
+ getFullWindowSize(style, exStyle,
1252
+ wndconfig->width, wndconfig->height,
1253
+ &fullWidth, &fullHeight,
1254
+ USER_DEFAULT_SCREEN_DPI);
1255
+ }
1256
+
1257
+ wideTitle = _glfwCreateWideStringFromUTF8Win32(wndconfig->title);
1258
+ if (!wideTitle)
1259
+ return GLFW_FALSE;
1260
+
1261
+ window->win32.handle = CreateWindowExW(exStyle,
1262
+ _GLFW_WNDCLASSNAME,
1263
+ wideTitle,
1264
+ style,
1265
+ xpos, ypos,
1266
+ fullWidth, fullHeight,
1267
+ NULL, // No parent window
1268
+ NULL, // No window menu
1269
+ GetModuleHandleW(NULL),
1270
+ (LPVOID) wndconfig);
1271
+
1272
+ free(wideTitle);
1273
+
1274
+ if (!window->win32.handle)
1275
+ {
1276
+ _glfwInputErrorWin32(GLFW_PLATFORM_ERROR,
1277
+ "Win32: Failed to create window");
1278
+ return GLFW_FALSE;
1279
+ }
1280
+
1281
+ SetPropW(window->win32.handle, L"GLFW", window);
1282
+
1283
+ if (IsWindows7OrGreater())
1284
+ {
1285
+ ChangeWindowMessageFilterEx(window->win32.handle,
1286
+ WM_DROPFILES, MSGFLT_ALLOW, NULL);
1287
+ ChangeWindowMessageFilterEx(window->win32.handle,
1288
+ WM_COPYDATA, MSGFLT_ALLOW, NULL);
1289
+ ChangeWindowMessageFilterEx(window->win32.handle,
1290
+ WM_COPYGLOBALDATA, MSGFLT_ALLOW, NULL);
1291
+ }
1292
+
1293
+ window->win32.scaleToMonitor = wndconfig->scaleToMonitor;
1294
+ window->win32.keymenu = wndconfig->win32.keymenu;
1295
+
1296
+ // Adjust window rect to account for DPI scaling of the window frame and
1297
+ // (if enabled) DPI scaling of the content area
1298
+ // This cannot be done until we know what monitor the window was placed on
1299
+ if (!window->monitor)
1300
+ {
1301
+ RECT rect = { 0, 0, wndconfig->width, wndconfig->height };
1302
+ WINDOWPLACEMENT wp = { sizeof(wp) };
1303
+
1304
+ if (wndconfig->scaleToMonitor)
1305
+ {
1306
+ float xscale, yscale;
1307
+ _glfwPlatformGetWindowContentScale(window, &xscale, &yscale);
1308
+ rect.right = (int) (rect.right * xscale);
1309
+ rect.bottom = (int) (rect.bottom * yscale);
1310
+ }
1311
+
1312
+ ClientToScreen(window->win32.handle, (POINT*) &rect.left);
1313
+ ClientToScreen(window->win32.handle, (POINT*) &rect.right);
1314
+
1315
+ if (_glfwIsWindows10AnniversaryUpdateOrGreaterWin32())
1316
+ {
1317
+ AdjustWindowRectExForDpi(&rect, style, FALSE, exStyle,
1318
+ GetDpiForWindow(window->win32.handle));
1319
+ }
1320
+ else
1321
+ AdjustWindowRectEx(&rect, style, FALSE, exStyle);
1322
+
1323
+ // Only update the restored window rect as the window may be maximized
1324
+ GetWindowPlacement(window->win32.handle, &wp);
1325
+ wp.rcNormalPosition = rect;
1326
+ wp.showCmd = SW_HIDE;
1327
+ SetWindowPlacement(window->win32.handle, &wp);
1328
+ }
1329
+
1330
+ DragAcceptFiles(window->win32.handle, TRUE);
1331
+
1332
+ if (fbconfig->transparent)
1333
+ {
1334
+ updateFramebufferTransparency(window);
1335
+ window->win32.transparent = GLFW_TRUE;
1336
+ }
1337
+
1338
+ _glfwPlatformGetWindowSize(window, &window->win32.width, &window->win32.height);
1339
+
1340
+ return GLFW_TRUE;
1341
+ }
1342
+
1343
+
1344
+ //////////////////////////////////////////////////////////////////////////
1345
+ ////// GLFW internal API //////
1346
+ //////////////////////////////////////////////////////////////////////////
1347
+
1348
+ // Registers the GLFW window class
1349
+ //
1350
+ GLFWbool _glfwRegisterWindowClassWin32(void)
1351
+ {
1352
+ WNDCLASSEXW wc;
1353
+
1354
+ ZeroMemory(&wc, sizeof(wc));
1355
+ wc.cbSize = sizeof(wc);
1356
+ wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
1357
+ wc.lpfnWndProc = (WNDPROC) windowProc;
1358
+ wc.hInstance = GetModuleHandleW(NULL);
1359
+ wc.hCursor = LoadCursorW(NULL, IDC_ARROW);
1360
+ wc.lpszClassName = _GLFW_WNDCLASSNAME;
1361
+
1362
+ // Load user-provided icon if available
1363
+ wc.hIcon = LoadImageW(GetModuleHandleW(NULL),
1364
+ L"GLFW_ICON", IMAGE_ICON,
1365
+ 0, 0, LR_DEFAULTSIZE | LR_SHARED);
1366
+ if (!wc.hIcon)
1367
+ {
1368
+ // No user-provided icon found, load default icon
1369
+ wc.hIcon = LoadImageW(NULL,
1370
+ IDI_APPLICATION, IMAGE_ICON,
1371
+ 0, 0, LR_DEFAULTSIZE | LR_SHARED);
1372
+ }
1373
+
1374
+ if (!RegisterClassExW(&wc))
1375
+ {
1376
+ _glfwInputErrorWin32(GLFW_PLATFORM_ERROR,
1377
+ "Win32: Failed to register window class");
1378
+ return GLFW_FALSE;
1379
+ }
1380
+
1381
+ return GLFW_TRUE;
1382
+ }
1383
+
1384
+ // Unregisters the GLFW window class
1385
+ //
1386
+ void _glfwUnregisterWindowClassWin32(void)
1387
+ {
1388
+ UnregisterClassW(_GLFW_WNDCLASSNAME, GetModuleHandleW(NULL));
1389
+ }
1390
+
1391
+
1392
+ //////////////////////////////////////////////////////////////////////////
1393
+ ////// GLFW platform API //////
1394
+ //////////////////////////////////////////////////////////////////////////
1395
+
1396
+ int _glfwPlatformCreateWindow(_GLFWwindow* window,
1397
+ const _GLFWwndconfig* wndconfig,
1398
+ const _GLFWctxconfig* ctxconfig,
1399
+ const _GLFWfbconfig* fbconfig)
1400
+ {
1401
+ if (!createNativeWindow(window, wndconfig, fbconfig))
1402
+ return GLFW_FALSE;
1403
+
1404
+ if (ctxconfig->client != GLFW_NO_API)
1405
+ {
1406
+ if (ctxconfig->source == GLFW_NATIVE_CONTEXT_API)
1407
+ {
1408
+ if (!_glfwInitWGL())
1409
+ return GLFW_FALSE;
1410
+ if (!_glfwCreateContextWGL(window, ctxconfig, fbconfig))
1411
+ return GLFW_FALSE;
1412
+ }
1413
+ else if (ctxconfig->source == GLFW_EGL_CONTEXT_API)
1414
+ {
1415
+ if (!_glfwInitEGL())
1416
+ return GLFW_FALSE;
1417
+ if (!_glfwCreateContextEGL(window, ctxconfig, fbconfig))
1418
+ return GLFW_FALSE;
1419
+ }
1420
+ else if (ctxconfig->source == GLFW_OSMESA_CONTEXT_API)
1421
+ {
1422
+ if (!_glfwInitOSMesa())
1423
+ return GLFW_FALSE;
1424
+ if (!_glfwCreateContextOSMesa(window, ctxconfig, fbconfig))
1425
+ return GLFW_FALSE;
1426
+ }
1427
+ }
1428
+
1429
+ if (window->monitor)
1430
+ {
1431
+ _glfwPlatformShowWindow(window);
1432
+ _glfwPlatformFocusWindow(window);
1433
+ acquireMonitor(window);
1434
+ fitToMonitor(window);
1435
+ }
1436
+
1437
+ return GLFW_TRUE;
1438
+ }
1439
+
1440
+ void _glfwPlatformDestroyWindow(_GLFWwindow* window)
1441
+ {
1442
+ if (window->monitor)
1443
+ releaseMonitor(window);
1444
+
1445
+ if (window->context.destroy)
1446
+ window->context.destroy(window);
1447
+
1448
+ if (_glfw.win32.disabledCursorWindow == window)
1449
+ _glfw.win32.disabledCursorWindow = NULL;
1450
+
1451
+ if (window->win32.handle)
1452
+ {
1453
+ RemovePropW(window->win32.handle, L"GLFW");
1454
+ DestroyWindow(window->win32.handle);
1455
+ window->win32.handle = NULL;
1456
+ }
1457
+
1458
+ if (window->win32.bigIcon)
1459
+ DestroyIcon(window->win32.bigIcon);
1460
+
1461
+ if (window->win32.smallIcon)
1462
+ DestroyIcon(window->win32.smallIcon);
1463
+ }
1464
+
1465
+ void _glfwPlatformSetWindowTitle(_GLFWwindow* window, const char* title)
1466
+ {
1467
+ WCHAR* wideTitle = _glfwCreateWideStringFromUTF8Win32(title);
1468
+ if (!wideTitle)
1469
+ return;
1470
+
1471
+ SetWindowTextW(window->win32.handle, wideTitle);
1472
+ free(wideTitle);
1473
+ }
1474
+
1475
+ void _glfwPlatformSetWindowIcon(_GLFWwindow* window,
1476
+ int count, const GLFWimage* images)
1477
+ {
1478
+ HICON bigIcon = NULL, smallIcon = NULL;
1479
+
1480
+ if (count)
1481
+ {
1482
+ const GLFWimage* bigImage = chooseImage(count, images,
1483
+ GetSystemMetrics(SM_CXICON),
1484
+ GetSystemMetrics(SM_CYICON));
1485
+ const GLFWimage* smallImage = chooseImage(count, images,
1486
+ GetSystemMetrics(SM_CXSMICON),
1487
+ GetSystemMetrics(SM_CYSMICON));
1488
+
1489
+ bigIcon = createIcon(bigImage, 0, 0, GLFW_TRUE);
1490
+ smallIcon = createIcon(smallImage, 0, 0, GLFW_TRUE);
1491
+ }
1492
+ else
1493
+ {
1494
+ bigIcon = (HICON) GetClassLongPtrW(window->win32.handle, GCLP_HICON);
1495
+ smallIcon = (HICON) GetClassLongPtrW(window->win32.handle, GCLP_HICONSM);
1496
+ }
1497
+
1498
+ SendMessage(window->win32.handle, WM_SETICON, ICON_BIG, (LPARAM) bigIcon);
1499
+ SendMessage(window->win32.handle, WM_SETICON, ICON_SMALL, (LPARAM) smallIcon);
1500
+
1501
+ if (window->win32.bigIcon)
1502
+ DestroyIcon(window->win32.bigIcon);
1503
+
1504
+ if (window->win32.smallIcon)
1505
+ DestroyIcon(window->win32.smallIcon);
1506
+
1507
+ if (count)
1508
+ {
1509
+ window->win32.bigIcon = bigIcon;
1510
+ window->win32.smallIcon = smallIcon;
1511
+ }
1512
+ }
1513
+
1514
+ void _glfwPlatformGetWindowPos(_GLFWwindow* window, int* xpos, int* ypos)
1515
+ {
1516
+ POINT pos = { 0, 0 };
1517
+ ClientToScreen(window->win32.handle, &pos);
1518
+
1519
+ if (xpos)
1520
+ *xpos = pos.x;
1521
+ if (ypos)
1522
+ *ypos = pos.y;
1523
+ }
1524
+
1525
+ void _glfwPlatformSetWindowPos(_GLFWwindow* window, int xpos, int ypos)
1526
+ {
1527
+ RECT rect = { xpos, ypos, xpos, ypos };
1528
+
1529
+ if (_glfwIsWindows10AnniversaryUpdateOrGreaterWin32())
1530
+ {
1531
+ AdjustWindowRectExForDpi(&rect, getWindowStyle(window),
1532
+ FALSE, getWindowExStyle(window),
1533
+ GetDpiForWindow(window->win32.handle));
1534
+ }
1535
+ else
1536
+ {
1537
+ AdjustWindowRectEx(&rect, getWindowStyle(window),
1538
+ FALSE, getWindowExStyle(window));
1539
+ }
1540
+
1541
+ SetWindowPos(window->win32.handle, NULL, rect.left, rect.top, 0, 0,
1542
+ SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSIZE);
1543
+ }
1544
+
1545
+ void _glfwPlatformGetWindowSize(_GLFWwindow* window, int* width, int* height)
1546
+ {
1547
+ RECT area;
1548
+ GetClientRect(window->win32.handle, &area);
1549
+
1550
+ if (width)
1551
+ *width = area.right;
1552
+ if (height)
1553
+ *height = area.bottom;
1554
+ }
1555
+
1556
+ void _glfwPlatformSetWindowSize(_GLFWwindow* window, int width, int height)
1557
+ {
1558
+ if (window->monitor)
1559
+ {
1560
+ if (window->monitor->window == window)
1561
+ {
1562
+ acquireMonitor(window);
1563
+ fitToMonitor(window);
1564
+ }
1565
+ }
1566
+ else
1567
+ {
1568
+ RECT rect = { 0, 0, width, height };
1569
+
1570
+ if (_glfwIsWindows10AnniversaryUpdateOrGreaterWin32())
1571
+ {
1572
+ AdjustWindowRectExForDpi(&rect, getWindowStyle(window),
1573
+ FALSE, getWindowExStyle(window),
1574
+ GetDpiForWindow(window->win32.handle));
1575
+ }
1576
+ else
1577
+ {
1578
+ AdjustWindowRectEx(&rect, getWindowStyle(window),
1579
+ FALSE, getWindowExStyle(window));
1580
+ }
1581
+
1582
+ SetWindowPos(window->win32.handle, HWND_TOP,
1583
+ 0, 0, rect.right - rect.left, rect.bottom - rect.top,
1584
+ SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOMOVE | SWP_NOZORDER);
1585
+ }
1586
+ }
1587
+
1588
+ void _glfwPlatformSetWindowSizeLimits(_GLFWwindow* window,
1589
+ int minwidth, int minheight,
1590
+ int maxwidth, int maxheight)
1591
+ {
1592
+ RECT area;
1593
+
1594
+ if ((minwidth == GLFW_DONT_CARE || minheight == GLFW_DONT_CARE) &&
1595
+ (maxwidth == GLFW_DONT_CARE || maxheight == GLFW_DONT_CARE))
1596
+ {
1597
+ return;
1598
+ }
1599
+
1600
+ GetWindowRect(window->win32.handle, &area);
1601
+ MoveWindow(window->win32.handle,
1602
+ area.left, area.top,
1603
+ area.right - area.left,
1604
+ area.bottom - area.top, TRUE);
1605
+ }
1606
+
1607
+ void _glfwPlatformSetWindowAspectRatio(_GLFWwindow* window, int numer, int denom)
1608
+ {
1609
+ RECT area;
1610
+
1611
+ if (numer == GLFW_DONT_CARE || denom == GLFW_DONT_CARE)
1612
+ return;
1613
+
1614
+ GetWindowRect(window->win32.handle, &area);
1615
+ applyAspectRatio(window, WMSZ_BOTTOMRIGHT, &area);
1616
+ MoveWindow(window->win32.handle,
1617
+ area.left, area.top,
1618
+ area.right - area.left,
1619
+ area.bottom - area.top, TRUE);
1620
+ }
1621
+
1622
+ void _glfwPlatformGetFramebufferSize(_GLFWwindow* window, int* width, int* height)
1623
+ {
1624
+ _glfwPlatformGetWindowSize(window, width, height);
1625
+ }
1626
+
1627
+ void _glfwPlatformGetWindowFrameSize(_GLFWwindow* window,
1628
+ int* left, int* top,
1629
+ int* right, int* bottom)
1630
+ {
1631
+ RECT rect;
1632
+ int width, height;
1633
+
1634
+ _glfwPlatformGetWindowSize(window, &width, &height);
1635
+ SetRect(&rect, 0, 0, width, height);
1636
+
1637
+ if (_glfwIsWindows10AnniversaryUpdateOrGreaterWin32())
1638
+ {
1639
+ AdjustWindowRectExForDpi(&rect, getWindowStyle(window),
1640
+ FALSE, getWindowExStyle(window),
1641
+ GetDpiForWindow(window->win32.handle));
1642
+ }
1643
+ else
1644
+ {
1645
+ AdjustWindowRectEx(&rect, getWindowStyle(window),
1646
+ FALSE, getWindowExStyle(window));
1647
+ }
1648
+
1649
+ if (left)
1650
+ *left = -rect.left;
1651
+ if (top)
1652
+ *top = -rect.top;
1653
+ if (right)
1654
+ *right = rect.right - width;
1655
+ if (bottom)
1656
+ *bottom = rect.bottom - height;
1657
+ }
1658
+
1659
+ void _glfwPlatformGetWindowContentScale(_GLFWwindow* window,
1660
+ float* xscale, float* yscale)
1661
+ {
1662
+ const HANDLE handle = MonitorFromWindow(window->win32.handle,
1663
+ MONITOR_DEFAULTTONEAREST);
1664
+ _glfwGetMonitorContentScaleWin32(handle, xscale, yscale);
1665
+ }
1666
+
1667
+ void _glfwPlatformIconifyWindow(_GLFWwindow* window)
1668
+ {
1669
+ ShowWindow(window->win32.handle, SW_MINIMIZE);
1670
+ }
1671
+
1672
+ void _glfwPlatformRestoreWindow(_GLFWwindow* window)
1673
+ {
1674
+ ShowWindow(window->win32.handle, SW_RESTORE);
1675
+ }
1676
+
1677
+ void _glfwPlatformMaximizeWindow(_GLFWwindow* window)
1678
+ {
1679
+ ShowWindow(window->win32.handle, SW_MAXIMIZE);
1680
+ }
1681
+
1682
+ void _glfwPlatformShowWindow(_GLFWwindow* window)
1683
+ {
1684
+ ShowWindow(window->win32.handle, SW_SHOWNA);
1685
+ }
1686
+
1687
+ void _glfwPlatformHideWindow(_GLFWwindow* window)
1688
+ {
1689
+ ShowWindow(window->win32.handle, SW_HIDE);
1690
+ }
1691
+
1692
+ void _glfwPlatformRequestWindowAttention(_GLFWwindow* window)
1693
+ {
1694
+ FlashWindow(window->win32.handle, TRUE);
1695
+ }
1696
+
1697
+ void _glfwPlatformFocusWindow(_GLFWwindow* window)
1698
+ {
1699
+ BringWindowToTop(window->win32.handle);
1700
+ SetForegroundWindow(window->win32.handle);
1701
+ SetFocus(window->win32.handle);
1702
+ }
1703
+
1704
+ void _glfwPlatformSetWindowMonitor(_GLFWwindow* window,
1705
+ _GLFWmonitor* monitor,
1706
+ int xpos, int ypos,
1707
+ int width, int height,
1708
+ int refreshRate)
1709
+ {
1710
+ if (window->monitor == monitor)
1711
+ {
1712
+ if (monitor)
1713
+ {
1714
+ if (monitor->window == window)
1715
+ {
1716
+ acquireMonitor(window);
1717
+ fitToMonitor(window);
1718
+ }
1719
+ }
1720
+ else
1721
+ {
1722
+ RECT rect = { xpos, ypos, xpos + width, ypos + height };
1723
+
1724
+ if (_glfwIsWindows10AnniversaryUpdateOrGreaterWin32())
1725
+ {
1726
+ AdjustWindowRectExForDpi(&rect, getWindowStyle(window),
1727
+ FALSE, getWindowExStyle(window),
1728
+ GetDpiForWindow(window->win32.handle));
1729
+ }
1730
+ else
1731
+ {
1732
+ AdjustWindowRectEx(&rect, getWindowStyle(window),
1733
+ FALSE, getWindowExStyle(window));
1734
+ }
1735
+
1736
+ SetWindowPos(window->win32.handle, HWND_TOP,
1737
+ rect.left, rect.top,
1738
+ rect.right - rect.left, rect.bottom - rect.top,
1739
+ SWP_NOCOPYBITS | SWP_NOACTIVATE | SWP_NOZORDER);
1740
+ }
1741
+
1742
+ return;
1743
+ }
1744
+
1745
+ if (window->monitor)
1746
+ releaseMonitor(window);
1747
+
1748
+ _glfwInputWindowMonitor(window, monitor);
1749
+
1750
+ if (window->monitor)
1751
+ {
1752
+ MONITORINFO mi = { sizeof(mi) };
1753
+ UINT flags = SWP_SHOWWINDOW | SWP_NOACTIVATE | SWP_NOCOPYBITS;
1754
+
1755
+ if (window->decorated)
1756
+ {
1757
+ DWORD style = GetWindowLongW(window->win32.handle, GWL_STYLE);
1758
+ style &= ~WS_OVERLAPPEDWINDOW;
1759
+ style |= getWindowStyle(window);
1760
+ SetWindowLongW(window->win32.handle, GWL_STYLE, style);
1761
+ flags |= SWP_FRAMECHANGED;
1762
+ }
1763
+
1764
+ acquireMonitor(window);
1765
+
1766
+ GetMonitorInfo(window->monitor->win32.handle, &mi);
1767
+ SetWindowPos(window->win32.handle, HWND_TOPMOST,
1768
+ mi.rcMonitor.left,
1769
+ mi.rcMonitor.top,
1770
+ mi.rcMonitor.right - mi.rcMonitor.left,
1771
+ mi.rcMonitor.bottom - mi.rcMonitor.top,
1772
+ flags);
1773
+ }
1774
+ else
1775
+ {
1776
+ HWND after;
1777
+ RECT rect = { xpos, ypos, xpos + width, ypos + height };
1778
+ DWORD style = GetWindowLongW(window->win32.handle, GWL_STYLE);
1779
+ UINT flags = SWP_NOACTIVATE | SWP_NOCOPYBITS;
1780
+
1781
+ if (window->decorated)
1782
+ {
1783
+ style &= ~WS_POPUP;
1784
+ style |= getWindowStyle(window);
1785
+ SetWindowLongW(window->win32.handle, GWL_STYLE, style);
1786
+
1787
+ flags |= SWP_FRAMECHANGED;
1788
+ }
1789
+
1790
+ if (window->floating)
1791
+ after = HWND_TOPMOST;
1792
+ else
1793
+ after = HWND_NOTOPMOST;
1794
+
1795
+ if (_glfwIsWindows10AnniversaryUpdateOrGreaterWin32())
1796
+ {
1797
+ AdjustWindowRectExForDpi(&rect, getWindowStyle(window),
1798
+ FALSE, getWindowExStyle(window),
1799
+ GetDpiForWindow(window->win32.handle));
1800
+ }
1801
+ else
1802
+ {
1803
+ AdjustWindowRectEx(&rect, getWindowStyle(window),
1804
+ FALSE, getWindowExStyle(window));
1805
+ }
1806
+
1807
+ SetWindowPos(window->win32.handle, after,
1808
+ rect.left, rect.top,
1809
+ rect.right - rect.left, rect.bottom - rect.top,
1810
+ flags);
1811
+ }
1812
+ }
1813
+
1814
+ int _glfwPlatformWindowFocused(_GLFWwindow* window)
1815
+ {
1816
+ return window->win32.handle == GetActiveWindow();
1817
+ }
1818
+
1819
+ int _glfwPlatformWindowIconified(_GLFWwindow* window)
1820
+ {
1821
+ return IsIconic(window->win32.handle);
1822
+ }
1823
+
1824
+ int _glfwPlatformWindowVisible(_GLFWwindow* window)
1825
+ {
1826
+ return IsWindowVisible(window->win32.handle);
1827
+ }
1828
+
1829
+ int _glfwPlatformWindowMaximized(_GLFWwindow* window)
1830
+ {
1831
+ return IsZoomed(window->win32.handle);
1832
+ }
1833
+
1834
+ int _glfwPlatformWindowHovered(_GLFWwindow* window)
1835
+ {
1836
+ return cursorInContentArea(window);
1837
+ }
1838
+
1839
+ int _glfwPlatformFramebufferTransparent(_GLFWwindow* window)
1840
+ {
1841
+ BOOL composition, opaque;
1842
+ DWORD color;
1843
+
1844
+ if (!window->win32.transparent)
1845
+ return GLFW_FALSE;
1846
+
1847
+ if (!IsWindowsVistaOrGreater())
1848
+ return GLFW_FALSE;
1849
+
1850
+ if (FAILED(DwmIsCompositionEnabled(&composition)) || !composition)
1851
+ return GLFW_FALSE;
1852
+
1853
+ if (!IsWindows8OrGreater())
1854
+ {
1855
+ // HACK: Disable framebuffer transparency on Windows 7 when the
1856
+ // colorization color is opaque, because otherwise the window
1857
+ // contents is blended additively with the previous frame instead
1858
+ // of replacing it
1859
+ if (FAILED(DwmGetColorizationColor(&color, &opaque)) || opaque)
1860
+ return GLFW_FALSE;
1861
+ }
1862
+
1863
+ return GLFW_TRUE;
1864
+ }
1865
+
1866
+ void _glfwPlatformSetWindowResizable(_GLFWwindow* window, GLFWbool enabled)
1867
+ {
1868
+ updateWindowStyles(window);
1869
+ }
1870
+
1871
+ void _glfwPlatformSetWindowDecorated(_GLFWwindow* window, GLFWbool enabled)
1872
+ {
1873
+ updateWindowStyles(window);
1874
+ }
1875
+
1876
+ void _glfwPlatformSetWindowFloating(_GLFWwindow* window, GLFWbool enabled)
1877
+ {
1878
+ const HWND after = enabled ? HWND_TOPMOST : HWND_NOTOPMOST;
1879
+ SetWindowPos(window->win32.handle, after, 0, 0, 0, 0,
1880
+ SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
1881
+ }
1882
+
1883
+ void _glfwPlatformSetWindowMousePassthrough(_GLFWwindow* window, GLFWbool enabled)
1884
+ {
1885
+ COLORREF key = 0;
1886
+ BYTE alpha = 0;
1887
+ DWORD flags = 0;
1888
+ DWORD exStyle = GetWindowLongW(window->win32.handle, GWL_EXSTYLE);
1889
+
1890
+ if (exStyle & WS_EX_LAYERED)
1891
+ GetLayeredWindowAttributes(window->win32.handle, &key, &alpha, &flags);
1892
+
1893
+ if (enabled)
1894
+ exStyle |= (WS_EX_TRANSPARENT | WS_EX_LAYERED);
1895
+ else
1896
+ {
1897
+ exStyle &= ~WS_EX_TRANSPARENT;
1898
+ // NOTE: Window opacity also needs the layered window style so do not
1899
+ // remove it if the window is alpha blended
1900
+ if (exStyle & WS_EX_LAYERED)
1901
+ {
1902
+ if (!(flags & LWA_ALPHA))
1903
+ exStyle &= ~WS_EX_LAYERED;
1904
+ }
1905
+ }
1906
+
1907
+ SetWindowLongW(window->win32.handle, GWL_EXSTYLE, exStyle);
1908
+
1909
+ if (enabled)
1910
+ SetLayeredWindowAttributes(window->win32.handle, key, alpha, flags);
1911
+ }
1912
+
1913
+ float _glfwPlatformGetWindowOpacity(_GLFWwindow* window)
1914
+ {
1915
+ BYTE alpha;
1916
+ DWORD flags;
1917
+
1918
+ if ((GetWindowLongW(window->win32.handle, GWL_EXSTYLE) & WS_EX_LAYERED) &&
1919
+ GetLayeredWindowAttributes(window->win32.handle, NULL, &alpha, &flags))
1920
+ {
1921
+ if (flags & LWA_ALPHA)
1922
+ return alpha / 255.f;
1923
+ }
1924
+
1925
+ return 1.f;
1926
+ }
1927
+
1928
+ void _glfwPlatformSetWindowOpacity(_GLFWwindow* window, float opacity)
1929
+ {
1930
+ LONG exStyle = GetWindowLongW(window->win32.handle, GWL_EXSTYLE);
1931
+ if (opacity < 1.f || (exStyle & WS_EX_TRANSPARENT))
1932
+ {
1933
+ const BYTE alpha = (BYTE) (255 * opacity);
1934
+ exStyle |= WS_EX_LAYERED;
1935
+ SetWindowLongW(window->win32.handle, GWL_EXSTYLE, exStyle);
1936
+ SetLayeredWindowAttributes(window->win32.handle, 0, alpha, LWA_ALPHA);
1937
+ }
1938
+ else if (exStyle & WS_EX_TRANSPARENT)
1939
+ {
1940
+ SetLayeredWindowAttributes(window->win32.handle, 0, 0, 0);
1941
+ }
1942
+ else
1943
+ {
1944
+ exStyle &= ~WS_EX_LAYERED;
1945
+ SetWindowLongW(window->win32.handle, GWL_EXSTYLE, exStyle);
1946
+ }
1947
+ }
1948
+
1949
+ void _glfwPlatformSetRawMouseMotion(_GLFWwindow *window, GLFWbool enabled)
1950
+ {
1951
+ if (_glfw.win32.disabledCursorWindow != window)
1952
+ return;
1953
+
1954
+ if (enabled)
1955
+ enableRawMouseMotion(window);
1956
+ else
1957
+ disableRawMouseMotion(window);
1958
+ }
1959
+
1960
+ GLFWbool _glfwPlatformRawMouseMotionSupported(void)
1961
+ {
1962
+ return GLFW_TRUE;
1963
+ }
1964
+
1965
+ void _glfwPlatformPollEvents(void)
1966
+ {
1967
+ MSG msg;
1968
+ HWND handle;
1969
+ _GLFWwindow* window;
1970
+
1971
+ while (PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE))
1972
+ {
1973
+ if (msg.message == WM_QUIT)
1974
+ {
1975
+ // NOTE: While GLFW does not itself post WM_QUIT, other processes
1976
+ // may post it to this one, for example Task Manager
1977
+ // HACK: Treat WM_QUIT as a close on all windows
1978
+
1979
+ window = _glfw.windowListHead;
1980
+ while (window)
1981
+ {
1982
+ _glfwInputWindowCloseRequest(window);
1983
+ window = window->next;
1984
+ }
1985
+ }
1986
+ else
1987
+ {
1988
+ TranslateMessage(&msg);
1989
+ DispatchMessageW(&msg);
1990
+ }
1991
+ }
1992
+
1993
+ // HACK: Release modifier keys that the system did not emit KEYUP for
1994
+ // NOTE: Shift keys on Windows tend to "stick" when both are pressed as
1995
+ // no key up message is generated by the first key release
1996
+ // NOTE: Windows key is not reported as released by the Win+V hotkey
1997
+ // Other Win hotkeys are handled implicitly by _glfwInputWindowFocus
1998
+ // because they change the input focus
1999
+ // NOTE: The other half of this is in the WM_*KEY* handler in windowProc
2000
+ handle = GetActiveWindow();
2001
+ if (handle)
2002
+ {
2003
+ window = GetPropW(handle, L"GLFW");
2004
+ if (window)
2005
+ {
2006
+ int i;
2007
+ const int keys[4][2] =
2008
+ {
2009
+ { VK_LSHIFT, GLFW_KEY_LEFT_SHIFT },
2010
+ { VK_RSHIFT, GLFW_KEY_RIGHT_SHIFT },
2011
+ { VK_LWIN, GLFW_KEY_LEFT_SUPER },
2012
+ { VK_RWIN, GLFW_KEY_RIGHT_SUPER }
2013
+ };
2014
+
2015
+ for (i = 0; i < 4; i++)
2016
+ {
2017
+ const int vk = keys[i][0];
2018
+ const int key = keys[i][1];
2019
+ const int scancode = _glfw.win32.scancodes[key];
2020
+
2021
+ if ((GetKeyState(vk) & 0x8000))
2022
+ continue;
2023
+ if (window->keys[key] != GLFW_PRESS)
2024
+ continue;
2025
+
2026
+ _glfwInputKey(window, key, scancode, GLFW_RELEASE, getKeyMods());
2027
+ }
2028
+ }
2029
+ }
2030
+
2031
+ window = _glfw.win32.disabledCursorWindow;
2032
+ if (window)
2033
+ {
2034
+ int width, height;
2035
+ _glfwPlatformGetWindowSize(window, &width, &height);
2036
+
2037
+ // NOTE: Re-center the cursor only if it has moved since the last call,
2038
+ // to avoid breaking glfwWaitEvents with WM_MOUSEMOVE
2039
+ if (window->win32.lastCursorPosX != width / 2 ||
2040
+ window->win32.lastCursorPosY != height / 2)
2041
+ {
2042
+ _glfwPlatformSetCursorPos(window, width / 2, height / 2);
2043
+ }
2044
+ }
2045
+ }
2046
+
2047
+ void _glfwPlatformWaitEvents(void)
2048
+ {
2049
+ WaitMessage();
2050
+
2051
+ _glfwPlatformPollEvents();
2052
+ }
2053
+
2054
+ void _glfwPlatformWaitEventsTimeout(double timeout)
2055
+ {
2056
+ MsgWaitForMultipleObjects(0, NULL, FALSE, (DWORD) (timeout * 1e3), QS_ALLEVENTS);
2057
+
2058
+ _glfwPlatformPollEvents();
2059
+ }
2060
+
2061
+ void _glfwPlatformPostEmptyEvent(void)
2062
+ {
2063
+ PostMessage(_glfw.win32.helperWindowHandle, WM_NULL, 0, 0);
2064
+ }
2065
+
2066
+ void _glfwPlatformGetCursorPos(_GLFWwindow* window, double* xpos, double* ypos)
2067
+ {
2068
+ POINT pos;
2069
+
2070
+ if (GetCursorPos(&pos))
2071
+ {
2072
+ ScreenToClient(window->win32.handle, &pos);
2073
+
2074
+ if (xpos)
2075
+ *xpos = pos.x;
2076
+ if (ypos)
2077
+ *ypos = pos.y;
2078
+ }
2079
+ }
2080
+
2081
+ void _glfwPlatformSetCursorPos(_GLFWwindow* window, double xpos, double ypos)
2082
+ {
2083
+ POINT pos = { (int) xpos, (int) ypos };
2084
+
2085
+ // Store the new position so it can be recognized later
2086
+ window->win32.lastCursorPosX = pos.x;
2087
+ window->win32.lastCursorPosY = pos.y;
2088
+
2089
+ ClientToScreen(window->win32.handle, &pos);
2090
+ SetCursorPos(pos.x, pos.y);
2091
+ }
2092
+
2093
+ void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode)
2094
+ {
2095
+ if (mode == GLFW_CURSOR_DISABLED)
2096
+ {
2097
+ if (_glfwPlatformWindowFocused(window))
2098
+ disableCursor(window);
2099
+ }
2100
+ else if (_glfw.win32.disabledCursorWindow == window)
2101
+ enableCursor(window);
2102
+ else if (cursorInContentArea(window))
2103
+ updateCursorImage(window);
2104
+ }
2105
+
2106
+ const char* _glfwPlatformGetScancodeName(int scancode)
2107
+ {
2108
+ if (scancode < 0 || scancode > (KF_EXTENDED | 0xff) ||
2109
+ _glfw.win32.keycodes[scancode] == GLFW_KEY_UNKNOWN)
2110
+ {
2111
+ _glfwInputError(GLFW_INVALID_VALUE, "Invalid scancode");
2112
+ return NULL;
2113
+ }
2114
+
2115
+ return _glfw.win32.keynames[_glfw.win32.keycodes[scancode]];
2116
+ }
2117
+
2118
+ int _glfwPlatformGetKeyScancode(int key)
2119
+ {
2120
+ return _glfw.win32.scancodes[key];
2121
+ }
2122
+
2123
+ int _glfwPlatformCreateCursor(_GLFWcursor* cursor,
2124
+ const GLFWimage* image,
2125
+ int xhot, int yhot)
2126
+ {
2127
+ cursor->win32.handle = (HCURSOR) createIcon(image, xhot, yhot, GLFW_FALSE);
2128
+ if (!cursor->win32.handle)
2129
+ return GLFW_FALSE;
2130
+
2131
+ return GLFW_TRUE;
2132
+ }
2133
+
2134
+ int _glfwPlatformCreateStandardCursor(_GLFWcursor* cursor, int shape)
2135
+ {
2136
+ int id = 0;
2137
+
2138
+ switch (shape)
2139
+ {
2140
+ case GLFW_ARROW_CURSOR:
2141
+ id = OCR_NORMAL;
2142
+ break;
2143
+ case GLFW_IBEAM_CURSOR:
2144
+ id = OCR_IBEAM;
2145
+ break;
2146
+ case GLFW_CROSSHAIR_CURSOR:
2147
+ id = OCR_CROSS;
2148
+ break;
2149
+ case GLFW_POINTING_HAND_CURSOR:
2150
+ id = OCR_HAND;
2151
+ break;
2152
+ case GLFW_RESIZE_EW_CURSOR:
2153
+ id = OCR_SIZEWE;
2154
+ break;
2155
+ case GLFW_RESIZE_NS_CURSOR:
2156
+ id = OCR_SIZENS;
2157
+ break;
2158
+ case GLFW_RESIZE_NWSE_CURSOR:
2159
+ id = OCR_SIZENWSE;
2160
+ break;
2161
+ case GLFW_RESIZE_NESW_CURSOR:
2162
+ id = OCR_SIZENESW;
2163
+ break;
2164
+ case GLFW_RESIZE_ALL_CURSOR:
2165
+ id = OCR_SIZEALL;
2166
+ break;
2167
+ case GLFW_NOT_ALLOWED_CURSOR:
2168
+ id = OCR_NO;
2169
+ break;
2170
+ default:
2171
+ _glfwInputError(GLFW_PLATFORM_ERROR, "Win32: Unknown standard cursor");
2172
+ return GLFW_FALSE;
2173
+ }
2174
+
2175
+ cursor->win32.handle = LoadImageW(NULL,
2176
+ MAKEINTRESOURCEW(id), IMAGE_CURSOR, 0, 0,
2177
+ LR_DEFAULTSIZE | LR_SHARED);
2178
+ if (!cursor->win32.handle)
2179
+ {
2180
+ _glfwInputErrorWin32(GLFW_PLATFORM_ERROR,
2181
+ "Win32: Failed to create standard cursor");
2182
+ return GLFW_FALSE;
2183
+ }
2184
+
2185
+ return GLFW_TRUE;
2186
+ }
2187
+
2188
+ void _glfwPlatformDestroyCursor(_GLFWcursor* cursor)
2189
+ {
2190
+ if (cursor->win32.handle)
2191
+ DestroyIcon((HICON) cursor->win32.handle);
2192
+ }
2193
+
2194
+ void _glfwPlatformSetCursor(_GLFWwindow* window, _GLFWcursor* cursor)
2195
+ {
2196
+ if (cursorInContentArea(window))
2197
+ updateCursorImage(window);
2198
+ }
2199
+
2200
+ void _glfwPlatformSetClipboardString(const char* string)
2201
+ {
2202
+ int characterCount;
2203
+ HANDLE object;
2204
+ WCHAR* buffer;
2205
+
2206
+ characterCount = MultiByteToWideChar(CP_UTF8, 0, string, -1, NULL, 0);
2207
+ if (!characterCount)
2208
+ return;
2209
+
2210
+ object = GlobalAlloc(GMEM_MOVEABLE, characterCount * sizeof(WCHAR));
2211
+ if (!object)
2212
+ {
2213
+ _glfwInputErrorWin32(GLFW_PLATFORM_ERROR,
2214
+ "Win32: Failed to allocate global handle for clipboard");
2215
+ return;
2216
+ }
2217
+
2218
+ buffer = GlobalLock(object);
2219
+ if (!buffer)
2220
+ {
2221
+ _glfwInputErrorWin32(GLFW_PLATFORM_ERROR,
2222
+ "Win32: Failed to lock global handle");
2223
+ GlobalFree(object);
2224
+ return;
2225
+ }
2226
+
2227
+ MultiByteToWideChar(CP_UTF8, 0, string, -1, buffer, characterCount);
2228
+ GlobalUnlock(object);
2229
+
2230
+ if (!OpenClipboard(_glfw.win32.helperWindowHandle))
2231
+ {
2232
+ _glfwInputErrorWin32(GLFW_PLATFORM_ERROR,
2233
+ "Win32: Failed to open clipboard");
2234
+ GlobalFree(object);
2235
+ return;
2236
+ }
2237
+
2238
+ EmptyClipboard();
2239
+ SetClipboardData(CF_UNICODETEXT, object);
2240
+ CloseClipboard();
2241
+ }
2242
+
2243
+ const char* _glfwPlatformGetClipboardString(void)
2244
+ {
2245
+ HANDLE object;
2246
+ WCHAR* buffer;
2247
+
2248
+ if (!OpenClipboard(_glfw.win32.helperWindowHandle))
2249
+ {
2250
+ _glfwInputErrorWin32(GLFW_PLATFORM_ERROR,
2251
+ "Win32: Failed to open clipboard");
2252
+ return NULL;
2253
+ }
2254
+
2255
+ object = GetClipboardData(CF_UNICODETEXT);
2256
+ if (!object)
2257
+ {
2258
+ _glfwInputErrorWin32(GLFW_FORMAT_UNAVAILABLE,
2259
+ "Win32: Failed to convert clipboard to string");
2260
+ CloseClipboard();
2261
+ return NULL;
2262
+ }
2263
+
2264
+ buffer = GlobalLock(object);
2265
+ if (!buffer)
2266
+ {
2267
+ _glfwInputErrorWin32(GLFW_PLATFORM_ERROR,
2268
+ "Win32: Failed to lock global handle");
2269
+ CloseClipboard();
2270
+ return NULL;
2271
+ }
2272
+
2273
+ free(_glfw.win32.clipboardString);
2274
+ _glfw.win32.clipboardString = _glfwCreateUTF8FromWideStringWin32(buffer);
2275
+
2276
+ GlobalUnlock(object);
2277
+ CloseClipboard();
2278
+
2279
+ return _glfw.win32.clipboardString;
2280
+ }
2281
+
2282
+ EGLenum _glfwPlatformGetEGLPlatform(EGLint** attribs)
2283
+ {
2284
+ if (_glfw.egl.ANGLE_platform_angle)
2285
+ {
2286
+ int type = 0;
2287
+
2288
+ if (_glfw.egl.ANGLE_platform_angle_opengl)
2289
+ {
2290
+ if (_glfw.hints.init.angleType == GLFW_ANGLE_PLATFORM_TYPE_OPENGL)
2291
+ type = EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE;
2292
+ else if (_glfw.hints.init.angleType == GLFW_ANGLE_PLATFORM_TYPE_OPENGLES)
2293
+ type = EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE;
2294
+ }
2295
+
2296
+ if (_glfw.egl.ANGLE_platform_angle_d3d)
2297
+ {
2298
+ if (_glfw.hints.init.angleType == GLFW_ANGLE_PLATFORM_TYPE_D3D9)
2299
+ type = EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE;
2300
+ else if (_glfw.hints.init.angleType == GLFW_ANGLE_PLATFORM_TYPE_D3D11)
2301
+ type = EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE;
2302
+ }
2303
+
2304
+ if (_glfw.egl.ANGLE_platform_angle_vulkan)
2305
+ {
2306
+ if (_glfw.hints.init.angleType == GLFW_ANGLE_PLATFORM_TYPE_VULKAN)
2307
+ type = EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE;
2308
+ }
2309
+
2310
+ if (type)
2311
+ {
2312
+ *attribs = calloc(3, sizeof(EGLint));
2313
+ (*attribs)[0] = EGL_PLATFORM_ANGLE_TYPE_ANGLE;
2314
+ (*attribs)[1] = type;
2315
+ (*attribs)[2] = EGL_NONE;
2316
+ return EGL_PLATFORM_ANGLE_ANGLE;
2317
+ }
2318
+ }
2319
+
2320
+ return 0;
2321
+ }
2322
+
2323
+ EGLNativeDisplayType _glfwPlatformGetEGLNativeDisplay(void)
2324
+ {
2325
+ return GetDC(_glfw.win32.helperWindowHandle);
2326
+ }
2327
+
2328
+ EGLNativeWindowType _glfwPlatformGetEGLNativeWindow(_GLFWwindow* window)
2329
+ {
2330
+ return window->win32.handle;
2331
+ }
2332
+
2333
+ void _glfwPlatformGetRequiredInstanceExtensions(char** extensions)
2334
+ {
2335
+ if (!_glfw.vk.KHR_surface || !_glfw.vk.KHR_win32_surface)
2336
+ return;
2337
+
2338
+ extensions[0] = "VK_KHR_surface";
2339
+ extensions[1] = "VK_KHR_win32_surface";
2340
+ }
2341
+
2342
+ int _glfwPlatformGetPhysicalDevicePresentationSupport(VkInstance instance,
2343
+ VkPhysicalDevice device,
2344
+ uint32_t queuefamily)
2345
+ {
2346
+ PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR
2347
+ vkGetPhysicalDeviceWin32PresentationSupportKHR =
2348
+ (PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)
2349
+ vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceWin32PresentationSupportKHR");
2350
+ if (!vkGetPhysicalDeviceWin32PresentationSupportKHR)
2351
+ {
2352
+ _glfwInputError(GLFW_API_UNAVAILABLE,
2353
+ "Win32: Vulkan instance missing VK_KHR_win32_surface extension");
2354
+ return GLFW_FALSE;
2355
+ }
2356
+
2357
+ return vkGetPhysicalDeviceWin32PresentationSupportKHR(device, queuefamily);
2358
+ }
2359
+
2360
+ VkResult _glfwPlatformCreateWindowSurface(VkInstance instance,
2361
+ _GLFWwindow* window,
2362
+ const VkAllocationCallbacks* allocator,
2363
+ VkSurfaceKHR* surface)
2364
+ {
2365
+ VkResult err;
2366
+ VkWin32SurfaceCreateInfoKHR sci;
2367
+ PFN_vkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHR;
2368
+
2369
+ vkCreateWin32SurfaceKHR = (PFN_vkCreateWin32SurfaceKHR)
2370
+ vkGetInstanceProcAddr(instance, "vkCreateWin32SurfaceKHR");
2371
+ if (!vkCreateWin32SurfaceKHR)
2372
+ {
2373
+ _glfwInputError(GLFW_API_UNAVAILABLE,
2374
+ "Win32: Vulkan instance missing VK_KHR_win32_surface extension");
2375
+ return VK_ERROR_EXTENSION_NOT_PRESENT;
2376
+ }
2377
+
2378
+ memset(&sci, 0, sizeof(sci));
2379
+ sci.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR;
2380
+ sci.hinstance = GetModuleHandle(NULL);
2381
+ sci.hwnd = window->win32.handle;
2382
+
2383
+ err = vkCreateWin32SurfaceKHR(instance, &sci, allocator, surface);
2384
+ if (err)
2385
+ {
2386
+ _glfwInputError(GLFW_PLATFORM_ERROR,
2387
+ "Win32: Failed to create Vulkan surface: %s",
2388
+ _glfwGetVulkanResultString(err));
2389
+ }
2390
+
2391
+ return err;
2392
+ }
2393
+
2394
+
2395
+ //////////////////////////////////////////////////////////////////////////
2396
+ ////// GLFW native API //////
2397
+ //////////////////////////////////////////////////////////////////////////
2398
+
2399
+ GLFWAPI HWND glfwGetWin32Window(GLFWwindow* handle)
2400
+ {
2401
+ _GLFWwindow* window = (_GLFWwindow*) handle;
2402
+ _GLFW_REQUIRE_INIT_OR_RETURN(NULL);
2403
+ return window->win32.handle;
2404
+ }
2405
+