Esempio n. 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);
}
Esempio n. 2
0
void MiniBrowser::pageDidRequestScroll(WKViewRef, WKPoint position, const void* clientInfo)
{
    MiniBrowser* mb = static_cast<MiniBrowser*>(const_cast<void*>(clientInfo));
    if (!NIXViewIsSuspended(mb->m_view))
        WKViewSetContentPosition(mb->m_view, mb->adjustScrollPositionToBoundaries(position));
    mb->scheduleUpdateDisplay();
}
Esempio n. 3
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);
}
Esempio n. 4
0
void MiniBrowser::didChangeContentsSize(WKViewRef, WKSize size, const void* clientInfo)
{
    MiniBrowser* mb = static_cast<MiniBrowser*>(const_cast<void*>(clientInfo));
    mb->m_contentsSize = size;

    if (mb->isMobileMode())
        mb->adjustScrollPosition();
}
Esempio n. 5
0
void MiniBrowser::webProcessCrashed(WKViewRef, WKURLRef url, const void* clientInfo)
{
    MiniBrowser* mb = static_cast<MiniBrowser*>(const_cast<void*>(clientInfo));
    //const string urlString = createStdStringFromWKString(url);
    //cerr << "The web process has crashed on '" << urlString << "', reloading page...\n";
    //WKURLRef wkUrl = WKURLCreateWithUTF8CString(urlString.c_str());
    WKPageLoadURL(mb->pageRef(), url);
}
Esempio n. 6
0
gboolean MiniBrowser::callUpdateDisplay(gpointer data)
{
    MiniBrowser* browser = reinterpret_cast<MiniBrowser*>(data);

    assert(browser->m_displayUpdateScheduled);
    browser->m_displayUpdateScheduled = false;
    browser->updateDisplay();
    return 0;
}
Esempio n. 7
0
void MiniBrowser::doneWithGestureEvent(WKViewRef, const NIXGestureEvent* event, bool wasEventHandled, const void* clientInfo)
{
    if (wasEventHandled)
        return;

    MiniBrowser* mb = static_cast<MiniBrowser*>(const_cast<void*>(clientInfo));

    if (event->type == kNIXInputEventTypeGestureSingleTap && mb->m_shouldFocusEditableArea) {
        mb->m_shouldFocusEditableArea = false;
        mb->adjustViewportToTextInputArea();
    }

    mb->m_postponeTextInputUpdates = true;
}
Esempio n. 8
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);
}
Esempio n. 9
0
void MiniBrowser::webProcessRelaunched(WKViewRef, const void* clientInfo)
{
    MiniBrowser* mb = static_cast<MiniBrowser*>(const_cast<void*>(clientInfo));
    cout << "The web process has been restarted.\n";
    mb->scheduleUpdateDisplay();
}
Esempio n. 10
0
void MiniBrowser::viewNeedsDisplay(WKViewRef, WKRect area, const void* clientInfo)
{
    UNUSED_PARAM(area);
    MiniBrowser* mb = static_cast<MiniBrowser*>(const_cast<void*>(clientInfo));
    mb->scheduleUpdateDisplay();
}
Esempio n. 11
0
void MiniBrowser::didFinishDocumentLoadForFrame(WKPageRef page, WKFrameRef, WKTypeRef, const void* clientInfo)
{
    MiniBrowser* mb = static_cast<MiniBrowser*>(const_cast<void*>(clientInfo));
    mb->m_control->updateUrlText(mb->activeUrl().c_str());
}
Esempio n. 12
0
void MiniBrowser::pageDidRequestScroll(NIXView, WKPoint position, const void* clientInfo)
{
    MiniBrowser* mb = static_cast<MiniBrowser*>(const_cast<void*>(clientInfo));
    if (!NIXViewIsSuspended(mb->m_view))
        NIXViewSetScrollPosition(mb->m_view, mb->adjustScrollPositionToBoundaries(position));
}