blob: f582971f91607bb7b08c609f71485c0de908deaf [file] [log] [blame]
/*
* Copyright 2017 The Emscripten Authors. All rights reserved.
* Emscripten is available under two separate licenses, the MIT license and the
* University of Illinois/NCSA Open Source License. Both these licenses can be
* found in the LICENSE file.
*/
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <assert.h>
#include <unistd.h>
#ifdef __EMSCRIPTEN__
#include <emscripten.h>
#endif
#define GLFW_INCLUDE_ES2
#include <GLFW/glfw3.h>
GLFWwindow* g_window;
void render();
void render() {
glClearColor(0.0f, 1.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
}
void on_file_drop(GLFWwindow *window, int count, const char **paths) {
for (int i = 0; i < count; ++i) {
printf("dropped file %s\n", paths[i]);
FILE *fp = fopen(paths[i], "rb");
if (!fp) {
printf("failed to open %s\n", paths[i]);
perror("fopen");
#ifdef REPORT_RESULT
REPORT_RESULT(0);
#endif
return;
}
int c;
long size = 0;
bool dump = strstr(paths[i], ".txt") != 0;
if (dump) printf("text file contents (first 100 bytes): ");
while ((c = fgetc(fp)) != -1) {
++size;
if (dump && size <= 100) putchar(c);
}
if (dump) putchar('\n');
printf("read %ld bytes from %s\n", size, paths[i]);
fclose(fp);
#ifdef __EMSCRIPTEN__
// Emscripten copies the contents of the dropped file into the
// in-browser filesystem. Delete after usage to free up memory.
printf("unlinking %s\n", paths[i]);
unlink(paths[i]);
#endif
}
#ifdef REPORT_RESULT
REPORT_RESULT(1);
#endif
}
int main() {
if (!glfwInit())
{
printf("Could not create window. Test failed.\n");
#ifdef REPORT_RESULT
REPORT_RESULT(0);
#endif
return -1;
}
glfwWindowHint(GLFW_RESIZABLE , 1);
g_window = glfwCreateWindow(600, 450, "GLFW drop file", NULL, NULL);
if (!g_window)
{
printf("Could not create window. Test failed.\n");
#ifdef REPORT_RESULT
REPORT_RESULT(0);
#endif
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(g_window);
// Install callbacks
glfwSetDropCallback(g_window, on_file_drop);
// Main loop
printf("Drag and drop a file from your desktop onto the green canvas.\n");
#ifdef __EMSCRIPTEN__
emscripten_set_main_loop(render, 0, 1);
#else
while (!glfwWindowShouldClose(g_window)) {
render();
glfwSwapBuffers(g_window);
glfwPollEvents();
}
#endif
glfwTerminate();
return 0;
}