Fixed up cursor handling; map align parameter

This commit is contained in:
kipp 1998-04-25 18:40:47 +00:00
Родитель b5083a9b07
Коммит 36734f3ef9
1 изменённых файлов: 40 добавлений и 11 удалений

Просмотреть файл

@ -36,7 +36,9 @@
#include "nsIURL.h"
static NS_DEFINE_IID(kIHTMLDocumentIID, NS_IHTMLDOCUMENT_IID);
static NS_DEFINE_IID(kStyleMoleculeSID, NS_STYLEMOLECULE_SID);
static NS_DEFINE_IID(kStyleColorSID, NS_STYLECOLOR_SID);
static NS_DEFINE_IID(kStyleDisplaySID, NS_STYLEDISPLAY_SID);
static NS_DEFINE_IID(kStyleTextSID, NS_STYLETEXT_SID);
class ImageFrame : public nsLeafFrame {
public:
@ -86,6 +88,9 @@ public:
nsHTMLValue& aResult) const;
virtual void UnsetAttribute(nsIAtom* aAttribute);
virtual void MapAttributesInto(nsIStyleContext* aContext,
nsIPresContext* aPresContext);
PRPackedBool mIsMap;
PRUint8 mSuppress;
PRUint8 mAlign;
@ -258,27 +263,29 @@ NS_METHOD ImageFrame::GetCursorAt(nsIPresContext& aPresContext,
nsIFrame** aFrame,
PRInt32& aCursor)
{
nsStyleMolecule* mol = (nsStyleMolecule*)
mStyleContext->GetData(kStyleMoleculeSID);
if (mol->cursor != NS_STYLE_CURSOR_INHERIT) {
// If this container has a particular cursor, use it, otherwise
// let the child decide.
// The default cursor is to have no cursor
aCursor = NS_STYLE_CURSOR_INHERIT;
nsStyleColor* styleColor = (nsStyleColor*)
mStyleContext->GetData(kStyleColorSID);
if (styleColor->mCursor != NS_STYLE_CURSOR_INHERIT) {
// If we have a particular cursor, use it
*aFrame = this;
aCursor = (PRInt32) mol->cursor;
aCursor = (PRInt32) styleColor->mCursor;
}
nsIImageMap* map = GetImageMap();
if (nsnull != map) {
PRInt32 rv = NS_STYLE_CURSOR_DEFAULT;
aCursor = NS_STYLE_CURSOR_DEFAULT;
float t2p = aPresContext.GetTwipsToPixels();
nscoord x = nscoord(t2p * aPoint.x);
nscoord y = nscoord(t2p * aPoint.y);
if (NS_OK == map->IsInside(x, y)) {
rv = NS_STYLE_CURSOR_HAND;
aCursor = NS_STYLE_CURSOR_HAND;
}
NS_RELEASE(map);
return NS_OK;
}
aCursor = NS_STYLE_CURSOR_INHERIT;
return NS_OK;
}
@ -542,6 +549,28 @@ nsContentAttr ImagePart::AttributeToString(nsIAtom* aAttribute,
return ca;
}
void ImagePart::MapAttributesInto(nsIStyleContext* aContext,
nsIPresContext* aPresContext)
{
if (ALIGN_UNSET != mAlign) {
nsStyleDisplay* display = (nsStyleDisplay*)
aContext->GetData(kStyleDisplaySID);
nsStyleText* text = (nsStyleText*)
aContext->GetData(kStyleTextSID);
switch (mAlign) {
case NS_STYLE_TEXT_ALIGN_LEFT:
display->mFloats = NS_STYLE_FLOAT_LEFT;
break;
case NS_STYLE_TEXT_ALIGN_RIGHT:
display->mFloats = NS_STYLE_FLOAT_RIGHT;
break;
default:
text->mVerticalAlign = mAlign;
break;
}
}
}
nsIFrame* ImagePart::CreateFrame(nsIPresContext* aPresContext,
PRInt32 aIndexInParent,
nsIFrame* aParentFrame)