added tst9, improvements to <iframe>
git-svn-id: svn://10.0.0.236/trunk@4041 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
9aca26fbdf
commit
4f49b39027
@ -20,6 +20,7 @@
|
||||
#include "nsLeafFrame.h"
|
||||
#include "nsIWebWidget.h"
|
||||
#include "nsIPresContext.h"
|
||||
#include "nsIPresShell.h"
|
||||
#include "nsHTMLIIDs.h"
|
||||
#include "nsRepository.h"
|
||||
#include "nsIStreamListener.h"
|
||||
@ -27,12 +28,19 @@
|
||||
#include "nsIDocument.h"
|
||||
#include "nsIWebFrame.h"
|
||||
#include "nsIView.h"
|
||||
#include "nsIViewManager.h"
|
||||
#include "nsWidgetsCID.h"
|
||||
#include "nsViewsCID.h"
|
||||
#include "nsHTMLAToms.h"
|
||||
|
||||
static NS_DEFINE_IID(kIStreamListenerIID, NS_ISTREAMNOTIFICATION_IID);
|
||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||
static NS_DEFINE_IID(kIWebWidgetIID, NS_IWEBWIDGET_IID);
|
||||
static NS_DEFINE_IID(kIWebFrameIID, NS_IWEBFRAME_IID);
|
||||
static NS_DEFINE_IID(kCWebWidgetCID, NS_WEBWIDGET_CID);
|
||||
static NS_DEFINE_IID(kIViewIID, NS_IVIEW_IID);
|
||||
static NS_DEFINE_IID(kCViewCID, NS_VIEW_CID);
|
||||
static NS_DEFINE_IID(kCChildCID, NS_CHILD_CID);
|
||||
|
||||
// XXX temporary until doc manager/loader is in place
|
||||
class TempObserver : public nsIStreamListener
|
||||
@ -97,7 +105,7 @@ protected:
|
||||
const nsReflowState& aReflowState,
|
||||
nsReflowMetrics& aDesiredSize);
|
||||
|
||||
void CreateWebWidget(nscoord aWidgth, nscoord aHeight, nsString& aURL);
|
||||
void CreateWebWidget(nsSize aSize, nsString& aURL);
|
||||
|
||||
nsIWebWidget* mWebWidget;
|
||||
|
||||
@ -113,6 +121,9 @@ public:
|
||||
nsIStyleContext* aStyleContext,
|
||||
nsIFrame*& aResult);
|
||||
|
||||
void GetSize(float aPixelsToTwips, nsSize& aSize);
|
||||
PRBool GetURL(nsString& aURLSpec);
|
||||
|
||||
#if 0
|
||||
virtual nsContentAttr GetAttribute(nsIAtom* aAttribute,
|
||||
nsHTMLValue& aValue) const;
|
||||
@ -123,7 +134,7 @@ public:
|
||||
protected:
|
||||
nsHTMLIFrame(nsIAtom* aTag);
|
||||
virtual ~nsHTMLIFrame();
|
||||
|
||||
|
||||
friend nsresult NS_NewHTMLIFrame(nsIHTMLContent** aInstancePtrResult,
|
||||
nsIAtom* aTag);
|
||||
|
||||
@ -205,51 +216,13 @@ float nsHTMLIFrameFrame::GetTwipsToPixels()
|
||||
NS_METHOD
|
||||
nsHTMLIFrameFrame::MoveTo(nscoord aX, nscoord aY)
|
||||
{
|
||||
printf("MoveTo %d %d \n", aX, aY);
|
||||
if ((aX != mRect.x) || (aY != mRect.y)) {
|
||||
mRect.x = aX;
|
||||
mRect.y = aY;
|
||||
if (mWebWidget) {
|
||||
float t2p = GetTwipsToPixels();
|
||||
mWebWidget->Move(NS_TO_INT_ROUND(t2p * aX),
|
||||
NS_TO_INT_ROUND(t2p * aY));
|
||||
}
|
||||
#if 0
|
||||
// Let the view know
|
||||
nsIView* view = nsnull;
|
||||
GetView(view);
|
||||
if (nsnull != view) {
|
||||
// Position view relative to it's parent, not relative to our
|
||||
// parent frame (our parent frame may not have a view). Also,
|
||||
// inset the view by the border+padding if present
|
||||
nsIView* parentWithView;
|
||||
nsPoint origin;
|
||||
GetOffsetFromView(origin, parentWithView);
|
||||
view->SetPosition(origin.x, origin.y);
|
||||
NS_IF_RELEASE(parentWithView);
|
||||
NS_RELEASE(view);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
return NS_OK;
|
||||
return nsLeafFrame::MoveTo(aX, aY);
|
||||
}
|
||||
|
||||
NS_METHOD
|
||||
nsHTMLIFrameFrame::SizeTo(nscoord aWidth, nscoord aHeight)
|
||||
{
|
||||
mRect.width = aWidth;
|
||||
mRect.height = aHeight;
|
||||
#if 0
|
||||
// Let the view know the correct size
|
||||
nsIView* view = nsnull;
|
||||
GetView(view);
|
||||
if (nsnull != view) {
|
||||
// XXX combo boxes need revision, they cannot have their height altered
|
||||
view->SetDimensions(aWidth, aHeight);
|
||||
NS_RELEASE(view);
|
||||
}
|
||||
#endif
|
||||
return NS_OK;
|
||||
return nsLeafFrame::SizeTo(aWidth, aWidth);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
@ -257,7 +230,7 @@ nsHTMLIFrameFrame::Paint(nsIPresContext& aPresContext,
|
||||
nsIRenderingContext& aRenderingContext,
|
||||
const nsRect& aDirtyRect)
|
||||
{
|
||||
//mWebWidget->Show();
|
||||
mWebWidget->Show();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -277,8 +250,9 @@ void TempMakeAbsURL(nsIContent* aContent, nsString& aRelURL, nsString& aAbsURL)
|
||||
NS_IF_RELEASE(docURL);
|
||||
}
|
||||
|
||||
void nsHTMLIFrameFrame::CreateWebWidget(nscoord aWidth, nscoord aHeight, nsString& aURL)
|
||||
void nsHTMLIFrameFrame::CreateWebWidget(nsSize aSize, nsString& aURL)
|
||||
{
|
||||
// create the web widget
|
||||
NSRepository::CreateInstance(kCWebWidgetCID, nsnull, kIWebWidgetIID, (void**)&mWebWidget);
|
||||
|
||||
if (nsnull == mWebWidget) {
|
||||
@ -287,15 +261,16 @@ void nsHTMLIFrameFrame::CreateWebWidget(nscoord aWidth, nscoord aHeight, nsStrin
|
||||
}
|
||||
nsresult result;
|
||||
|
||||
// Get the parent web widget
|
||||
// Get the parent web widget, set the parentage
|
||||
nsIFrame* parent;
|
||||
GetGeometricParent(parent);
|
||||
GetGeometricParent(parent); // don't need to release
|
||||
nsIWebWidget* parentWebWidget = nsnull;
|
||||
while (nsnull != parent) {
|
||||
nsIWebFrame* webFrame;
|
||||
nsIWebFrame* webFrame;
|
||||
result = parent->QueryInterface(kIWebFrameIID, (void**)&webFrame);
|
||||
if (NS_OK == result) {
|
||||
parentWebWidget = webFrame->GetWebWidget();
|
||||
NS_RELEASE(webFrame);
|
||||
break;
|
||||
}
|
||||
parent->GetGeometricParent(parent);
|
||||
@ -305,30 +280,50 @@ void nsHTMLIFrameFrame::CreateWebWidget(nscoord aWidth, nscoord aHeight, nsStrin
|
||||
}
|
||||
mWebWidget->SetContainer(parentWebWidget);
|
||||
|
||||
// Get the view manager, conversion
|
||||
float t2p = 0.0f;
|
||||
nsIViewManager* viewMan = nsnull;
|
||||
|
||||
nsIPresContext* presContext = parentWebWidget->GetPresContext();
|
||||
t2p = presContext->GetTwipsToPixels();
|
||||
nsIPresShell *presShell = presContext->GetShell();
|
||||
viewMan = presShell->GetViewManager();
|
||||
NS_RELEASE(presShell);
|
||||
NS_RELEASE(presContext);
|
||||
NS_RELEASE(parentWebWidget);
|
||||
|
||||
float t2p = presContext->GetTwipsToPixels();
|
||||
|
||||
nsIView* parentWithView;
|
||||
// create, init, set the parent of the view
|
||||
nsIView* view;
|
||||
result = NSRepository::CreateInstance(kCViewCID, nsnull, kIViewIID,
|
||||
(void **)&view);
|
||||
if (NS_OK != result) {
|
||||
NS_ASSERTION(0, "Could not create view for nsHTMLIFrame");
|
||||
return;
|
||||
}
|
||||
|
||||
nsIView* parView;
|
||||
nsPoint origin;
|
||||
GetOffsetFromView(origin, parentWithView);
|
||||
//view->SetPosition(origin.x, origin.y);
|
||||
NS_IF_RELEASE(parentWithView);
|
||||
//NS_RELEASE(view);
|
||||
GetOffsetFromView(origin, parView);
|
||||
nsRect viewBounds(origin.x, origin.y, aSize.width, aSize.height);
|
||||
|
||||
|
||||
nsRect rect(NS_TO_INT_ROUND(origin.x * t2p), NS_TO_INT_ROUND(origin.y * t2p),
|
||||
NS_TO_INT_ROUND(aWidth * t2p), NS_TO_INT_ROUND(aHeight * t2p));
|
||||
nsIWidget* parentWin;
|
||||
GetWindow(parentWin);
|
||||
mWebWidget->Init(parentWin->GetNativeData(NS_NATIVE_WINDOW), rect);
|
||||
NS_IF_RELEASE(parentWin);
|
||||
result = view->Init(viewMan, viewBounds, parView, &kCChildCID);
|
||||
viewMan->InsertChild(parView, view, 0);
|
||||
NS_RELEASE(viewMan);
|
||||
NS_RELEASE(parView);
|
||||
|
||||
// init the web widget
|
||||
nsIWidget* widget = view->GetWidget();
|
||||
NS_RELEASE(view);
|
||||
nsRect webBounds(0, 0, NS_TO_INT_ROUND(aSize.width * t2p),
|
||||
NS_TO_INT_ROUND(aSize.height * t2p));
|
||||
mWebWidget->Init(widget->GetNativeData(NS_NATIVE_WINDOW), webBounds);
|
||||
NS_RELEASE(widget);
|
||||
|
||||
// load the document
|
||||
nsString absURL;
|
||||
TempMakeAbsURL(mContent, aURL, absURL);
|
||||
mWebWidget->LoadURL(absURL, mTempObserver);
|
||||
//mWebWidget->Show();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
@ -340,8 +335,11 @@ nsHTMLIFrameFrame::Reflow(nsIPresContext* aPresContext,
|
||||
GetDesiredSize(aPresContext, aReflowState, aDesiredSize);
|
||||
|
||||
if (nsnull == mWebWidget) {
|
||||
nsAutoString url("test9a.html");
|
||||
CreateWebWidget(aDesiredSize.width, aDesiredSize.height, url);
|
||||
nsHTMLIFrame* content = (nsHTMLIFrame*)mContent;
|
||||
nsAutoString url;
|
||||
content->GetURL(url);
|
||||
nsSize size(aDesiredSize.width, aDesiredSize.height);
|
||||
CreateWebWidget(size, url);
|
||||
mWebWidget->Show();
|
||||
}
|
||||
aStatus = NS_FRAME_COMPLETE;
|
||||
@ -353,9 +351,10 @@ nsHTMLIFrameFrame::GetDesiredSize(nsIPresContext* aPresContext,
|
||||
const nsReflowState& aReflowState,
|
||||
nsReflowMetrics& aDesiredSize)
|
||||
{
|
||||
float p2t = aPresContext->GetPixelsToTwips();
|
||||
aDesiredSize.width = (int) (p2t * 200);
|
||||
aDesiredSize.height = (int) (p2t * 200);
|
||||
nsSize size;
|
||||
((nsHTMLIFrame*)mContent)->GetSize(aPresContext->GetPixelsToTwips(), size);
|
||||
aDesiredSize.width = size.width;
|
||||
aDesiredSize.height = size.height;
|
||||
aDesiredSize.ascent = aDesiredSize.height;
|
||||
aDesiredSize.descent = 0;
|
||||
}
|
||||
@ -384,6 +383,52 @@ nsHTMLIFrame::CreateFrame(nsIPresContext* aPresContext,
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void nsHTMLIFrame::GetSize(float aPixelsToTwips, nsSize& aSize)
|
||||
{
|
||||
aSize.width = 200;
|
||||
aSize.height = 200;
|
||||
|
||||
PRInt32 status;
|
||||
nsHTMLValue htmlVal;
|
||||
nsAutoString stringVal;
|
||||
PRInt32 intVal;
|
||||
|
||||
if (eContentAttr_HasValue == (GetAttribute(nsHTMLAtoms::width, htmlVal))) {
|
||||
if (eHTMLUnit_String == htmlVal.GetUnit()) {
|
||||
htmlVal.GetStringValue(stringVal);
|
||||
intVal = stringVal.ToInteger(&status);
|
||||
if (NS_OK == status) {
|
||||
aSize.width = intVal;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (eContentAttr_HasValue == (GetAttribute(nsHTMLAtoms::height, htmlVal))) {
|
||||
if (eHTMLUnit_String == htmlVal.GetUnit()) {
|
||||
htmlVal.GetStringValue(stringVal);
|
||||
intVal = stringVal.ToInteger(&status);
|
||||
if (NS_OK == status) {
|
||||
aSize.height = intVal;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
aSize.width = (nscoord)(aSize.width * aPixelsToTwips + 0.5);
|
||||
aSize.height = (nscoord)(aSize.height * aPixelsToTwips + 0.5);
|
||||
}
|
||||
|
||||
PRBool nsHTMLIFrame::GetURL(nsString& aURLSpec)
|
||||
{
|
||||
nsHTMLValue value;
|
||||
if (eContentAttr_HasValue == (GetAttribute(nsHTMLAtoms::src, value))) {
|
||||
if (eHTMLUnit_String == value.GetUnit()) {
|
||||
value.GetStringValue(aURLSpec);
|
||||
return PR_TRUE;
|
||||
}
|
||||
}
|
||||
aURLSpec.SetLength(0);
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
nsresult
|
||||
NS_NewHTMLIFrame(nsIHTMLContent** aInstancePtrResult,
|
||||
nsIAtom* aTag)
|
||||
|
||||
@ -140,6 +140,8 @@ install:: $(TARGETS)
|
||||
$(INSTALL) samples/test8siz.html $(DIST)/bin/res/samples
|
||||
$(INSTALL) samples/test8sca.html $(DIST)/bin/res/samples
|
||||
$(INSTALL) samples/test8tab.html $(DIST)/bin/res/samples
|
||||
$(INSTALL) samples/test9.html $(DIST)/bin/res/samples
|
||||
$(INSTALL) samples/test9a.html $(DIST)/bin/res/samples
|
||||
$(INSTALL) samples/raptor.jpg $(DIST)/bin/res/samples
|
||||
$(INSTALL) samples/Anieyes.gif $(DIST)/bin/res/samples
|
||||
$(INSTALL) samples/gear1.gif $(DIST)/bin/res/samples
|
||||
@ -157,6 +159,11 @@ clobber::
|
||||
rm -f $(DIST)/bin/res/samples/test6.html
|
||||
rm -f $(DIST)/bin/res/samples/test7.html
|
||||
rm -f $(DIST)/bin/res/samples/test8.html
|
||||
rm -f $(DIST)/bin/res/samples/test8siz.html
|
||||
rm -f $(DIST)/bin/res/samples/test8sca.html
|
||||
rm -f $(DIST)/bin/res/samples/test8tab.html
|
||||
rm -f $(DIST)/bin/res/samples/test9.html
|
||||
rm -f $(DIST)/bin/res/samples/test9a.html
|
||||
rm -f $(DIST)/bin/res/samples/raptor.jpg
|
||||
rm -f $(DIST)/bin/res/samples/Anieyes.gif
|
||||
rm -f $(DIST)/bin/res/samples/gear1.gif
|
||||
|
||||
@ -77,6 +77,8 @@ install:: $(PROGRAM)
|
||||
$(MAKE_INSTALL) samples\test8siz.html $(DIST)\bin\res\samples
|
||||
$(MAKE_INSTALL) samples\test8sca.html $(DIST)\bin\res\samples
|
||||
$(MAKE_INSTALL) samples\test8tab.html $(DIST)\bin\res\samples
|
||||
$(MAKE_INSTALL) samples\test9.html $(DIST)\bin\res\samples
|
||||
$(MAKE_INSTALL) samples\test9a.html $(DIST)\bin\res\samples
|
||||
$(MAKE_INSTALL) samples\raptor.jpg $(DIST)\bin\res\samples
|
||||
$(MAKE_INSTALL) samples\Anieyes.gif $(DIST)\bin\res\samples
|
||||
$(MAKE_INSTALL) samples\gear1.gif $(DIST)\bin\res\samples
|
||||
@ -94,6 +96,11 @@ clobber::
|
||||
rm -f $(DIST)\bin\res\samples\test6.html
|
||||
rm -f $(DIST)\bin\res\samples\test7.html
|
||||
rm -f $(DIST)\bin\res\samples\test8.html
|
||||
rm -f $(DIST)\bin\res\samples\test8siz.html
|
||||
rm -f $(DIST)\bin\res\samples\test8sca.html
|
||||
rm -f $(DIST)\bin\res\samples\test8tab.html
|
||||
rm -f $(DIST)\bin\res\samples\test9.html
|
||||
rm -f $(DIST)\bin\res\samples\test9a.html
|
||||
rm -f $(DIST)\bin\res\samples\raptor.jpg
|
||||
rm -f $(DIST)\bin\res\samples\Anieyes.gif
|
||||
rm -f $(DIST)\bin\res\samples\gear1.gif
|
||||
|
||||
@ -948,6 +948,7 @@ nsEventStatus nsViewer::ProcessMenu(PRUint32 aId, WindowData* wd)
|
||||
case VIEWER_DEMO6:
|
||||
case VIEWER_DEMO7:
|
||||
case VIEWER_DEMO8:
|
||||
case VIEWER_DEMO9:
|
||||
if ((nsnull != wd) && (nsnull != wd->ww)) {
|
||||
PRIntn ix = aId - VIEWER_DEMO0;
|
||||
char* url = new char[500];
|
||||
|
||||
@ -35,23 +35,24 @@
|
||||
#define VIEWER_DEMO6 40017
|
||||
#define VIEWER_DEMO7 40018
|
||||
#define VIEWER_DEMO8 40019
|
||||
#define VIEWER_DEMO9 40020
|
||||
|
||||
#define VIEWER_VISUAL_DEBUGGING 40020
|
||||
#define VIEWER_REFLOW_TEST 40021
|
||||
#define VIEWER_DUMP_CONTENT 40022
|
||||
#define VIEWER_DUMP_FRAMES 40023
|
||||
#define VIEWER_DUMP_VIEWS 40024
|
||||
#define VIEWER_DUMP_STYLE_SHEETS 40025
|
||||
#define VIEWER_DUMP_STYLE_CONTEXTS 40026
|
||||
#define VIEWER_DEBUGROBOT 40027
|
||||
#define VIEWER_SHOW_CONTENT_SIZE 40028
|
||||
#define VIEWER_SHOW_FRAME_SIZE 40029
|
||||
#define VIEWER_SHOW_STYLE_SIZE 40030
|
||||
#define VIEWER_VISUAL_DEBUGGING 40021
|
||||
#define VIEWER_REFLOW_TEST 40022
|
||||
#define VIEWER_DUMP_CONTENT 40023
|
||||
#define VIEWER_DUMP_FRAMES 40024
|
||||
#define VIEWER_DUMP_VIEWS 40025
|
||||
#define VIEWER_DUMP_STYLE_SHEETS 40026
|
||||
#define VIEWER_DUMP_STYLE_CONTEXTS 40027
|
||||
#define VIEWER_DEBUGROBOT 40028
|
||||
#define VIEWER_SHOW_CONTENT_SIZE 40029
|
||||
#define VIEWER_SHOW_FRAME_SIZE 40030
|
||||
#define VIEWER_SHOW_STYLE_SIZE 40031
|
||||
|
||||
// Note: must be in ascending sequential order
|
||||
#define VIEWER_ONE_COLUMN 40031
|
||||
#define VIEWER_TWO_COLUMN 40032
|
||||
#define VIEWER_THREE_COLUMN 40033
|
||||
#define VIEWER_ONE_COLUMN 40032
|
||||
#define VIEWER_TWO_COLUMN 40033
|
||||
#define VIEWER_THREE_COLUMN 40034
|
||||
|
||||
#define JS_CONSOLE 40100
|
||||
|
||||
|
||||
@ -5,6 +5,8 @@
|
||||
<body>
|
||||
|
||||
<H1>Example 9: Frames</H1>
|
||||
before<iframe></iframe>
|
||||
hello<iframe width=250 height=250 src=test1.html></iframe>
|
||||
|
||||
<iframe width=250 height=250 src=test2.html></iframe>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -1,47 +1,7 @@
|
||||
<html>
|
||||
<body>
|
||||
<form>
|
||||
<input type=text size=5>
|
||||
</form>
|
||||
this is the contents of bar1
|
||||
<BR>
|
||||
this is the contents of bar2
|
||||
<BR>
|
||||
this is the contents of bar3
|
||||
<BR>
|
||||
this is the contents of bar4
|
||||
<BR>
|
||||
this is the contents of bar5
|
||||
<BR>
|
||||
this is the contents of bar6
|
||||
<BR>
|
||||
this is the contents of bar7
|
||||
<BR>
|
||||
this is the contents of bar8
|
||||
<BR>
|
||||
this is the contents of bar9
|
||||
<BR>
|
||||
this is the contents of bar10
|
||||
<BR>
|
||||
this is the contents of bar11
|
||||
<BR>
|
||||
this is the contents of bar12
|
||||
<BR>
|
||||
this is the contents of bar13
|
||||
<BR>
|
||||
this is the contents of bar14
|
||||
<BR>
|
||||
this is the contents of bar15
|
||||
<BR>
|
||||
this is the contents of bar16
|
||||
<BR>
|
||||
this is the contents of bar17
|
||||
<BR>
|
||||
this is the contents of bar17
|
||||
<BR>
|
||||
this is the contents of bar19
|
||||
<BR>
|
||||
this is the contents of bar20
|
||||
<BR>
|
||||
a frame within a frame
|
||||
|
||||
<iframe src=test5.html width=150 height=150></iframe>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -36,7 +36,8 @@ VIEWER MENU DISCARDABLE
|
||||
MENUITEM "demo #6", VIEWER_DEMO6
|
||||
MENUITEM "demo #7", VIEWER_DEMO7
|
||||
MENUITEM "demo #8", VIEWER_DEMO8
|
||||
}
|
||||
MENUITEM "demo #9", VIEWER_DEMO9
|
||||
}
|
||||
POPUP "Print &Preview"
|
||||
{
|
||||
MENUITEM "One Column", VIEWER_ONE_COLUMN
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user