diff --git a/mozilla/content/html/document/src/MediaDocument.properties b/mozilla/content/html/document/src/MediaDocument.properties index b9da8282231..bb6368d24c3 100644 --- a/mozilla/content/html/document/src/MediaDocument.properties +++ b/mozilla/content/html/document/src/MediaDocument.properties @@ -34,3 +34,6 @@ MediaTitleWithFile=%S (%S Object) MediaTitleWithNoInfo=(%S Object) InvalidImage=The image \u201c%S\u201d cannot be displayed, because it contains errors. +ScaledImage=Scaled (%S%%) + +TitleWithStatus=%S - %S diff --git a/mozilla/content/html/document/src/nsImageDocument.cpp b/mozilla/content/html/document/src/nsImageDocument.cpp index 5592393818d..9cf6cfa6790 100644 --- a/mozilla/content/html/document/src/nsImageDocument.cpp +++ b/mozilla/content/html/document/src/nsImageDocument.cpp @@ -114,6 +114,11 @@ protected: void UpdateTitleAndCharset(); + float GetRatio() { + return PR_MIN((float)mVisibleWidth / mImageWidth, + (float)mVisibleHeight / mImageHeight); + } + nsCOMPtr mImageElement; PRInt32 mVisibleWidth; @@ -219,7 +224,6 @@ nsImageDocument::Init() mImageResizingEnabled = temp; } - return NS_OK; } @@ -321,15 +325,14 @@ nsImageDocument::ShrinkToFit() { if (mImageResizingEnabled) { nsCOMPtr image = do_QueryInterface(mImageElement); - - float ratio = PR_MIN((float)mVisibleWidth / mImageWidth, - (float)mVisibleHeight / mImageHeight); - image->SetWidth(NSToCoordFloor(mImageWidth * ratio)); + image->SetWidth(NSToCoordFloor(GetRatio() * mImageWidth)); mImageElement->SetAttribute(NS_LITERAL_STRING("style"), NS_LITERAL_STRING("cursor: move")); mImageIsResized = PR_TRUE; + + UpdateTitleAndCharset(); } return NS_OK; } @@ -345,6 +348,8 @@ nsImageDocument::RestoreImage() } mImageIsResized = PR_FALSE; + + UpdateTitleAndCharset(); } return NS_OK; @@ -600,6 +605,18 @@ nsImageDocument::UpdateTitleAndCharset() typeStr = mimeType; } } + + nsXPIDLString status; + if (mImageIsResized) { + nsAutoString ratioStr; + ratioStr.AppendInt(NSToCoordFloor(GetRatio() * 100)); + + const PRUnichar* formatString[1] = { ratioStr.get() }; + mStringBundle->FormatStringFromName(NS_LITERAL_STRING("ScaledImage").get(), + formatString, 1, + getter_Copies(status)); + } + static const char* const formatNames[4] = { "ImageTitleWithNeitherDimensionsNorFile", @@ -608,8 +625,8 @@ nsImageDocument::UpdateTitleAndCharset() "ImageTitleWithDimensionsAndFile", }; - nsMediaDocument::UpdateTitleAndCharset(typeStr, formatNames, - mImageWidth, mImageHeight); + nsMediaDocument::UpdateTitleAndCharset(typeStr, formatNames, + mImageWidth, mImageHeight, status); } diff --git a/mozilla/content/html/document/src/nsMediaDocument.cpp b/mozilla/content/html/document/src/nsMediaDocument.cpp index c4863171531..324246830cd 100644 --- a/mozilla/content/html/document/src/nsMediaDocument.cpp +++ b/mozilla/content/html/document/src/nsMediaDocument.cpp @@ -242,9 +242,10 @@ nsMediaDocument::StartLayout() } void -nsMediaDocument::UpdateTitleAndCharset(const nsACString& aTypeStr, - const char* const* aFormatNames, - PRInt32 aWidth, PRInt32 aHeight) +nsMediaDocument::UpdateTitleAndCharset(const nsACString& aTypeStr, + const char* const* aFormatNames, + PRInt32 aWidth, PRInt32 aHeight, + const nsAString& aStatus) { nsXPIDLString fileStr; nsCOMPtr uri = do_QueryInterface(mDocumentURL); @@ -287,14 +288,14 @@ nsMediaDocument::UpdateTitleAndCharset(const nsACString& aTypeStr, const PRUnichar *formatStrings[4] = {fileStr.get(), typeStr.get(), widthStr.get(), heightStr.get()}; NS_ConvertASCIItoUCS2 fmtName(aFormatNames[eWithDimAndFile]); - mStringBundle->FormatStringFromName(fmtName.get(), formatStrings, 4, + mStringBundle->FormatStringFromName(fmtName.get(), formatStrings, 4, getter_Copies(title)); } else { const PRUnichar *formatStrings[3] = {typeStr.get(), widthStr.get(), heightStr.get()}; NS_ConvertASCIItoUCS2 fmtName(aFormatNames[eWithDim]); - mStringBundle->FormatStringFromName(fmtName.get(), formatStrings, 3, + mStringBundle->FormatStringFromName(fmtName.get(), formatStrings, 3, getter_Copies(title)); } } @@ -303,18 +304,29 @@ nsMediaDocument::UpdateTitleAndCharset(const nsACString& aTypeStr, if (!fileStr.IsEmpty()) { const PRUnichar *formatStrings[2] = {fileStr.get(), typeStr.get()}; NS_ConvertASCIItoUCS2 fmtName(aFormatNames[eWithFile]); - mStringBundle->FormatStringFromName(fmtName.get(), formatStrings, 2, + mStringBundle->FormatStringFromName(fmtName.get(), formatStrings, 2, getter_Copies(title)); - } + } else { - const PRUnichar *formatStrings[1] = {typeStr.get()}; + const PRUnichar *formatStrings[1] = {typeStr.get()}; NS_ConvertASCIItoUCS2 fmtName(aFormatNames[eWithNoInfo]); - mStringBundle->FormatStringFromName(fmtName.get(), formatStrings, 1, + mStringBundle->FormatStringFromName(fmtName.get(), formatStrings, 1, getter_Copies(title)); } } } // set it on the document - SetTitle(title); + if (aStatus.IsEmpty()) { + SetTitle(title); + } + else { + nsXPIDLString titleWithStatus; + const nsPromiseFlatString& status = PromiseFlatString(aStatus); + const PRUnichar *formatStrings[2] = {title.get(), status.get()}; + NS_NAMED_LITERAL_STRING(fmtName, "TitleWithStatus"); + mStringBundle->FormatStringFromName(fmtName.get(), formatStrings, 2, + getter_Copies(titleWithStatus)); + SetTitle(titleWithStatus); + } } diff --git a/mozilla/content/html/document/src/nsMediaDocument.h b/mozilla/content/html/document/src/nsMediaDocument.h index dcf7d5fff58..d77b5e388c0 100644 --- a/mozilla/content/html/document/src/nsMediaDocument.h +++ b/mozilla/content/html/document/src/nsMediaDocument.h @@ -78,13 +78,14 @@ protected: // for a new subclass. aWidth and aHeight are pixels for |nsImageDocument|, // but could be in other units for other 'media', in which case you have to // define format names accordingly. - void UpdateTitleAndCharset(const nsACString& aTypeStr, + void UpdateTitleAndCharset(const nsACString& aTypeStr, const char* const* aFormatNames = sFormatNames, - PRInt32 aWidth = 0, - PRInt32 aHeight = 0); + PRInt32 aWidth = 0, + PRInt32 aHeight = 0, + const nsAString& aStatus = NS_LITERAL_STRING("")); nsCOMPtr mStringBundle; - static const char* const sFormatNames[4]; + static const char* const sFormatNames[4]; private: enum {eWithNoInfo, eWithFile, eWithDim, eWithDimAndFile};