Removed hacks that were mostly block-frame bug workarounds

This commit is contained in:
kipp%netscape.com 1998-11-14 19:26:57 +00:00
parent 11391735ba
commit 381815af96
4 changed files with 70 additions and 122 deletions

View File

@ -25,10 +25,10 @@
#include "nsIStyleContext.h"
nsresult
nsPlaceholderFrame::NewFrame(nsIFrame** aInstancePtrResult,
nsIContent* aContent,
nsIFrame* aParent,
nsIFrame* aAnchoredItem)
NS_NewPlaceholderFrame(nsIFrame** aInstancePtrResult,
nsIContent* aContent,
nsIFrame* aParent,
nsIFrame* aAnchoredItem)
{
NS_PRECONDITION(nsnull != aInstancePtrResult, "null ptr");
if (nsnull == aInstancePtrResult) {
@ -54,34 +54,6 @@ nsPlaceholderFrame::~nsPlaceholderFrame()
{
}
// XXX Major hack...
NS_IMETHODIMP
nsPlaceholderFrame::DidReflow(nsIPresContext& aPresContext, nsDidReflowStatus aStatus)
{
// XXX Floated frame isn't in the block frame's list of children so make
// sure it gets a DidReflow notification
if (nsnull != mAnchoredItem) {
nsIHTMLReflow* htmlReflow;
if (NS_SUCCEEDED(mAnchoredItem->QueryInterface(kIHTMLReflowIID, (void**)&htmlReflow))) {
htmlReflow->DidReflow(aPresContext, aStatus);
}
}
return nsFrame::DidReflow(aPresContext, aStatus);
}
// XXX Major hack...
NS_IMETHODIMP
nsPlaceholderFrame::DeleteFrame(nsIPresContext& aPresContext)
{
// XXX Delete the floated frame
if (nsnull != mAnchoredItem) {
mAnchoredItem->DeleteFrame(aPresContext);
}
return nsFrame::DeleteFrame(aPresContext);
}
NS_IMETHODIMP
nsPlaceholderFrame::Reflow(nsIPresContext& aPresContext,
nsHTMLReflowMetrics& aDesiredSize,
@ -119,16 +91,19 @@ nsPlaceholderFrame::Paint(nsIPresContext& aPresContext,
float p2t = aPresContext.GetPixelsToTwips();
aRenderingContext.SetColor(NS_RGB(0, 255, 255));
nscoord x = NSIntPixelsToTwips(-5, p2t);
aRenderingContext.FillRect(x, 0, NSIntPixelsToTwips(13, p2t), NSIntPixelsToTwips(3, p2t));
aRenderingContext.FillRect(x, 0, NSIntPixelsToTwips(13, p2t),
NSIntPixelsToTwips(3, p2t));
nscoord y = NSIntPixelsToTwips(-10, p2t);
aRenderingContext.FillRect(0, y, NSIntPixelsToTwips(3, p2t), NSIntPixelsToTwips(10, p2t));
aRenderingContext.FillRect(0, y, NSIntPixelsToTwips(3, p2t),
NSIntPixelsToTwips(10, p2t));
}
return NS_OK;
}
NS_IMETHODIMP nsPlaceholderFrame::ContentChanged(nsIPresContext* aPresContext,
nsIContent* aChild,
nsISupports* aSubContent)
NS_IMETHODIMP
nsPlaceholderFrame::ContentChanged(nsIPresContext* aPresContext,
nsIContent* aChild,
nsISupports* aSubContent)
{
NS_ASSERTION(mContent == aChild, "bad content-changed target");
@ -136,7 +111,6 @@ NS_IMETHODIMP nsPlaceholderFrame::ContentChanged(nsIPresContext* aPresContext,
if (nsnull != mAnchoredItem) {
return mAnchoredItem->ContentChanged(aPresContext, aChild, aSubContent);
}
return NS_OK;
}
@ -148,13 +122,14 @@ nsPlaceholderFrame::AttributeChanged(nsIPresContext* aPresContext,
{
// Forward the notification to the floater
if (nsnull != mAnchoredItem) {
return mAnchoredItem->AttributeChanged(aPresContext, aChild, aAttribute, aHint);
return mAnchoredItem->AttributeChanged(aPresContext, aChild,
aAttribute, aHint);
}
return NS_OK;
}
NS_IMETHODIMP nsPlaceholderFrame::ListTag(FILE* out) const
NS_IMETHODIMP
nsPlaceholderFrame::ListTag(FILE* out) const
{
fputs("*placeholder", out);
fprintf(out, "(%d)@%p", ContentIndexInContainer(this), this);

View File

@ -20,37 +20,34 @@
#include "nsFrame.h"
// Implementation of a frame that's used as a placeholder for an anchored item
/**
* Implementation of a frame that's used as a placeholder for an anchored item
*/
class nsPlaceholderFrame : public nsFrame {
public:
/**
* Create a new placeholder frame
*/
static nsresult NewFrame(nsIFrame** aInstancePtrResult,
nsIContent* aContent,
nsIFrame* aParent,
nsIFrame* aAnchoredItem = nsnull);
friend nsresult NS_NewPlaceholderFrame(nsIFrame** aInstancePtrResult,
nsIContent* aContent,
nsIFrame* aParent,
nsIFrame* aAnchoredItem = nsnull);
// Returns the associated anchored item
nsIFrame* GetAnchoredItem() const {return mAnchoredItem;}
void SetAnchoredItem(nsIFrame* aAnchoredItem) {mAnchoredItem = aAnchoredItem;}
// Get/Set the associated anchored item
nsIFrame* GetAnchoredItem() const {
return mAnchoredItem;
}
void SetAnchoredItem(nsIFrame* aAnchoredItem) {
mAnchoredItem = aAnchoredItem;
}
// nsIHTMLReflow overrides
#if 0
NS_IMETHOD FindTextRuns(nsLineLayout& aLineLayout,
nsIReflowCommand* aReflowCommand);
#endif
NS_IMETHOD Reflow(nsIPresContext& aPresContext,
nsHTMLReflowMetrics& aDesiredSize,
const nsHTMLReflowState& aReflowState,
nsReflowStatus& aStatus);
// nsIFrame overrides
NS_IMETHOD DidReflow(nsIPresContext& aPresContext,
nsDidReflowStatus aStatus);
NS_IMETHOD DeleteFrame(nsIPresContext& aPresContext);
NS_IMETHOD Paint(nsIPresContext& aPresContext,
nsIRenderingContext& aRenderingContext,
const nsRect& aDirtyRect);
@ -67,12 +64,14 @@ public:
NS_IMETHOD ListTag(FILE* out = stdout) const;
protected:
nsIFrame* mAnchoredItem;
// Constructor. Takes as arguments the content object and the Frame for
// the content parent
nsPlaceholderFrame(nsIContent* aContent, nsIFrame* aParent, nsIFrame* aAnchoredItem);
nsPlaceholderFrame(nsIContent* aContent,
nsIFrame* aParent,
nsIFrame* aAnchoredItem);
virtual ~nsPlaceholderFrame();
nsIFrame* mAnchoredItem;
};
#endif /* nsPlaceholderFrame_h___ */

View File

@ -25,10 +25,10 @@
#include "nsIStyleContext.h"
nsresult
nsPlaceholderFrame::NewFrame(nsIFrame** aInstancePtrResult,
nsIContent* aContent,
nsIFrame* aParent,
nsIFrame* aAnchoredItem)
NS_NewPlaceholderFrame(nsIFrame** aInstancePtrResult,
nsIContent* aContent,
nsIFrame* aParent,
nsIFrame* aAnchoredItem)
{
NS_PRECONDITION(nsnull != aInstancePtrResult, "null ptr");
if (nsnull == aInstancePtrResult) {
@ -54,34 +54,6 @@ nsPlaceholderFrame::~nsPlaceholderFrame()
{
}
// XXX Major hack...
NS_IMETHODIMP
nsPlaceholderFrame::DidReflow(nsIPresContext& aPresContext, nsDidReflowStatus aStatus)
{
// XXX Floated frame isn't in the block frame's list of children so make
// sure it gets a DidReflow notification
if (nsnull != mAnchoredItem) {
nsIHTMLReflow* htmlReflow;
if (NS_SUCCEEDED(mAnchoredItem->QueryInterface(kIHTMLReflowIID, (void**)&htmlReflow))) {
htmlReflow->DidReflow(aPresContext, aStatus);
}
}
return nsFrame::DidReflow(aPresContext, aStatus);
}
// XXX Major hack...
NS_IMETHODIMP
nsPlaceholderFrame::DeleteFrame(nsIPresContext& aPresContext)
{
// XXX Delete the floated frame
if (nsnull != mAnchoredItem) {
mAnchoredItem->DeleteFrame(aPresContext);
}
return nsFrame::DeleteFrame(aPresContext);
}
NS_IMETHODIMP
nsPlaceholderFrame::Reflow(nsIPresContext& aPresContext,
nsHTMLReflowMetrics& aDesiredSize,
@ -119,16 +91,19 @@ nsPlaceholderFrame::Paint(nsIPresContext& aPresContext,
float p2t = aPresContext.GetPixelsToTwips();
aRenderingContext.SetColor(NS_RGB(0, 255, 255));
nscoord x = NSIntPixelsToTwips(-5, p2t);
aRenderingContext.FillRect(x, 0, NSIntPixelsToTwips(13, p2t), NSIntPixelsToTwips(3, p2t));
aRenderingContext.FillRect(x, 0, NSIntPixelsToTwips(13, p2t),
NSIntPixelsToTwips(3, p2t));
nscoord y = NSIntPixelsToTwips(-10, p2t);
aRenderingContext.FillRect(0, y, NSIntPixelsToTwips(3, p2t), NSIntPixelsToTwips(10, p2t));
aRenderingContext.FillRect(0, y, NSIntPixelsToTwips(3, p2t),
NSIntPixelsToTwips(10, p2t));
}
return NS_OK;
}
NS_IMETHODIMP nsPlaceholderFrame::ContentChanged(nsIPresContext* aPresContext,
nsIContent* aChild,
nsISupports* aSubContent)
NS_IMETHODIMP
nsPlaceholderFrame::ContentChanged(nsIPresContext* aPresContext,
nsIContent* aChild,
nsISupports* aSubContent)
{
NS_ASSERTION(mContent == aChild, "bad content-changed target");
@ -136,7 +111,6 @@ NS_IMETHODIMP nsPlaceholderFrame::ContentChanged(nsIPresContext* aPresContext,
if (nsnull != mAnchoredItem) {
return mAnchoredItem->ContentChanged(aPresContext, aChild, aSubContent);
}
return NS_OK;
}
@ -148,13 +122,14 @@ nsPlaceholderFrame::AttributeChanged(nsIPresContext* aPresContext,
{
// Forward the notification to the floater
if (nsnull != mAnchoredItem) {
return mAnchoredItem->AttributeChanged(aPresContext, aChild, aAttribute, aHint);
return mAnchoredItem->AttributeChanged(aPresContext, aChild,
aAttribute, aHint);
}
return NS_OK;
}
NS_IMETHODIMP nsPlaceholderFrame::ListTag(FILE* out) const
NS_IMETHODIMP
nsPlaceholderFrame::ListTag(FILE* out) const
{
fputs("*placeholder", out);
fprintf(out, "(%d)@%p", ContentIndexInContainer(this), this);

View File

@ -20,37 +20,34 @@
#include "nsFrame.h"
// Implementation of a frame that's used as a placeholder for an anchored item
/**
* Implementation of a frame that's used as a placeholder for an anchored item
*/
class nsPlaceholderFrame : public nsFrame {
public:
/**
* Create a new placeholder frame
*/
static nsresult NewFrame(nsIFrame** aInstancePtrResult,
nsIContent* aContent,
nsIFrame* aParent,
nsIFrame* aAnchoredItem = nsnull);
friend nsresult NS_NewPlaceholderFrame(nsIFrame** aInstancePtrResult,
nsIContent* aContent,
nsIFrame* aParent,
nsIFrame* aAnchoredItem = nsnull);
// Returns the associated anchored item
nsIFrame* GetAnchoredItem() const {return mAnchoredItem;}
void SetAnchoredItem(nsIFrame* aAnchoredItem) {mAnchoredItem = aAnchoredItem;}
// Get/Set the associated anchored item
nsIFrame* GetAnchoredItem() const {
return mAnchoredItem;
}
void SetAnchoredItem(nsIFrame* aAnchoredItem) {
mAnchoredItem = aAnchoredItem;
}
// nsIHTMLReflow overrides
#if 0
NS_IMETHOD FindTextRuns(nsLineLayout& aLineLayout,
nsIReflowCommand* aReflowCommand);
#endif
NS_IMETHOD Reflow(nsIPresContext& aPresContext,
nsHTMLReflowMetrics& aDesiredSize,
const nsHTMLReflowState& aReflowState,
nsReflowStatus& aStatus);
// nsIFrame overrides
NS_IMETHOD DidReflow(nsIPresContext& aPresContext,
nsDidReflowStatus aStatus);
NS_IMETHOD DeleteFrame(nsIPresContext& aPresContext);
NS_IMETHOD Paint(nsIPresContext& aPresContext,
nsIRenderingContext& aRenderingContext,
const nsRect& aDirtyRect);
@ -67,12 +64,14 @@ public:
NS_IMETHOD ListTag(FILE* out = stdout) const;
protected:
nsIFrame* mAnchoredItem;
// Constructor. Takes as arguments the content object and the Frame for
// the content parent
nsPlaceholderFrame(nsIContent* aContent, nsIFrame* aParent, nsIFrame* aAnchoredItem);
nsPlaceholderFrame(nsIContent* aContent,
nsIFrame* aParent,
nsIFrame* aAnchoredItem);
virtual ~nsPlaceholderFrame();
nsIFrame* mAnchoredItem;
};
#endif /* nsPlaceholderFrame_h___ */