void EditorClientWx::redo() { Frame* frame = m_page->focusController()->focusedOrMainFrame(); if (frame) { wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient()); if (webKitWin) { webKitWin->m_impl->redoStack.last().editCommand()->reapply(); webKitWin->m_impl->redoStack.removeLast(); } } }
void EditorClientWx::clearUndoRedoOperations() { Frame* frame = m_page->focusController()->focusedOrMainFrame(); if (frame) { wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient()); if (webKitWin) { webKitWin->m_impl->redoStack.clear(); webKitWin->m_impl->undoStack.clear(); } } }
bool EditorClientWx::canRedo() const { Frame* frame = m_page->focusController()->focusedOrMainFrame(); if (frame) { wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient()); if (webKitWin && webKitWin) { return webKitWin->m_impl->redoStack.size() != 0; } } return false; }
void EditorClientWx::respondToChangedContents() { Frame* frame = m_page->focusController()->focusedOrMainFrame(); if (frame) { wxWebView* webKitWin = dynamic_cast<wxWebView*>(frame->view()->hostWindow()->platformPageClient()); if (webKitWin) { wxWebViewContentsChangedEvent wkEvent(webKitWin); webKitWin->GetEventHandler()->ProcessEvent(wkEvent); } } }
void WebPage::firstRectForCharacterInSelectedRange(const uint64_t characterPosition, WebCore::IntRect& resultRect) { Frame* frame = m_page->focusController()->focusedOrMainFrame(); IntRect rect; if (RefPtr<Range> range = frame->editor()->hasComposition() ? frame->editor()->compositionRange() : frame->selection()->selection().toNormalizedRange()) { ExceptionCode ec = 0; RefPtr<Range> tempRange = range->cloneRange(ec); tempRange->setStart(tempRange->startContainer(ec), tempRange->startOffset(ec) + characterPosition, ec); rect = frame->editor()->firstRectForRange(tempRange.get()); } resultRect = frame->view()->contentsToWindow(rect); }
IntRect WebFrame::contentBounds() { Frame* coreFrame = core(this); if (!coreFrame) return IntRect(); FrameView* view = coreFrame->view(); if (!view) return IntRect(); return IntRect(0, 0, view->contentsWidth(), view->contentsHeight()); }
void webkit_web_frame_layout(WebKitWebFrame* frame) { Frame* coreFrame = core(frame); if (!coreFrame) return; FrameView* view = coreFrame->view(); if (!view) return; view->layout(); }
void DumpRenderTreeSupportGtk::layoutFrame(WebKitWebFrame* frame) { Frame* coreFrame = core(frame); if (!coreFrame) return; FrameView* view = coreFrame->view(); if (!view) return; view->layout(); }
static int contentsY(AbstractView* abstractView) { if (!abstractView) return 0; Frame* frame = abstractView->frame(); if (!frame) return 0; FrameView* frameView = frame->view(); if (!frameView) return 0; return frameView->scrollY() / frame->pageZoomFactor(); }
BalRectangle WebFrame::visibleContentRect() { Frame* frame = core(this); if (!frame) return BalRectangle(); FrameView* view = frame->view(); if (!view) return BalRectangle(); return view->visibleContentRect(false); }
void WebFrame::layout() { Frame* coreFrame = core(this); if (!coreFrame) return ; FrameView* view = coreFrame->view(); if (!view) return ; view->layout(); }
void Page::setIsInWindow(bool isInWindow) { if (m_isInWindow == isInWindow) return; m_isInWindow = isInWindow; for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) { if (FrameView* frameView = frame->view()) frameView->setIsInWindow(isInWindow); } }
void HTMLBodyElement::setScrollTop(int scrollTop) { Document* document = this->document(); document->updateLayoutIgnorePendingStylesheets(); Frame* frame = document->frame(); if (!frame) return; FrameView* view = frame->view(); if (!view) return; view->setScrollPosition(IntPoint(view->scrollX(), static_cast<int>(scrollTop * frame->pageZoomFactor() * frame->frameScaleFactor()))); }
IntSize WebFrame::scrollOffset() { Frame* coreFrame = core(this); if (!coreFrame) return IntSize(); FrameView* view = coreFrame->view(); if (!view) return IntSize(); return view->scrollOffset(); }
int HTMLBodyElement::scrollWidth() { // Update the document's layout. document().updateLayoutIgnorePendingStylesheets(); Frame* frame = document().frame(); if (!frame) return 0; FrameView* view = frame->view(); if (!view) return 0; return adjustForZoom(view->contentsWidth(), *frame); }
GSList* DumpRenderTreeSupportGtk::trackedRepaintRects(WebKitWebFrame* frame) { g_return_val_if_fail(WEBKIT_IS_WEB_FRAME(frame), 0); Frame* coreFrame = core(frame); if (!coreFrame || !coreFrame->view()) return 0; GSList* rects = 0; const Vector<IntRect>& repaintRects = coreFrame->view()->trackedRepaintRects(); for (unsigned i = 0; i < repaintRects.size(); i++) { GdkRectangle* rect = g_new0(GdkRectangle, 1); rect->x = repaintRects[i].x(); rect->y = repaintRects[i].y(); rect->width = repaintRects[i].width(); rect->height = repaintRects[i].height(); rects = g_slist_append(rects, rect); } return rects; }
bool FindController::getFindIndicatorBitmapAndRect(Frame& frame, ShareableBitmap::Handle& handle, IntRect& selectionRect) { selectionRect = enclosingIntRect(frame.selection().selectionBounds()); // Selection rect can be empty for matches that are currently obscured from view. if (selectionRect.isEmpty()) return false; IntSize backingStoreSize = selectionRect.size(); float deviceScaleFactor = m_webPage->corePage()->deviceScaleFactor(); backingStoreSize.scale(deviceScaleFactor); // Create a backing store and paint the find indicator text into it. RefPtr<ShareableBitmap> findIndicatorTextBackingStore = ShareableBitmap::createShareable(backingStoreSize, ShareableBitmap::SupportsAlpha); if (!findIndicatorTextBackingStore) return false; auto graphicsContext = findIndicatorTextBackingStore->createGraphicsContext(); graphicsContext->scale(FloatSize(deviceScaleFactor, deviceScaleFactor)); IntRect paintRect = selectionRect; paintRect.move(frame.view()->frameRect().x(), frame.view()->frameRect().y()); paintRect.move(-frame.view()->scrollOffset()); graphicsContext->translate(-paintRect.x(), -paintRect.y()); frame.view()->setPaintBehavior(PaintBehaviorSelectionOnly | PaintBehaviorForceBlackText | PaintBehaviorFlattenCompositingLayers); frame.document()->updateLayout(); frame.view()->paint(graphicsContext.get(), paintRect); frame.view()->setPaintBehavior(PaintBehaviorNormal); if (!findIndicatorTextBackingStore->createHandle(handle)) return false; return true; }
int HTMLBodyElement::scrollTop() { if (!document().inQuirksMode()) return 0; document().updateLayoutIgnorePendingStylesheets(); Frame* frame = document().frame(); if (!frame) return 0; FrameView* view = frame->view(); if (!view) return 0; return adjustForZoom(view->scrollY(), *frame); }
BalPoint WebFrame::scrollOffset() { Frame* coreFrame = core(this); if (!coreFrame) return IntPoint(); FrameView* view = coreFrame->view(); if (!view) return IntPoint(); IntPoint p(view->scrollOffset().width(), view->scrollOffset().height()); return p; }
BalRectangle WebFrame::frameBounds() { Frame* coreFrame = core(this); if (!coreFrame) return IntRect(); FrameView* view = coreFrame->view(); if (!view) return IntRect(); FloatRect bounds = view->visibleContentRect(); return IntRect(0, 0, (int)bounds.width(), (int)bounds.height()); }
// Manual drag caret manipulation void DragController::placeDragCaret(const IntPoint& windowPoint) { mouseMovedIntoDocument(m_page->mainFrame()->documentAtPoint(windowPoint)); if (!m_documentUnderMouse) return; Frame* frame = m_documentUnderMouse->frame(); FrameView* frameView = frame->view(); if (!frameView) return; IntPoint framePoint = frameView->windowToContents(windowPoint); m_page->dragCaretController()->setCaretPosition(frame->visiblePositionForPoint(framePoint)); }
static gboolean webkit_web_view_expose_event(GtkWidget* widget, GdkEventExpose* event) { Frame* frame = core(webView_s->mainFrame()); if (frame->contentRenderer() && frame->view()) { frame->view()->layoutIfNeededRecursive(); cairo_t* cr = gdk_cairo_create(event->window); GraphicsContext ctx(cr); cairo_destroy(cr); ctx.setGdkExposeEvent(event); GOwnPtr<GdkRectangle> rects; int rectCount; gdk_region_get_rectangles(event->region, &rects.outPtr(), &rectCount); // Avoid recursing into the render tree excessively bool coalesce = shouldCoalesce(event->area, rects.get(), rectCount); if (coalesce) { IntRect rect = event->area; ctx.clip(rect); if (webView_s->transparent()) ctx.clearRect(rect); frame->view()->paint(&ctx, rect); } else { for (int i = 0; i < rectCount; i++) { IntRect rect = rects.get()[i]; ctx.save(); ctx.clip(rect); if (webView_s->transparent()) ctx.clearRect(rect); frame->view()->paint(&ctx, rect); ctx.restore(); } } } return false; }
static float pageZoomFactor(UIEvent* event) { DOMWindow* window = event->view(); if (!window) return 1; Frame* frame = window->frame(); if (!frame) return 1; FrameView* view = frame->view(); if (!view) return 1; return view->pageZoomFactor(); }
IntRect WebFrame::frameBounds() { Frame* coreFrame = core(this); if (!coreFrame) return IntRect(); FrameView* view = coreFrame->view(); if (!view) return IntRect(); FloatRect bounds = view->visibleContentRectConsideringExternalScrollers(); return IntRect(0, 0, (int)bounds.width(), (int)bounds.height()); }
void WebViewPrivate::onExpose(BalEventExpose event) { Frame* frame = core(m_webView->mainFrame()); if (!frame) return; if(!isInitialized) { isInitialized = true; frame->view()->resize(m_rect.width(), m_rect.height()); frame->forceLayout(); frame->view()->adjustViewSize(); } GraphicsContext ctx(m_webView->viewWindow()); ctx.setBalExposeEvent(&event); IntRect rect(m_webView->dirtyRegion()); if (frame->contentRenderer() && frame->view() && !rect.isEmpty()) { frame->view()->layoutIfNeededRecursive(); IntRect dirty = rect; IntRect d = rect; if (!m_hUpdateRect.isEmpty()) { frame->view()->paint(&ctx, m_hUpdateRect); dirty.unite(m_hUpdateRect); m_hUpdateRect = IntRect(); } if (!m_vUpdateRect.isEmpty()) { frame->view()->paint(&ctx, m_vUpdateRect); dirty.unite(m_vUpdateRect); m_vUpdateRect = IntRect(); } frame->view()->paint(&ctx, d); if (m_scrollSurface) { SDL_Rect src = {0, 0, m_dstRect.w, m_dstRect.h}; SDL_BlitSurface(m_scrollSurface, &src, m_webView->viewWindow(), &m_dstRect); dirty.unite(IntRect(m_dstRect.x, m_dstRect.y, m_dstRect.w, m_dstRect.h)); SDL_FreeSurface(m_scrollSurface); m_scrollSurface = 0; m_dstRect.x = 0; m_dstRect.y = 0; m_dstRect.w = 0; m_dstRect.h = 0; m_srcRect.x = 0; m_srcRect.y = 0; m_srcRect.w = 0; m_srcRect.h = 0; m_scrollUpdateRect = IntRect(); } updateView(ctx.platformContext(), dirty); m_webView->clearDirtyRegion(); } }
static LayoutSize contentsScrollOffset(AbstractView* abstractView) { if (!abstractView) return LayoutSize(); Frame* frame = abstractView->frame(); if (!frame) return LayoutSize(); FrameView* frameView = frame->view(); if (!frameView) return LayoutSize(); return LayoutSize(frameView->scrollX() / frame->pageZoomFactor(), frameView->scrollY() / frame->pageZoomFactor()); }
static IntRect rectToAbsoluteCoordinates(Frame* initialFrame, const IntRect& initialRect) { IntRect rect = initialRect; for (Frame* frame = initialFrame; frame; frame = frame->tree()->parent()) { if (Element* element = static_cast<Element*>(frame->ownerElement())) { do { rect.move(element->offsetLeft(), element->offsetTop()); } while ((element = element->offsetParent())); rect.move((-frame->view()->scrollOffset())); } } return rect; }
void WebPage::setSize(const WebCore::IntSize& viewSize) { if (m_viewSize == viewSize) return; Frame* frame = m_page->mainFrame(); frame->view()->resize(viewSize); frame->view()->setNeedsLayout(); m_drawingArea->setNeedsDisplay(IntRect(IntPoint(0, 0), viewSize)); m_viewSize = viewSize; }
void WebFrameLoaderClient::transitionToCommittedForNewPage() { Frame* frame = core(m_webFrame); ASSERT(frame); Page* page = frame->page(); ASSERT(page); bool isMainFrame = frame == page->mainFrame(); if (isMainFrame && frame->view()) frame->view()->setParentVisible(false); frame->setView(0); WebView* webView = m_webFrame->webView(); FrameView* frameView; if (isMainFrame) { RECT rect; webView->frameRect(&rect); frameView = new FrameView(frame, IntRect(rect).size()); } else frameView = new FrameView(frame); frame->setView(frameView); frameView->deref(); // FrameViews are created with a ref count of 1. Release this ref since we've assigned it to frame. m_webFrame->updateBackground(); if (isMainFrame) frameView->setParentVisible(true); if (frame->ownerRenderer()) frame->ownerRenderer()->setWidget(frameView); if (HTMLFrameOwnerElement* owner = frame->ownerElement()) frame->view()->setCanHaveScrollbars(owner->scrollingMode() != ScrollbarAlwaysOff); }
void CachedFrameBase::restore() { ASSERT(m_document->view() == m_view); if (m_isMainFrame) m_view->setParentVisible(true); Frame* frame = m_view->frame(); m_cachedFrameScriptData->restore(frame); #if ENABLE(SVG) if (m_document->svgExtensions()) m_document->accessSVGExtensions()->unpauseAnimations(); #endif frame->animation()->resumeAnimationsForDocument(m_document.get()); frame->eventHandler()->setMousePressNode(m_mousePressNode.get()); m_document->resumeActiveDOMObjects(); m_document->resumeScriptedAnimationControllerCallbacks(); // It is necessary to update any platform script objects after restoring the // cached page. frame->script()->updatePlatformScriptObjects(); #if USE(ACCELERATED_COMPOSITING) if (m_isComposited) frame->view()->restoreBackingStores(); #endif frame->loader()->client()->didRestoreFromPageCache(); // Reconstruct the FrameTree for (unsigned i = 0; i < m_childFrames.size(); ++i) frame->tree()->appendChild(m_childFrames[i]->view()->frame()); // Open the child CachedFrames in their respective FrameLoaders. for (unsigned i = 0; i < m_childFrames.size(); ++i) m_childFrames[i]->open(); m_document->enqueuePageshowEvent(PageshowEventPersisted); HistoryItem* historyItem = frame->loader()->history()->currentItem(); m_document->enqueuePopstateEvent(historyItem && historyItem->stateObject() ? historyItem->stateObject() : SerializedScriptValue::nullValue()); #if ENABLE(TOUCH_EVENTS) if (m_document->touchEventHandlerCount()) m_document->page()->chrome()->client()->needTouchEvents(true); #endif m_document->documentDidResumeFromPageCache(); }