Bug 370303: Cleanup in layout/forms. r+sr=roc.
git-svn-id: svn://10.0.0.236/trunk@220186 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -41,15 +41,13 @@
|
||||
#include "nsIEventStateManager.h"
|
||||
#include "nsIScrollableView.h"
|
||||
#include "nsILookAndFeel.h"
|
||||
#include "nsIViewManager.h"
|
||||
|
||||
//#define FCF_NOISY
|
||||
|
||||
const PRInt32 kSizeNotSet = -1;
|
||||
|
||||
nsFormControlFrame::nsFormControlFrame(nsStyleContext* aContext) :
|
||||
nsLeafFrame(aContext),
|
||||
mDidInit(PR_FALSE)
|
||||
nsLeafFrame(aContext)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -60,8 +58,7 @@ nsFormControlFrame::~nsFormControlFrame()
|
||||
void
|
||||
nsFormControlFrame::Destroy()
|
||||
{
|
||||
// XXXldb Do we really need to do this? Shouldn't only those frames
|
||||
// that use it do it?
|
||||
// Unregister the access key registered in reflow
|
||||
nsFormControlFrame::RegUnRegAccessKey(NS_STATIC_CAST(nsIFrame*, this), PR_FALSE);
|
||||
nsLeafFrame::Destroy();
|
||||
}
|
||||
@@ -84,55 +81,15 @@ nsFormControlFrame::QueryInterface(const nsIID& aIID, void** aInstancePtr)
|
||||
nscoord
|
||||
nsFormControlFrame::GetIntrinsicWidth()
|
||||
{
|
||||
// Intrinsic width is 144 twips. Why? I have no idea; that's what
|
||||
// it was before I touched this code, and the original checkin
|
||||
// comment is not so helpful.
|
||||
return 144;
|
||||
// Actual width is set in forms.css
|
||||
return 0;
|
||||
}
|
||||
|
||||
nscoord
|
||||
nsFormControlFrame::GetIntrinsicHeight()
|
||||
{
|
||||
// Intrinsic height is 144 twips. Why? I have no idea; that's what
|
||||
// it was before I touched this code, and the original checkin
|
||||
// comment is not so helpful.
|
||||
return 144;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsFormControlFrame::DidReflow(nsPresContext* aPresContext,
|
||||
const nsHTMLReflowState* aReflowState,
|
||||
nsDidReflowStatus aStatus)
|
||||
{
|
||||
nsresult rv = nsLeafFrame::DidReflow(aPresContext, aReflowState, aStatus);
|
||||
|
||||
|
||||
// The view is created hidden; once we have reflowed it and it has been
|
||||
// positioned then we show it.
|
||||
if (NS_FRAME_REFLOW_FINISHED == aStatus) {
|
||||
nsIView* view = GetView();
|
||||
if (view) {
|
||||
nsViewVisibility newVis = GetStyleVisibility()->IsVisible()
|
||||
? nsViewVisibility_kShow
|
||||
: nsViewVisibility_kHide;
|
||||
// only change if different.
|
||||
if (newVis != view->GetVisibility()) {
|
||||
nsIViewManager* vm = view->GetViewManager();
|
||||
if (vm) {
|
||||
vm->SetViewVisibility(view, newVis);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsFormControlFrame::SetInitialChildList(nsIAtom* aListName,
|
||||
nsIFrame* aChildList)
|
||||
{
|
||||
return NS_OK;
|
||||
// Actual width is set in forms.css
|
||||
return 0;
|
||||
}
|
||||
|
||||
NS_METHOD
|
||||
@@ -236,69 +193,3 @@ nsFormControlFrame::GetScreenHeight(nsPresContext* aPresContext,
|
||||
aHeight = aPresContext->AppUnitsToDevPixels(screen.height);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// Calculate a frame's position in screen coordinates
|
||||
nsresult
|
||||
nsFormControlFrame::GetAbsoluteFramePosition(nsPresContext* aPresContext,
|
||||
nsIFrame *aFrame,
|
||||
nsRect& aAbsoluteTwipsRect,
|
||||
nsRect& aAbsolutePixelRect)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
aAbsoluteTwipsRect = aFrame->GetRect();
|
||||
// zero these out,
|
||||
// because the GetOffsetFromView figures them out
|
||||
// XXXbz why do we need to do this, really? Will we ever fail to
|
||||
// get a containing view?
|
||||
aAbsoluteTwipsRect.x = 0;
|
||||
aAbsoluteTwipsRect.y = 0;
|
||||
|
||||
// Start with frame's offset from it it's containing view
|
||||
nsIView *view = nsnull;
|
||||
nsPoint frameOffset;
|
||||
rv = aFrame->GetOffsetFromView(frameOffset, &view);
|
||||
|
||||
if (NS_SUCCEEDED(rv) && view) {
|
||||
aAbsoluteTwipsRect.MoveTo(frameOffset);
|
||||
|
||||
nsIWidget* widget;
|
||||
// Walk up the views, looking for a widget
|
||||
do {
|
||||
// add in the offset of the view from its parent.
|
||||
aAbsoluteTwipsRect += view->GetPosition();
|
||||
|
||||
widget = view->GetWidget();
|
||||
if (widget) {
|
||||
// account for space above and to the left of the view origin.
|
||||
// the widget is aligned with view's bounds, not its origin
|
||||
|
||||
nsRect bounds = view->GetBounds();
|
||||
aAbsoluteTwipsRect.x -= bounds.x;
|
||||
aAbsoluteTwipsRect.y -= bounds.y;
|
||||
|
||||
// Add in the absolute offset of the widget.
|
||||
nsRect absBounds;
|
||||
nsRect zeroRect;
|
||||
// XXX a twip version of this would be really nice here!
|
||||
widget->WidgetToScreen(zeroRect, absBounds);
|
||||
// Convert widget coordinates to twips
|
||||
aAbsoluteTwipsRect.x += aPresContext->DevPixelsToAppUnits(absBounds.x);
|
||||
aAbsoluteTwipsRect.y += aPresContext->DevPixelsToAppUnits(absBounds.y);
|
||||
break;
|
||||
}
|
||||
|
||||
view = view->GetParent();
|
||||
} while (view);
|
||||
}
|
||||
|
||||
// convert to pixel coordinates
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
aAbsolutePixelRect.x = aPresContext->AppUnitsToDevPixels(aAbsoluteTwipsRect.x);
|
||||
aAbsolutePixelRect.y = aPresContext->AppUnitsToDevPixels(aAbsoluteTwipsRect.y);
|
||||
aAbsolutePixelRect.width = aPresContext->AppUnitsToDevPixels(aAbsoluteTwipsRect.width);
|
||||
aAbsolutePixelRect.height = aPresContext->AppUnitsToDevPixels(aAbsoluteTwipsRect.height);
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user