From 9d5509b39107fc0ab7533cd3b8c5e3b32798492b Mon Sep 17 00:00:00 2001 From: "kipp%netscape.com" Date: Wed, 29 Jul 1998 03:57:27 +0000 Subject: [PATCH] Fixed GetFontMetrics API to AddRef --- gfx/src/motif/nsRenderingContextUnix.cpp | 1 + gfx/src/windows/nsFontMetricsWin.cpp | 41 +++++++++++++++++++++++ gfx/src/windows/nsRenderingContextWin.cpp | 1 + 3 files changed, 43 insertions(+) diff --git a/gfx/src/motif/nsRenderingContextUnix.cpp b/gfx/src/motif/nsRenderingContextUnix.cpp index 752deaaf0f21..4ab4dfb48282 100644 --- a/gfx/src/motif/nsRenderingContextUnix.cpp +++ b/gfx/src/motif/nsRenderingContextUnix.cpp @@ -548,6 +548,7 @@ const nsFont& nsRenderingContextUnix :: GetFont() nsIFontMetrics* nsRenderingContextUnix :: GetFontMetrics() { + NS_IF_ADDREF(mFontMetrics); return mFontMetrics; } diff --git a/gfx/src/windows/nsFontMetricsWin.cpp b/gfx/src/windows/nsFontMetricsWin.cpp index a7d701262d4b..ec3e488d6cb1 100644 --- a/gfx/src/windows/nsFontMetricsWin.cpp +++ b/gfx/src/windows/nsFontMetricsWin.cpp @@ -40,7 +40,48 @@ nsFontMetricsWin :: ~nsFontMetricsWin() } } +#ifdef LEAK_DEBUG +nsrefcnt nsFontMetricsWin :: AddRef() +{ + NS_PRECONDITION(mRefCnt != 0, "resurrecting a dead object"); + return ++mRefCnt; +} + +nsrefcnt nsFontMetricsWin :: Release() +{ + NS_PRECONDITION(mRefCnt != 0, "too many release's"); + if (--mRefCnt == 0) { + delete this; + } + return mRefCnt; +} + +nsresult nsFontMetricsWin :: QueryInterface(REFNSIID aIID, void** aInstancePtr) +{ + if (NULL == aInstancePtr) { + return NS_ERROR_NULL_POINTER; + } + + *aInstancePtr = NULL; + + static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); + static NS_DEFINE_IID(kClassIID, kIFontMetricsIID); + if (aIID.Equals(kClassIID)) { + *aInstancePtr = (void*) this; + mRefCnt++; + return NS_OK; + } + if (aIID.Equals(kISupportsIID)) { + *aInstancePtr = (void*) ((nsISupports*)this); + AddRef(); + return NS_OK; + } + return NS_NOINTERFACE; +} +#else NS_IMPL_ISUPPORTS(nsFontMetricsWin, kIFontMetricsIID) +#endif + // Note: The presentation context has a reference to this font // metrics, therefore avoid circular references by not AddRef'ing the diff --git a/gfx/src/windows/nsRenderingContextWin.cpp b/gfx/src/windows/nsRenderingContextWin.cpp index e3d7c83e4c17..c9f381d44651 100644 --- a/gfx/src/windows/nsRenderingContextWin.cpp +++ b/gfx/src/windows/nsRenderingContextWin.cpp @@ -583,6 +583,7 @@ const nsFont& nsRenderingContextWin :: GetFont() nsIFontMetrics* nsRenderingContextWin :: GetFontMetrics() { + NS_IF_ADDREF(mFontMetrics); return mFontMetrics; }