#include "qvnc.h" QVnc::QVnc() { // Don't let Qt change the size of the OpenGL framebuffer setTextureFollowsItemSize(false); m_dispatcher = new Dispatcher; m_dispatcher->moveToThread(&m_dispatcher_thread); connect(&m_dispatcher_thread, &QThread::finished, m_dispatcher, &QObject::deleteLater); connect(this, &QVnc::open_connection, m_dispatcher, &Dispatcher::open); connect(this, &QVnc::terminate_connection, m_dispatcher, &Dispatcher::terminate); connect(m_dispatcher, &Dispatcher::updateFramebuffer, this, &QVnc::update); QThreadPool::globalInstance()->reserveThread(); m_dispatcher_thread.start(); } QVnc::~QVnc() { m_dispatcher_thread.quit(); m_dispatcher_thread.wait(); } void QVnc::open() { emit open_connection(this->m_host, this->m_port); } void QVnc::terminate() { emit terminate_connection(); } void QVnc::setHost(QString host) { if (m_host == host) return; m_host = host; emit hostChanged(host); } void QVnc::setPort(int port) { if (m_port == port) return; m_port = port; emit portChanged(port); } QQuickFramebufferObject::Renderer *QVnc::createRenderer() const { VncRenderer *renderer = new VncRenderer(); connect(renderer, &VncRenderer::rendered, m_dispatcher, &Dispatcher::refresh); connect(m_dispatcher &Dispatcher::resizeFramebuffer, renderer, &VncRenderer::invalidateFramebufferObject); return renderer; } QString QVnc::host() const { return m_host; } int QVnc::port() const { return m_port; }