summaryrefslogtreecommitdiff
path: root/macosx
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2014-03-14 11:33:45 +0100
committerKonstantin Käfer <mail@kkaefer.com>2014-03-14 11:33:45 +0100
commitbdfa761c39218234d9ce7419b3b323e8f25a1476 (patch)
tree4d6ef181a483a6787bb86cc0e5fd15ac187a8584 /macosx
parent4f03b43ab24cc91dea8028ea71b58d6e52f842ed (diff)
downloadqtlocation-mapboxgl-bdfa761c39218234d9ce7419b3b323e8f25a1476.tar.gz
remove code duplication between osx/glfw and linux/glfw programs
Diffstat (limited to 'macosx')
-rw-r--r--macosx/main.mm254
1 files changed, 22 insertions, 232 deletions
diff --git a/macosx/main.mm b/macosx/main.mm
index 8e9ec099a2..48d8aee638 100644
--- a/macosx/main.mm
+++ b/macosx/main.mm
@@ -1,242 +1,41 @@
-#include <llmr/llmr.hpp>
-#include <GLFW/glfw3.h>
#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>
-#include <llmr/platform/platform.hpp>
-#include <llmr/map/tile.hpp>
+
#include "settings.hpp"
+#include "../common/map_view.cpp"
#include <cstdio>
#include <thread>
-class MapView {
-public:
- MapView() :
- dirty(true),
- tracking(false),
- rotating(false),
- last_click(-1),
- settings(),
- map(settings) {
- }
-
- void init() {
- if (!glfwInit()) {
- fprintf(stderr, "Failed to initialize glfw\n");
- exit(1);
- }
-
- glfwWindowHint(GLFW_STENCIL_BITS, 8);
- glfwWindowHint(GLFW_DEPTH_BITS, 16);
-
- window = glfwCreateWindow(1024, 768, "llmr", NULL, NULL);
- if (!window) {
- glfwTerminate();
- fprintf(stderr, "Failed to initialize window\n");
- exit(1);
- }
-
- glfwSetWindowUserPointer(window, this);
- glfwMakeContextCurrent(window);
-
-
- int width, height;
- glfwGetWindowSize(window, &width, &height);
- int fb_width, fb_height;
- glfwGetFramebufferSize(window, &fb_width, &fb_height);
-
- settings.load();
- map.setup((double)fb_width / width);
-
- resize(window, 0, 0);
-
- glfwSwapInterval(1);
-
- map.loadSettings();
-
- glfwSetCursorPosCallback(window, mousemove);
- glfwSetMouseButtonCallback(window, mouseclick);
- glfwSetWindowSizeCallback(window, resize);
- glfwSetFramebufferSizeCallback(window, resize);
- glfwSetScrollCallback(window, scroll);
- glfwSetCharCallback(window, character);
- glfwSetKeyCallback(window, key);
- }
-
-
- static void character(GLFWwindow *window, unsigned int codepoint) {
-
- }
-
-
- static void key(GLFWwindow *window, int key, int scancode, int action, int mods) {
- MapView *mapView = (MapView *)glfwGetWindowUserPointer(window);
-
- if (action == GLFW_RELEASE) {
- switch (key) {
- case GLFW_KEY_ESCAPE:
- glfwSetWindowShouldClose(window, true);
- break;
- case GLFW_KEY_TAB:
- mapView->map.toggleDebug();
- break;
- case GLFW_KEY_R:
- if (!mods) mapView->map.resetPosition();
- break;
- case GLFW_KEY_N:
- if (!mods) mapView->map.resetNorth();
- break;
- }
- }
- }
-
-
- static void scroll(GLFWwindow *window, double xoffset, double yoffset) {
- MapView *mapView = (MapView *)glfwGetWindowUserPointer(window);
- double delta = yoffset * 40;
-
- bool is_wheel = delta != 0 && fmod(delta, 4.000244140625) == 0;
-
- double absdelta = delta < 0 ? -delta : delta;
- double scale = 2.0 / (1.0 + exp(-absdelta / 100.0));
-
- // Make the scroll wheel a bit slower.
- if (!is_wheel) {
- scale = (scale - 1.0) / 2.0 + 1.0;
- }
-
- // Zooming out.
- if (delta < 0 && scale != 0) {
- scale = 1.0 / scale;
- }
-
- mapView->map.startScaling();
- mapView->map.scaleBy(scale, mapView->last_x, mapView->last_y);
- }
-
- static void resize(GLFWwindow *window, int, int) {
- MapView *mapView = (MapView *)glfwGetWindowUserPointer(window);
-
- int width, height;
- glfwGetWindowSize(window, &width, &height);
- int fb_width, fb_height;
- glfwGetFramebufferSize(window, &fb_width, &fb_height);
-
- mapView->map.resize(width, height, fb_width, fb_height);
- }
-
- static void mouseclick(GLFWwindow *window, int button, int action, int modifiers) {
- MapView *mapView = (MapView *)glfwGetWindowUserPointer(window);
-
- if (button == GLFW_MOUSE_BUTTON_RIGHT || (button == GLFW_MOUSE_BUTTON_LEFT && modifiers & GLFW_MOD_CONTROL)) {
- mapView->rotating = action == GLFW_PRESS;
- if (mapView->rotating) {
- mapView->start_x = mapView->last_x;
- mapView->start_y = mapView->last_y;
- } else {
- mapView->map.stopRotating();
- }
- } else if (button == GLFW_MOUSE_BUTTON_LEFT) {
- mapView->tracking = action == GLFW_PRESS;
-
- if (action == GLFW_RELEASE) {
- mapView->map.stopPanning();
- double now = glfwGetTime();
- if (now - mapView->last_click < 0.4) {
- mapView->map.scaleBy(2.0, mapView->last_x, mapView->last_y);
- }
- mapView->last_click = now;
- }
- }
- }
-
- static void mousemove(GLFWwindow *window, double x, double y) {
- MapView *mapView = (MapView *)glfwGetWindowUserPointer(window);
- if (mapView->tracking) {
- double dx = x - mapView->last_x;
- double dy = y - mapView->last_y;
- if (dx || dy) {
- mapView->map.startPanning();
- mapView->map.moveBy(dx, dy);
- }
- } else if (mapView->rotating) {
- mapView->map.startRotating();
- mapView->map.rotateBy(mapView->start_x, mapView->start_y, mapView->last_x, mapView->last_y, x, y);
- }
- mapView->last_x = x;
- mapView->last_y = y;
- }
-
- int run() {
- while (!glfwWindowShouldClose(window)) {
- if (dirty) {
- try {
- dirty = render();
- } catch (std::exception& ex) {
- fprintf(stderr, "exception: %s\n", ex.what());
- }
- glfwSwapBuffers(window);
- fps();
- }
-
- if (dirty) {
- glfwPollEvents();
- } else {
- glfwWaitEvents();
- }
- }
-
- return 0;
- }
-
- bool render() {
- return map.render();
- }
-
- void fps() {
- static int frames = 0;
- static double time_elapsed = 0;
-
- frames++;
- double current_time = glfwGetTime();
-
- if (current_time - time_elapsed >= 1) {
- fprintf(stderr, "FPS: %4.2f\n", frames / (current_time - time_elapsed));
- time_elapsed = current_time;
- frames = 0;
- }
- }
-
- ~MapView() {
- glfwTerminate();
- }
-
-public:
- bool dirty;
- double last_x, last_y;
- bool tracking;
-
- double start_x, start_y;
- bool rotating;
+MapView *mapView = nullptr;
- double last_click;
-
- GLFWwindow *window;
+int main() {
llmr::Settings_MacOSX settings;
- llmr::Map map;
-};
+ mapView = new MapView(settings);
+ mapView->init();
+ int ret = mapView->run();
+ mapView->settings.sync();
+ delete mapView;
+ return ret;
+}
+
-MapView *mapView;
namespace llmr {
namespace platform {
+void cleanup() {
+ // noop
+}
+
void restart() {
- mapView->dirty = true;
- CGEventRef event = CGEventCreate(NULL);
- CGEventSetType(event, kCGEventMouseMoved);
- [[NSApplication sharedApplication] postEvent: [NSEvent eventWithCGEvent:event] atStart:NO];
+ if (mapView) {
+ mapView->dirty = true;
+ CGEventRef event = CGEventCreate(NULL);
+ CGEventSetType(event, kCGEventMouseMoved);
+ [[NSApplication sharedApplication] postEvent: [NSEvent eventWithCGEvent:event] atStart:NO];
+ }
}
class Request {
@@ -291,12 +90,3 @@ double time() {
}
}
-
-int main() {
- mapView = new MapView();
- mapView->init();
- int ret = mapView->run();
- mapView->settings.sync();
- delete mapView;
- return ret;
-}