gecko-dev/layout/generic/nsGfxScrollFrame.h
kin%netscape.com 9ce2f08c0b Fix for bug #17989: Selection AutoScrolling broken when using GFX Scrollbars
layout/base/src/nsRangeList.cpp
        - Added ConstrainFrameAndPointToAnchorSubtree() and various utility
          methods.
        - Modified HandleDrag() to call ConstrainFrameAndPointToAnchorSubtree().

    layout/html/base/src/nsFrame.cpp
        - Modified GetContentAndOffsetFromPoint() to skip over generated
          and anonymous content frames.

    layout/html/base/src/nsGfxScrollFrame.cpp
    layout/html/base/src/nsGfxScrollFrame.h
        - Override the default nsFrame::GetContentAndOffsetsFromPoint()
          implementation with a version that calls
          mInner->GetContentAndOffsetsFromPoint(). This prevents the
          scrollbar frames from being included in the search.

    view/src/nsScrollPortView.cpp
        - Fixed bug where GetContainerSize() was returning the size of the
          ScrollPortView instead of the ScrolledView.

r=evaughan@netscape.com
1999-11-18 19:40:52 +00:00

135 lines
5.1 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator client code.
*
* The Initial Developer of the Original Code is Netscape Communications
* Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsScrollFrame_h___
#define nsScrollFrame_h___
#include "nsHTMLContainerFrame.h"
#include "nsIAnonymousContentCreator.h"
#include "nsIBox.h"
class nsISupportsArray;
class nsGfxScrollFrameInner;
/**
* The scroll frame creates and manages the scrolling view
*
* It only supports having a single child frame that typically is an area
* frame, but doesn't have to be. The child frame must have a view, though
*
* Scroll frames don't support incremental changes, i.e. you can't replace
* or remove the scrolled frame
*/
class nsGfxScrollFrame : public nsHTMLContainerFrame,
public nsIAnonymousContentCreator,
public nsIBox {
public:
friend nsresult NS_NewGfxScrollFrame(nsIFrame** aNewFrame, nsIDocument* aDocument);
NS_IMETHOD Init(nsIPresContext& aPresContext,
nsIContent* aContent,
nsIFrame* aParent,
nsIStyleContext* aContext,
nsIFrame* aPrevInFlow);
virtual ~nsGfxScrollFrame();
// Called to set the one and only child frame. Returns NS_ERROR_INVALID_ARG
// if the child frame is NULL, and NS_ERROR_UNEXPECTED if the child list
// contains more than one frame
NS_IMETHOD SetInitialChildList(nsIPresContext& aPresContext,
nsIAtom* aListName,
nsIFrame* aChildList);
// Because there can be only one child frame, these two function return
// NS_ERROR_FAILURE
NS_IMETHOD AppendFrames(nsIPresContext& aPresContext,
nsIPresShell& aPresShell,
nsIAtom* aListName,
nsIFrame* aFrameList);
NS_IMETHOD InsertFrames(nsIPresContext& aPresContext,
nsIPresShell& aPresShell,
nsIAtom* aListName,
nsIFrame* aPrevFrame,
nsIFrame* aFrameList);
NS_IMETHOD Destroy(nsIPresContext& aPresContext);
// This function returns NS_ERROR_NOT_IMPLEMENTED
NS_IMETHOD RemoveFrame(nsIPresContext& aPresContext,
nsIPresShell& aPresShell,
nsIAtom* aListName,
nsIFrame* aOldFrame);
NS_IMETHOD DidReflow(nsIPresContext& aPresContext,
nsDidReflowStatus aStatus);
NS_IMETHOD Reflow(nsIPresContext& aPresContext,
nsHTMLReflowMetrics& aDesiredSize,
const nsHTMLReflowState& aReflowState,
nsReflowStatus& aStatus);
NS_IMETHOD Paint(nsIPresContext& aPresContext,
nsIRenderingContext& aRenderingContext,
const nsRect& aDirtyRect,
nsFramePaintLayer aWhichLayer);
NS_IMETHOD GetContentAndOffsetsFromPoint(nsIPresContext& aCX,
const nsPoint& aPoint,
nsIContent ** aNewContent,
PRInt32& aContentOffset,
PRInt32& aContentOffsetEnd,
PRBool& aBeginFrameContent);
// nsIAnonymousContentCreator
NS_IMETHOD CreateAnonymousContent(nsISupportsArray& aAnonymousItems);
// nsIBox methods
NS_IMETHOD GetBoxInfo(nsIPresContext& aPresContext, const nsHTMLReflowState& aReflowState, nsBoxInfo& aSize);
NS_IMETHOD Dirty(nsIPresContext& aPresContext, const nsHTMLReflowState& aReflowState, nsIFrame*& aIncrementalChild);
NS_IMETHOD QueryInterface(REFNSIID aIID, void** aInstancePtr);
NS_IMETHOD_(nsrefcnt) AddRef(void) { return NS_OK; }
NS_IMETHOD_(nsrefcnt) Release(void) { return NS_OK; }
/**
* Get the "type" of the frame
*
* @see nsLayoutAtoms::scrollFrame
*/
NS_IMETHOD GetFrameType(nsIAtom** aType) const;
#ifdef NS_DEBUG
NS_IMETHOD GetFrameName(nsString& aResult) const;
#endif
protected:
nsGfxScrollFrame(nsIDocument* aDocument);
virtual PRIntn GetSkipSides() const;
private:
friend class nsGfxScrollFrameInner;
nsGfxScrollFrameInner* mInner;
nsIPresContext* mPresContext; // weak reference
};
#endif /* nsScrollFrame_h___ */