You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: mod.rs
    path of file: ./repos/veloren/voxygen/src/ui
    
    the code of the file until where you have to start completion: mod cache;
mod event;
pub mod graphic;
mod scale;
mod widgets;
#[macro_use]
pub mod img_ids;
#[macro_use]
pub mod fonts;
#[cfg(feature = "egui-ui")] pub mod egui;
pub mod ice;
pub mod keyed_jobs;

pub use event::Event;
pub use graphic::{Graphic, Id as GraphicId, Rotation, SampleStrat, Transform};
pub use keyed_jobs::KeyedJobs;
pub use scale::{Scale, ScaleMode};
pub use widgets::{
    image_frame::ImageFrame,
    image_slider::ImageSlider,
    ingame::{Ingame, Ingameable},
    item_tooltip::{ItemTooltip, ItemTooltipManager, ItemTooltipable},
    outlined_text::OutlinedText,
    radio_list::RadioList,
    slot,
    toggle_button::ToggleButton,
    tooltip::{Tooltip, TooltipManager, Tooltipable},
};

use crate::{
    error::Error,
    render::{
        create_ui_quad, create_ui_tri, DynamicModel, Mesh, RenderError, Renderer, UiBoundLocals,
        UiDrawer, UiLocals, UiMode, UiVertex,
    },
    window::Window,
};
#[rustfmt::skip]
use ::image::GenericImageView;
use cache::Cache;
use common::{slowjob::SlowJobPool, util::srgba_to_linear};
use common_base::span;
use conrod_core::{
    event::Input,
    graph::{self, Graph},
    image::{Id as ImageId, Map},
    input::{touch::Touch, Motion, Widget},
    render::{Primitive, PrimitiveKind},
    text::{self, font},
  
    
    pub fn new(window: &mut Window) -> Result<Self, Error> {
        let scale_factor = window.scale_factor();
        let renderer = window.renderer_mut();
        let physical_resolution = renderer.resolution();
        let scale = Scale::new(
            physical_resolution,
            scale_factor,
            ScaleMode::Absolute(1.0),
            1.0,
        );

        let win_dims = scale.scaled_resolution().into_array();

        let mut ui = UiBuilder::new(win_dims).build();
        // NOTE: Since we redraw the actual frame each time whether or not the UI needs
        // to be updated, there's no reason to set the redraw count higher than
        // 1.
        ui.set_num_redraw_frames(1);

        let item_tooltip_manager = ItemTooltipManager::new(
            Duration::from_millis(1),
            Duration::from_millis(0),
            scale.scale_factor_logical(),
        );

        let tooltip_manager = TooltipManager::new(
            ui.widget_id_generator(),
            Duration::from_millis(1),
            Duration::from_millis(0),
            scale.scale_factor_logical(),
        );

        let interface_locals = renderer.create_ui_bound_locals(&[UiLocals::default()]);

        Ok(Self {
            ui,
            image_map: Map::new(),
            cache: Cache::new(renderer)?,
            draw_commands: Vec::new(),
            mesh: Mesh::new(),
            model: renderer.create_dynamic_model(100),
            interface_locals,
            ingame_locals: Vec::new(),
            window_resized: false,
            scale_factor_changed: None,
            need_cache_resize: false,
            graphic_replaced: false,
            scale,
            tooltip_manager,
            item_tooltip_manager,
            window_scissor: default_scissor(physical_resolution),
        })
    }