Beispiel #1
0
void MiniBrowser::didChangeViewportAttributes(WKViewRef view, WKViewportAttributesRef attributes, const void* clientInfo)
{
    MiniBrowser* mb = static_cast<MiniBrowser*>(const_cast<void*>(clientInfo));

    WKSize viewportSize = NIXViewportAttributesGetSize(attributes);
    mb->m_viewportWidth = viewportSize.width;
    mb->m_viewportHeight = viewportSize.height;
    mb->m_viewportMinScale = NIXViewportAttributesGetMinimumScale(attributes);
    mb->m_viewportMaxScale = NIXViewportAttributesGetMaximumScale(attributes);
    mb->m_viewportInitScale = NIXViewportAttributesGetInitialScale(attributes);
    mb->m_viewportUserScalable = NIXViewportAttributesGetIsUserScalable(attributes);

    if (mb->m_viewportInitScale < 0) {
        double scale = mb->scaleToFitContents();
        if (scale < mb->m_viewportMinScale)
            scale = mb->m_viewportMinScale;
        else if (scale > mb->m_viewportMaxScale)
            scale = mb->m_viewportMaxScale;
        mb->m_viewportInitScale = scale;
    }

    if (!mb->m_viewportUserScalable)
        mb->m_viewportMaxScale = mb->m_viewportMinScale = mb->m_viewportInitScale;

    WKViewSetContentScaleFactor(mb->m_view, mb->m_viewportInitScale);
}
Beispiel #2
0
void MiniBrowser::didChangeViewportAttributes(NIXView, float width, float height, float minimumScale, float maximumScale, float initialScale, int userScalable, const void* clientInfo)
{
    MiniBrowser* mb = static_cast<MiniBrowser*>(const_cast<void*>(clientInfo));

    mb->m_viewportWidth = width;
    mb->m_viewportHeight = height;
    mb->m_viewportMinScale = minimumScale;
    mb->m_viewportMaxScale = maximumScale;
    mb->m_viewportInitScale = initialScale;
    mb->m_viewportUserScalable = userScalable;

    if (mb->m_viewportInitScale < 0) {
        double scale = mb->scaleToFitContents();
        if (scale < minimumScale)
            scale = minimumScale;
        else if (scale > maximumScale)
            scale = maximumScale;
        mb->m_viewportInitScale = scale;
    }

    if (!mb->m_viewportUserScalable)
        mb->m_viewportMaxScale = mb->m_viewportMinScale = mb->m_viewportInitScale;

    NIXViewSetScale(mb->m_view, mb->m_viewportInitScale);
}
Beispiel #3
0
void MiniBrowser::didFindZoomableArea(WKViewRef, WKPoint target, WKRect area, const void* clientInfo)
{
    MiniBrowser* mb = static_cast<MiniBrowser*>(const_cast<void*>(clientInfo));

    // Zoomable area width is the same as web page width, and this is fully visible.
    if (mb->m_contentsSize.width == area.size.width && mb->m_contentsSize.width == NIXViewVisibleContentsSize(mb->m_view).width)
        return;

    // The zoomed area will look nicer with a horizontal margin.
    double scale = WKViewGetSize(mb->m_view).width / (area.size.width + horizontalMarginForViewportAdjustment * 2.0);

    // Trying to zoom to an area with the same scale factor causes a zoom out.
    if (scale == WKViewGetContentScaleFactor(mb->m_view))
        scale = mb->scaleToFitContents();
    else {
        // We want the zoomed content area to fit horizontally in the WebView,
        // so let's give the scaleAtPoint method a suitable value.
        target.x = area.origin.x - horizontalMarginForViewportAdjustment;
        WKViewSetContentPosition(mb->m_view, WKPointMake(target.x, WKViewGetContentPosition(mb->m_view).y));
    }

    mb->scaleAtPoint(target, scale);
}