point measure_icon(canvas& cnv, uint32_t cp, float size) { auto state = cnv.new_state(); auto& thm = get_theme(); cnv.font(thm.icon_font, size); return cnv.measure_text(codepoint_to_utf8(cp).c_str()).size; }
bool GridMap::_get(const StringName &p_name, Variant &r_ret) const { String name = p_name; if (name == "theme") { r_ret = get_theme(); } else if (name == "cell_size") { r_ret = get_cell_size(); } else if (name == "cell_octant_size") { r_ret = get_octant_size(); } else if (name == "cell_center_x") { r_ret = get_center_x(); } else if (name == "cell_center_y") { r_ret = get_center_y(); } else if (name == "cell_center_z") { r_ret = get_center_z(); } else if (name == "cell_scale") { r_ret = cell_scale; } else if (name == "data") { Dictionary d; PoolVector<int> cells; cells.resize(cell_map.size() * 3); { PoolVector<int>::Write w = cells.write(); int i = 0; for (Map<IndexKey, Cell>::Element *E = cell_map.front(); E; E = E->next(), i++) { encode_uint64(E->key().key, (uint8_t *)&w[i * 3]); encode_uint32(E->get().cell, (uint8_t *)&w[i * 3 + 2]); } } d["cells"] = cells; r_ret = d; } else if (name.begins_with("areas/")) { int which = name.get_slicec('/', 1).to_int(); String what = name.get_slicec('/', 2); if (what == "bounds") r_ret = area_get_bounds(which); else if (what == "name") r_ret = area_get_name(which); else if (what == "disable_distance") r_ret = area_get_portal_disable_distance(which); else if (what == "exterior_portal") r_ret = area_is_exterior_portal(which); else return false; } else return false; return true; }
void replay_controller::rebuild_replay_theme() { const config &theme_cfg = get_theme(game_config_, level_["theme"]); if (const config &res = theme_cfg.child("resolution")) { if (const config &replay_theme_cfg = res.child("replay")) gui_->get_theme().modify(replay_theme_cfg); gui_->get_theme().modify_label("time-icon", _ ("current local time")); //Make sure we get notified if the theme is redrawn completely. That way we have //a chance to restore the replay controls of the theme as well. gui_->invalidate_theme(); } }
bool GridMap::_get(const StringName &p_name, Variant &r_ret) const { String name = p_name; if (name == "theme") { r_ret = get_theme(); } else if (name == "cell_size") { r_ret = get_cell_size(); } else if (name == "cell_octant_size") { r_ret = get_octant_size(); } else if (name == "cell_center_x") { r_ret = get_center_x(); } else if (name == "cell_center_y") { r_ret = get_center_y(); } else if (name == "cell_center_z") { r_ret = get_center_z(); } else if (name == "cell_scale") { r_ret = cell_scale; } else if (name == "data") { Dictionary d; PoolVector<int> cells; cells.resize(cell_map.size() * 3); { PoolVector<int>::Write w = cells.write(); int i = 0; for (Map<IndexKey, Cell>::Element *E = cell_map.front(); E; E = E->next(), i++) { encode_uint64(E->key().key, (uint8_t *)&w[i * 3]); encode_uint32(E->get().cell, (uint8_t *)&w[i * 3 + 2]); } } d["cells"] = cells; r_ret = d; } else return false; return true; }
static void update_mouse_cursor() { os::NativeCursor nativeCursor = os::kNoCursor; const Cursor* cursor = nullptr; if (use_native_mouse_cursor || mouse_cursor_type == kOutsideDisplay) { switch (mouse_cursor_type) { case ui::kOutsideDisplay: nativeCursor = os::kArrowCursor; break; case ui::kNoCursor: break; case ui::kArrowCursor: case ui::kArrowPlusCursor: nativeCursor = os::kArrowCursor; break; case ui::kCrosshairCursor: nativeCursor = os::kCrosshairCursor; break; case ui::kForbiddenCursor: nativeCursor = os::kForbiddenCursor; break; case ui::kHandCursor: nativeCursor = os::kLinkCursor; break; case ui::kScrollCursor: case ui::kMoveCursor: nativeCursor = os::kMoveCursor; break; case ui::kSizeNSCursor: nativeCursor = os::kSizeNSCursor; break; case ui::kSizeWECursor: nativeCursor = os::kSizeWECursor; break; case ui::kSizeNCursor: nativeCursor = os::kSizeNCursor; break; case ui::kSizeNECursor: nativeCursor = os::kSizeNECursor; break; case ui::kSizeECursor: nativeCursor = os::kSizeECursor; break; case ui::kSizeSECursor: nativeCursor = os::kSizeSECursor; break; case ui::kSizeSCursor: nativeCursor = os::kSizeSCursor; break; case ui::kSizeSWCursor: nativeCursor = os::kSizeSWCursor; break; case ui::kSizeWCursor: nativeCursor = os::kSizeWCursor; break; case ui::kSizeNWCursor: nativeCursor = os::kSizeNWCursor; break; } } // Set native cursor if (mouse_display) { bool ok = mouse_display->setNativeMouseCursor(nativeCursor); // It looks like the specific native cursor is not supported, // so we can should use the internal overlay (even when we // have use_native_mouse_cursor flag enabled). if (!ok) nativeCursor = os::kNoCursor; } // Use a custom cursor if (nativeCursor == os::kNoCursor && mouse_cursor_type != ui::kOutsideDisplay) { if (get_theme() && mouse_cursor_type != ui::kCustomCursor) cursor = get_theme()->getStandardCursor(mouse_cursor_type); else cursor = mouse_cursor_custom; } // Try to use a custom native cursor if it's possible if (nativeCursor == os::kNoCursor && !update_custom_native_cursor(cursor)) { // Or an overlay as last resource update_mouse_overlay(cursor); } }