Example #1
0
RedScreen::~RedScreen()
{
    bool captured = is_mouse_captured();
    _window.stop_key_interception();
    relase_mouse();
    destroy_composit_area();
    _owner.deactivate_interval_timer(*_update_timer);
    _owner.on_screen_destroyed(_id, captured);
    region_destroy(&_dirty_region);
    if (_default_cursor) {
        _default_cursor->unref();
    }

    if (_inactive_cursor) {
        _inactive_cursor->unref();
    }
}
    void CameraController::update(float delta_time)
    {
        const Matrix3 rot = get_object()->get_rotation_matrix();

        Vector3 right, up, forward;
        rot.get_basis(right, up, forward);

        const float move_speed = 2.5f * (key_down(Key::Left_Shift) ? 4.0f : 1.0f); // meters/second
        const float rotate_speed = 0.002f; // rad/pixel

        Vector3 delta = Vector3::zero;

        if (key_down(Key::W))
            delta += forward;
        if (key_down(Key::S))
            delta -= forward;
        if (key_down(Key::D))
            delta += right;
        if (key_down(Key::A))
            delta -= right;
        if (key_down(Key::Space))
            delta += up;
        if (key_down(Key::Left_Control))
            delta -= up;

        get_object()->move(delta * move_speed * m_speed_up * delta_time);

        if (key_pressed(Key::Left_Alt))
            toggle_mouse_captured();

        if (is_mouse_captured())
        {
            const Vector2 mouse_delta = get_mouse_delta() * rotate_speed;
            m_rot_x += mouse_delta.y;
            m_rot_y += mouse_delta.x;

            m_speed_up += get_delta_scroll() * 0.5f;
            m_speed_up = std::max(m_speed_up, 0.0f);
        }

        Quaternion rot_x, rot_y;
        rot_x.rotation_x(m_rot_x);
        rot_y.rotation_y(m_rot_y);
        get_object()->set_rotation(rot_y * rot_x);
    }
Example #3
0
void RedScreen::resize(int width, int height)
{
    RecurciveLock lock(_update_lock);
    _size.x = width;
    _size.y = height;
    create_composit_area();
    if (_full_screen) {
        bool cuptur = _owner.rearrange_monitors(*this);
        __show_full_screen();
        if (cuptur) {
            capture_mouse();
        }
    } else {
        bool cuptur = is_mouse_captured();
        if (cuptur) {
            relase_mouse();
        }
        _window.resize(_size.x, _size.y);
        if (_active && cuptur) {
            capture_mouse();
        }
    }
    notify_new_size();
}