MAPS_LOGD("evas_gl_context_create() set PixelScale %f", scaleFactor);
m_map->setPixelScale(scaleFactor);
- m_map->loadScene(NORMAL_SCENE_FILE_PATH);
+ m_map->loadSceneAsync(NORMAL_SCENE_FILE_PATH, false, sceneLoadedCb, (void*)view);
// Make the GL context current and perform GL setup.
evas_gl_make_current(m_gl, m_surface, m_context);
m_map->resize(m_w, m_h);
- if (m_w > 1 && m_h > 1) {
+ if (m_sceneLoaded && m_w > 1 && m_h > 1) {
readyMapCb((void*)view);
}
}
m_isInitialized = false;
+ m_sceneLoaded = false;
if (m_image) {
evas_object_image_pixels_get_callback_set(m_image, nullptr, nullptr);
m_h = MAX(m_h, 1);
if (x != m_x || y != m_y || w != m_w || h != m_h) {
- if ( (m_w <= 1 || m_h <= 1) && w > 1 && h > 1) {
+ if ( (m_w <= 1 || m_h <= 1) && w > 1 && h > 1 && m_sceneLoaded) {
// Send a tangram view ready callback when we have a legit canvas size
readyMapCb((void*)view);
}
return;
}
m_viewType = newViewType;
- m_map->loadScene(newSceneFile);
+ m_map->loadSceneAsync(newSceneFile, false, sceneLoadedCb, (void*)view);
}
bool buildings_enabled = false;
m_map->applySceneUpdates();
}
+void TangramView::sceneLoadedCb(void *data) {
+ TangramView *tv = nullptr;
+ int maps_error = maps_view_get_maps_plugin_view_handle((maps_view_h)data, (void**)&tv);
+ if (maps_error != MAPS_ERROR_NONE || !tv) { return; }
+
+ // only do this for first scene load not for any sceneUpdates
+ if (!tv->isSceneLoaded()) {
+ if (tv->getWidth() > 1 && tv->getHeight() > 1) {
+ readyMapCb(data);
+ }
+ tv->setSceneLoaded(true);
+ }
+}
+
void TangramView::readyMapCb(void *data)
{
TangramView *tv = nullptr;
int maps_error = maps_view_get_maps_plugin_view_handle((maps_view_h)data, (void**)&tv);
- if (maps_error != MAPS_ERROR_NONE || !tv) return;
+ if (maps_error != MAPS_ERROR_NONE || !tv) { return; }
if (tv->m_readyCb) {
tv->m_readyCb(data);
static void initNetworkRequests();
static void deinitNetworkRequests();
+ int getWidth() { return m_w; }
+ int getHeight() { return m_h; }
+
+ void setSceneLoaded(bool sceneLoaded) { m_sceneLoaded = sceneLoaded; }
+ bool isSceneLoaded() { return m_sceneLoaded; }
+
private:
mapzen_error_e setupOpenGlSurface(maps_view_h view);
void setMapType(maps_view_h view);
std::mutex& viewObjectMutex() { return m_viewObjectMutex; }
void removeAllObjects();
+ static void sceneLoadedCb(void *data);
static void readyMapCb(void *view);
static void renderingCb(void *data);
static void pixelGetCb(void *data, Evas_Object *obj);
bool m_isInitialized = false;
bool m_publicTransitEnabled = false;
bool m_buildingsEnabled = true;
+ bool m_sceneLoaded = false;
std::string m_language = "eng";
int m_x = 0;