⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frame.h

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 H
字号:
/* * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> *                     1999-2001 Lars Knoll <knoll@kde.org> *                     1999-2001 Antti Koivisto <koivisto@kde.org> *                     2000-2001 Simon Hausmann <hausmann@kde.org> *                     2000-2001 Dirk Mueller <mueller@kde.org> *                     2000 Stefan Schimanski <1Stein@gmx.de> * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) * Copyright (C) 2008 Eric Seidel <eric@webkit.org> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB.  If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */#ifndef Frame_h#define Frame_h#include "AnimationController.h"#include "Document.h"#include "DragImage.h"#include "EditAction.h"#include "Editor.h"#include "EventHandler.h"#include "FrameLoader.h"#include "FrameTree.h"#include "Range.h"#include "ScrollBehavior.h"#include "ScriptController.h"#include "SelectionController.h"#include "TextGranularity.h"#if PLATFORM(WIN)#include "FrameWin.h"#endif#if PLATFORM(MAC)#ifndef __OBJC__class NSArray;class NSDictionary;class NSMutableDictionary;class NSString;typedef int NSWritingDirection;#endif#endif#if PLATFORM(WIN)typedef struct HBITMAP__* HBITMAP;#endifnamespace WebCore {class CSSMutableStyleDeclaration;class Editor;class EventHandler;class FrameLoader;class FrameLoaderClient;class FrameTree;class FrameView;class HTMLFrameOwnerElement;class HTMLTableCellElement;class RegularExpression;class RenderPart;class ScriptController;class SelectionController;class Settings;class VisibleSelection;class Widget;#if FRAME_LOADS_USER_STYLESHEET    class UserStyleSheetLoader;#endiftemplate <typename T> class Timer;class Frame : public RefCounted<Frame> {public:    static PassRefPtr<Frame> create(Page* page, HTMLFrameOwnerElement* ownerElement, FrameLoaderClient* client)    {        return adoptRef(new Frame(page, ownerElement, client));    }    void setView(FrameView*);    ~Frame();        void init();    Page* page() const;    HTMLFrameOwnerElement* ownerElement() const;    void pageDestroyed();    void disconnectOwnerElement();    Document* document() const;    FrameView* view() const;    void setDOMWindow(DOMWindow*);    DOMWindow* domWindow() const;    void clearFormerDOMWindow(DOMWindow*);    Editor* editor() const;    EventHandler* eventHandler() const;    FrameLoader* loader() const;    SelectionController* selection() const;    FrameTree* tree() const;    AnimationController* animation() const;    ScriptController* script();    RenderView* contentRenderer() const; // root renderer for the document contained in this frame    RenderPart* ownerRenderer() const; // renderer for the element that contains this frame        bool isDisconnected() const;    void setIsDisconnected(bool);    bool excludeFromTextSearch() const;    void setExcludeFromTextSearch(bool);    void createView(const IntSize&, const Color&, bool, const IntSize &, bool,                    ScrollbarMode = ScrollbarAuto, ScrollbarMode = ScrollbarAuto);private:    Frame(Page*, HTMLFrameOwnerElement*, FrameLoaderClient*);    // === undecided, would like to consider moving to another classpublic:    static Frame* frameForWidget(const Widget*);    Settings* settings() const; // can be NULL#if FRAME_LOADS_USER_STYLESHEET    void setUserStyleSheetLocation(const KURL&);    void setUserStyleSheet(const String& styleSheetData);#endif    void setPrinting(bool printing, float minPageWidth, float maxPageWidth, bool adjustViewSize);    bool inViewSourceMode() const;    void setInViewSourceMode(bool = true);    void keepAlive(); // Used to keep the frame alive when running a script that might destroy it.#ifndef NDEBUG    static void cancelAllKeepAlive();#endif    void setDocument(PassRefPtr<Document>);    void clearTimers();    static void clearTimers(FrameView*, Document*);    void setNeedsReapplyStyles();    bool needsReapplyStyles() const;    void reapplyStyles();    String documentTypeString() const;    // This method -- and the corresponding list of former DOM windows --    // should move onto ScriptController    void clearDOMWindow();    String displayStringModifiedByEncoding(const String& str) const     {        return document() ? document()->displayStringModifiedByEncoding(str) : str;    }private:    void lifeSupportTimerFired(Timer<Frame>*);// === to be moved into FrameViewpublic:     void setZoomFactor(float scale, bool isTextOnly);    float zoomFactor() const;    bool isZoomFactorTextOnly() const;    bool shouldApplyTextZoom() const;    bool shouldApplyPageZoom() const;    float pageZoomFactor() const { return shouldApplyPageZoom() ? zoomFactor() : 1.0f; }    float textZoomFactor() const { return shouldApplyTextZoom() ? zoomFactor() : 1.0f; }// === to be moved into Chromepublic:    void focusWindow();    void unfocusWindow();    bool shouldClose();    void scheduleClose();    void setJSStatusBarText(const String&);    void setJSDefaultStatusBarText(const String&);    String jsStatusBarText() const;    String jsDefaultStatusBarText() const;// === to be moved into Editorpublic:    String selectedText() const;      bool findString(const String&, bool forward, bool caseFlag, bool wrapFlag, bool startInSelection);    const VisibleSelection& mark() const; // Mark, to be used as emacs uses it.    void setMark(const VisibleSelection&);    void computeAndSetTypingStyle(CSSStyleDeclaration* , EditAction = EditActionUnspecified);    String selectionStartStylePropertyValue(int stylePropertyID) const;    void applyEditingStyleToBodyElement() const;    void removeEditingStyleFromBodyElement() const;    void applyEditingStyleToElement(Element*) const;    void removeEditingStyleFromElement(Element*) const;    IntRect firstRectForRange(Range*) const;        void respondToChangedSelection(const VisibleSelection& oldSelection, bool closeTyping);    bool shouldChangeSelection(const VisibleSelection& oldSelection, const VisibleSelection& newSelection, EAffinity, bool stillSelecting) const;    RenderStyle* styleForSelectionStart(Node*& nodeToRemove) const;    unsigned markAllMatchesForText(const String&, bool caseFlag, unsigned limit);    bool markedTextMatchesAreHighlighted() const;    void setMarkedTextMatchesAreHighlighted(bool flag);    PassRefPtr<CSSComputedStyleDeclaration> selectionComputedStyle(Node*& nodeToRemove) const;    void textFieldDidBeginEditing(Element*);    void textFieldDidEndEditing(Element*);    void textDidChangeInTextField(Element*);    bool doTextFieldCommandFromEvent(Element*, KeyboardEvent*);    void textWillBeDeletedInTextField(Element* input);    void textDidChangeInTextArea(Element*);    DragImageRef dragImageForSelection();    // === to be moved into SelectionControllerpublic:    TextGranularity selectionGranularity() const;    void setSelectionGranularity(TextGranularity);    bool shouldChangeSelection(const VisibleSelection&) const;    bool shouldDeleteSelection(const VisibleSelection&) const;    void clearCaretRectIfNeeded();    void setFocusedNodeIfNeeded();    void selectionLayoutChanged();    void notifyRendererOfSelectionChange(bool userTriggered);    void invalidateSelection();    void setCaretVisible(bool = true);    void paintCaret(GraphicsContext*, int tx, int ty, const IntRect& clipRect) const;      void paintDragCaret(GraphicsContext*, int tx, int ty, const IntRect& clipRect) const;    bool isContentEditable() const; // if true, everything in frame is editable    void updateSecureKeyboardEntryIfActive();    CSSMutableStyleDeclaration* typingStyle() const;    void setTypingStyle(CSSMutableStyleDeclaration*);    void clearTypingStyle();    FloatRect selectionBounds(bool clipToVisibleContent = true) const;    void selectionTextRects(Vector<FloatRect>&, bool clipToVisibleContent = true) const;    HTMLFormElement* currentForm() const;    void revealSelection(const ScrollAlignment& = ScrollAlignment::alignCenterIfNeeded) const;    void revealCaret(const ScrollAlignment& = ScrollAlignment::alignCenterIfNeeded) const;    void setSelectionFromNone();    void setUseSecureKeyboardEntry(bool);private:    void caretBlinkTimerFired(Timer<Frame>*);public:    SelectionController* dragCaretController() const;    String searchForLabelsAboveCell(RegularExpression*, HTMLTableCellElement*);    String searchForLabelsBeforeElement(const Vector<String>& labels, Element*);    String matchLabelsAgainstElement(const Vector<String>& labels, Element*);        VisiblePosition visiblePositionForPoint(const IntPoint& framePoint);    Document* documentAtPoint(const IntPoint& windowPoint);#if PLATFORM(MAC)// === undecided, would like to consider moving to another classpublic:    NSString* searchForNSLabelsAboveCell(RegularExpression*, HTMLTableCellElement*);    NSString* searchForLabelsBeforeElement(NSArray* labels, Element*);    NSString* matchLabelsAgainstElement(NSArray* labels, Element*);#if ENABLE(DASHBOARD_SUPPORT)    NSMutableDictionary* dashboardRegionsDictionary();#endif    NSImage* selectionImage(bool forceBlackText = false) const;    NSImage* snapshotDragImage(Node*, NSRect* imageRect, NSRect* elementRect) const;    NSImage* nodeImage(Node*) const;private:        NSImage* imageFromRect(NSRect) const;// === to be moved into Editorpublic:    NSDictionary* fontAttributesForSelectionStart() const;    NSWritingDirection baseWritingDirectionForSelectionStart() const;#endif#if PLATFORM(WIN)public:    // FIXME - We should have a single version of nodeImage instead of using platform types.    HBITMAP nodeImage(Node*) const;#endifprivate:    Page* m_page;    mutable FrameTree m_treeNode;    mutable FrameLoader m_loader;    mutable RefPtr<DOMWindow> m_domWindow;    HashSet<DOMWindow*> m_liveFormerWindows;    HTMLFrameOwnerElement* m_ownerElement;    RefPtr<FrameView> m_view;    RefPtr<Document> m_doc;    ScriptController m_script;    String m_kjsStatusBarText;    String m_kjsDefaultStatusBarText;    float m_zoomFactor;    TextGranularity m_selectionGranularity;    mutable SelectionController m_selectionController;    mutable VisibleSelection m_mark;    Timer<Frame> m_caretBlinkTimer;    mutable Editor m_editor;    mutable EventHandler m_eventHandler;    mutable AnimationController m_animationController;    RefPtr<CSSMutableStyleDeclaration> m_typingStyle;    Timer<Frame> m_lifeSupportTimer;    bool m_caretVisible;    bool m_caretPaint;        bool m_highlightTextMatches;    bool m_inViewSourceMode;    bool m_needsReapplyStyles;    bool m_isDisconnected;    bool m_excludeFromTextSearch;#if FRAME_LOADS_USER_STYLESHEET    UserStyleSheetLoader* m_userStyleSheetLoader;#endif};} // namespace WebCore#endif // Frame_h

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -