Sciter.Lite для Android, iOS и IoT
От: c-smile Канада http://terrainformatica.com
Дата: 12.11.19 01:30
Оценка: 31 (4)
Sciter.Lite это т.н. windowless версия — не используется HWND — весь Sciter работает внутри [full screen] surface предоcтавляемым девайсом / платформой.

Используется либо OpenGL/ES если он есть на девайсе или прямой доступ в video память / битмап.

API прост как двери — практически олна функция

SciterProcX( void* id, struct MSG* msg)


  Пример кода
bool engine_init(struct engine *engine) {
  // enable features to be used from script
  BOOL r = SciterSetOption(NULL, SCITER_SET_SCRIPT_RUNTIME_FEATURES, ALLOW_FILE_IO | ALLOW_SOCKET_IO | ALLOW_EVAL | ALLOW_SYSINFO);
  if (!r) return false;

  r = SciterProcX(engine, SCITER_X_MSG_CREATE());
  if (!r) return false;

  engine_report_environment(engine);

  SciterSetCallback(engine, engine_handle_sciter_notification, NULL);

  unsigned int dpi = (unsigned)AConfiguration_getDensity(engine->app->config);
  if (dpi < 96) dpi = 96; else if (dpi > ACONFIGURATION_DENSITY_XXXHIGH) dpi = ACONFIGURATION_DENSITY_XXXHIGH;

  SciterProcX(engine, SCITER_X_MSG_RESOLUTION(dpi));

  r = SciterLoadFile(engine, WSTR("asset:main.htm"));
  
  return bool(r);
}


void engine_handle_cmd(struct android_app *app, int32_t cmd) {
  struct engine *engine = (struct engine *)app->userData;
  switch (cmd) {

    case APP_CMD_INIT_WINDOW:
      // The window is being shown, get it ready.
      if (engine->app->window != NULL) {
        engine_init(engine);
        engine_init_display(engine);
        engine_draw_frame(engine);
      }
      break;

    case APP_CMD_CONTENT_RECT_CHANGED:
      {
        unsigned w = ANativeWindow_getWidth(app->window);
        unsigned h = ANativeWindow_getHeight(app->window);
        sciter::value vars;
        vars.set_item("window-content-top",sciter::value(app->contentRect.top));
        vars.set_item("window-content-left",sciter::value(app->contentRect.left));
        vars.set_item("window-content-bottom",sciter::value(app->contentRect.bottom));
        vars.set_item("window-content-right",sciter::value(app->contentRect.right));
        SciterSetMediaVars(engine, &vars);
        SciterProcX(engine, SCITER_X_MSG_SIZE(w,h));
      } break;

  }
}


Это вот как оно выглядит вживую (видно что тот экран отрисовывается с 60 FPS) :


Это вот анимация как выглядит:
https://youtu.be/OJ7mQth2WjM
Отредактировано 12.11.2019 1:31 c-smile . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.