void ItalcVncConnection::setImage( const QImage & img ) { m_imgLock.lockForWrite(); const QSize oldSize = m_image.size(); m_image = img; m_imgLock.unlock(); if( img.size() != oldSize ) { emit framebufferSizeChanged( img.width(), img.height() ); } }
void RdpView::connectionOpened() { qCDebug(KRDC) << "Connection opened"; const QSize size = QSize(m_container->width(), m_container->height()); qCDebug(KRDC) << "Size hint: " << size.width() << " " << size.height(); setStatus(Connected); setFixedSize(size); resize(size); m_containerWidget->setFixedSize(size); emit framebufferSizeChanged(size.width(), size.height()); emit connected(); setFocus(); }
void VncView::updateImage(int x, int y, int w, int h) { // kDebug(5011) << "got update" << width() << height(); m_x = x; m_y = y; m_w = w; m_h = h; if (m_horizontalFactor != 1.0 || m_verticalFactor != 1.0) { // If the view is scaled, grow the update rectangle to avoid artifacts m_x-=1; m_y-=1; m_w+=2; m_h+=2; } m_frame = vncThread.image(); if (!m_initDone) { if (!vncThread.username().isEmpty()) { m_url.setUserName(vncThread.username()); } setAttribute(Qt::WA_StaticContents); setAttribute(Qt::WA_OpaquePaintEvent); installEventFilter(this); setCursor(((m_dotCursorState == CursorOn) || m_forceLocalCursor) ? localDotCursor() : Qt::BlankCursor); setMouseTracking(true); // get mouse events even when there is no mousebutton pressed setFocusPolicy(Qt::WheelFocus); setStatus(Connected); emit connected(); if (m_scale) { #ifndef QTONLY kDebug(5011) << "Setting initial size w:" <<m_hostPreferences->width() << " h:" << m_hostPreferences->height(); emit framebufferSizeChanged(m_hostPreferences->width(), m_hostPreferences->height()); scaleResize(m_hostPreferences->width(), m_hostPreferences->height()); kDebug() << "m_frame.size():" << m_frame.size() << "size()" << size(); #else //TODO: qtonly alternative #endif } m_initDone = true; #ifndef QTONLY if (m_hostPreferences->walletSupport()) { saveWalletPassword(vncThread.password()); } #endif } if ((y == 0 && x == 0) && (m_frame.size() != size())) { kDebug(5011) << "Updating framebuffer size"; if (m_scale) { setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)); if (parentWidget()) scaleResize(parentWidget()->width(), parentWidget()->height()); } else { kDebug(5011) << "Resizing: " << m_frame.width() << m_frame.height(); resize(m_frame.width(), m_frame.height()); setMaximumSize(m_frame.width(), m_frame.height()); //This is a hack to force Qt to center the view in the scroll area setMinimumSize(m_frame.width(), m_frame.height()); emit framebufferSizeChanged(m_frame.width(), m_frame.height()); } } m_repaint = true; repaint(qRound(m_x * m_horizontalFactor), qRound(m_y * m_verticalFactor), qRound(m_w * m_horizontalFactor), qRound(m_h * m_verticalFactor)); m_repaint = false; }
void Screen::drawWidgets() { if (!mVisible) return; Vector2i oldFBSize(mFBSize); glfwMakeContextCurrent(mGLFWWindow); glfwGetFramebufferSize(mGLFWWindow, &mFBSize[0], &mFBSize[1]); glfwGetWindowSize(mGLFWWindow, &mSize[0], &mSize[1]); glViewport(0, 0, mFBSize[0], mFBSize[1]); if (oldFBSize != mFBSize) framebufferSizeChanged(); /* Calculate pixel ratio for hi-dpi devices. */ mPixelRatio = (float) mFBSize[0] / (float) mSize[0]; nvgBeginFrame(mNVGContext, mSize[0], mSize[1], mPixelRatio); nvgTranslate(mNVGContext, -2, -2); draw(mNVGContext); double elapsed = glfwGetTime() - mLastInteraction; if (elapsed > 0.5f) { /* Draw tooltips */ const Widget *widget = findWidget(mMousePos); if (widget && !widget->tooltip().empty()) { int tooltipWidth = 150; float bounds[4]; nvgFontFace(mNVGContext, "sans"); nvgFontSize(mNVGContext, 15.0f); nvgTextAlign(mNVGContext, NVG_ALIGN_CENTER | NVG_ALIGN_TOP); nvgTextLineHeight(mNVGContext, 1.1f); Vector2i pos = widget->absolutePosition() + Vector2i(widget->width() / 2, widget->height() + 10); nvgTextBoxBounds(mNVGContext, pos.x(), pos.y(), tooltipWidth, widget->tooltip().c_str(), nullptr, bounds); nvgGlobalAlpha(mNVGContext, std::min(1.0, 2 * (elapsed - 0.5f)) * 0.8); nvgBeginPath(mNVGContext); nvgFillColor(mNVGContext, Color(0, 255)); int h = (bounds[2] - bounds[0]) / 2; nvgRoundedRect(mNVGContext, bounds[0] - 4 - h, bounds[1] - 4, (int) (bounds[2] - bounds[0]) + 8, (int) (bounds[3] - bounds[1]) + 8, 3); int px = (int) ((bounds[2] + bounds[0]) / 2) - h; nvgMoveTo(mNVGContext, px, bounds[1] - 10); nvgLineTo(mNVGContext, px + 7, bounds[1] + 1); nvgLineTo(mNVGContext, px - 7, bounds[1] + 1); nvgFill(mNVGContext); nvgFillColor(mNVGContext, Color(255, 255)); nvgFontBlur(mNVGContext, 0.0f); nvgTextBox(mNVGContext, pos.x() - h, pos.y(), tooltipWidth, widget->tooltip().c_str(), nullptr); } } nvgEndFrame(mNVGContext); }