Add 'shf/' from commit 'b6c5a95b664aeb861d7b33ffc9eefe447ba99dd7'

git-subtree-dir: shf
git-subtree-mainline: 401408448f
git-subtree-split: b6c5a95b66
This commit is contained in:
2026-04-24 00:27:49 +01:00
83 changed files with 43952 additions and 0 deletions

119
shf/ffi/glfw-input.c Normal file
View File

@@ -0,0 +1,119 @@
#include "mlton-glfw-export.h"
#include "glad.h"
#define GLFW_INCLUDE_NONE
#include <GLFW/glfw3.h>
int PRESS = GLFW_PRESS;
int REPEAT = GLFW_REPEAT;
int RELEASE = GLFW_RELEASE;
int KEY_ESC = GLFW_KEY_ESCAPE;
int KEY_ENTER = GLFW_KEY_ENTER;
int KEY_BACKSPACE = GLFW_KEY_BACKSPACE;
int KEY_ARROW_LEFT = GLFW_KEY_LEFT;
int KEY_ARROW_RIGHT = GLFW_KEY_RIGHT;
int KEY_ARROW_UP = GLFW_KEY_UP;
int KEY_ARROW_DOWN = GLFW_KEY_DOWN;
void framebufferSizeCallback(GLFWwindow* window, int width, int height) {
glViewport(0, 0, width, height);
mltonFramebufferSizeCallback(width, height);
}
void setFramebufferSizeCallback(GLFWwindow* window) {
glfwSetFramebufferSizeCallback(window, framebufferSizeCallback);
}
void charCallback(GLFWwindow* window, unsigned int codepoint) {
mltonCharCallback(codepoint);
}
void setCharCallback(GLFWwindow* window) {
glfwSetCharCallback(window, charCallback);
}
void keyCallback(GLFWwindow *window, int key, int scancode, int action, int mods) {
mltonKeyCallback(key, scancode, action, mods);
}
void setKeyCallback(GLFWwindow *window) {
glfwSetKeyCallback(window, keyCallback);
}
// gamepad code
GLFWgamepadstate state;
float* axes;
int axesCount = -1;
int getGamepadState(int joystickID) {
if (glfwJoystickIsGamepad(joystickID) && glfwGetGamepadState(joystickID, &state)) {
axes = glfwGetJoystickAxes(joystickID, &axesCount);
return 1;
} else {
return 0;
}
}
float getLeftJoystickXAxisState() {
if (axesCount >= 2) {
return axes[0];
} else {
return 99.0;
}
}
float getLeftJoystickYAxisState() {
if (axesCount >= 2) {
return axes[1];
} else {
return 99.0;
}
}
float getL2State() {
return axes[2];
}
float getR2State() {
return axes[5];
}
int isCrossButtonPressed() {
return state.buttons[GLFW_GAMEPAD_BUTTON_CROSS];
}
int isCircleButtonPressed() {
return state.buttons[GLFW_GAMEPAD_BUTTON_CIRCLE];
}
int isSquareButtonPressed() {
return state.buttons[GLFW_GAMEPAD_BUTTON_SQUARE];
}
int isTriangleButtonPressed() {
return state.buttons[GLFW_GAMEPAD_BUTTON_TRIANGLE];
}
int isR1ButtonPressed() {
return state.buttons[GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER];
}
int isL1ButtonPressed() {
return state.buttons[GLFW_GAMEPAD_BUTTON_LEFT_BUMPER];
}
int isDpadUpPressed() {
return state.buttons[GLFW_GAMEPAD_BUTTON_DPAD_UP];
}
int isDpadDownPressed() {
return state.buttons[GLFW_GAMEPAD_BUTTON_DPAD_DOWN];
}
int isDpadLeftPressed() {
return state.buttons[GLFW_GAMEPAD_BUTTON_DPAD_LEFT];
}
int isDpadRightPressed() {
return state.buttons[GLFW_GAMEPAD_BUTTON_DPAD_RIGHT];
}