mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-09 00:11:44 +00:00
Revised DrawString API to take a spacing array for character spacing control
This commit is contained in:
parent
4c30201be5
commit
859cceb62f
@ -950,8 +950,9 @@ NS_IMETHODIMP nsRenderingContextMac :: GetWidth(const PRUnichar *aString, PRUint
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
void nsRenderingContextMac :: DrawString(const char *aString, PRUint32 aLength,
|
||||
nscoord aX, nscoord aY,
|
||||
nscoord aWidth)
|
||||
nscoord aX, nscoord aY,
|
||||
nscoord aWidth,
|
||||
const nscoord* aSpacing)
|
||||
{
|
||||
PRInt32 x = aX;
|
||||
PRInt32 y = aY;
|
||||
@ -1008,7 +1009,8 @@ void nsRenderingContextMac :: DrawString(const char *aString, PRUint32 aLength,
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
void nsRenderingContextMac :: DrawString(const PRUnichar *aString, PRUint32 aLength,
|
||||
nscoord aX, nscoord aY, nscoord aWidth)
|
||||
nscoord aX, nscoord aY, nscoord aWidth,
|
||||
const nscoord* aSpacing)
|
||||
{
|
||||
nsString nsStr;
|
||||
nsStr.SetString(aString, aLength);
|
||||
@ -1020,10 +1022,11 @@ void nsRenderingContextMac :: DrawString(const PRUnichar *aString, PRUint32 aLen
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
void nsRenderingContextMac :: DrawString(const nsString& aString,
|
||||
nscoord aX, nscoord aY, nscoord aWidth)
|
||||
nscoord aX, nscoord aY, nscoord aWidth,
|
||||
const nscoord* aSpacing)
|
||||
{
|
||||
char* cStr = aString.ToNewCString();
|
||||
DrawString(cStr, aString.Length(), aX, aY, aWidth);
|
||||
DrawString(cStr, aString.Length(), aX, aY, aWidth, aSpacing);
|
||||
delete[] cStr;
|
||||
}
|
||||
|
||||
|
@ -105,9 +105,9 @@ public:
|
||||
NS_IMETHOD GetWidth(const char *aString, nscoord &aWidth);
|
||||
NS_IMETHOD GetWidth(const char* aString, PRUint32 aLength, nscoord& aWidth);
|
||||
NS_IMETHOD GetWidth(const PRUnichar *aString, PRUint32 aLength, nscoord &aWidth);
|
||||
virtual void DrawString(const char *aString, PRUint32 aLength,nscoord aX, nscoord aY,nscoord aWidth);
|
||||
virtual void DrawString(const PRUnichar *aString, PRUint32 aLength, nscoord aX, nscoord aY,nscoord aWidth);
|
||||
virtual void DrawString(const nsString& aString, nscoord aX, nscoord aY,nscoord aWidth);
|
||||
virtual void DrawString(const char *aString, PRUint32 aLength,nscoord aX, nscoord aY,nscoord aWidth, const nscoord* aSpacing);
|
||||
virtual void DrawString(const PRUnichar *aString, PRUint32 aLength, nscoord aX, nscoord aY,nscoord aWidth, const nscoord* aSpacing);
|
||||
virtual void DrawString(const nsString& aString, nscoord aX, nscoord aY,nscoord aWidth, const nscoord* aSpacing);
|
||||
virtual void DrawImage(nsIImage *aImage, nscoord aX, nscoord aY);
|
||||
virtual void DrawImage(nsIImage *aImage, nscoord aX, nscoord aY, nscoord aWidth, nscoord aHeight);
|
||||
virtual void DrawImage(nsIImage *aImage, const nsRect& aRect);
|
||||
|
@ -1151,9 +1151,11 @@ NS_IMETHODIMP nsRenderingContextUnix :: GetWidth(const PRUnichar *aString,
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void nsRenderingContextUnix :: DrawString(const char *aString, PRUint32 aLength,
|
||||
nscoord aX, nscoord aY,
|
||||
nscoord aWidth)
|
||||
void
|
||||
nsRenderingContextUnix :: DrawString(const char *aString, PRUint32 aLength,
|
||||
nscoord aX, nscoord aY,
|
||||
nscoord aWidth,
|
||||
const nscoord* aSpacing)
|
||||
{
|
||||
nscoord x = aX;
|
||||
nscoord y = aY;
|
||||
@ -1200,8 +1202,10 @@ void nsRenderingContextUnix :: DrawString(const char *aString, PRUint32 aLength,
|
||||
}
|
||||
}
|
||||
|
||||
void nsRenderingContextUnix :: DrawString(const PRUnichar *aString, PRUint32 aLength,
|
||||
nscoord aX, nscoord aY, nscoord aWidth)
|
||||
void
|
||||
nsRenderingContextUnix :: DrawString(const PRUnichar *aString, PRUint32 aLength,
|
||||
nscoord aX, nscoord aY, nscoord aWidth,
|
||||
const nscoord* aSpacing)
|
||||
{
|
||||
nscoord x = aX;
|
||||
nscoord y = aY;
|
||||
@ -1271,10 +1275,12 @@ void nsRenderingContextUnix :: DrawString(const PRUnichar *aString, PRUint32 aLe
|
||||
}
|
||||
}
|
||||
|
||||
void nsRenderingContextUnix :: DrawString(const nsString& aString,
|
||||
nscoord aX, nscoord aY, nscoord aWidth)
|
||||
void
|
||||
nsRenderingContextUnix :: DrawString(const nsString& aString,
|
||||
nscoord aX, nscoord aY, nscoord aWidth,
|
||||
const nscoord* aSpacing)
|
||||
{
|
||||
DrawString(aString.GetUnicode(), aString.Length(), aX, aY, aWidth);
|
||||
DrawString(aString.GetUnicode(), aString.Length(), aX, aY, aWidth, aSpacing);
|
||||
}
|
||||
|
||||
void nsRenderingContextUnix :: DrawImage(nsIImage *aImage, nscoord aX, nscoord aY)
|
||||
|
@ -136,11 +136,15 @@ public:
|
||||
|
||||
virtual void DrawString(const char *aString, PRUint32 aLength,
|
||||
nscoord aX, nscoord aY,
|
||||
nscoord aWidth);
|
||||
virtual void DrawString(const PRUnichar *aString, PRUint32 aLength, nscoord aX, nscoord aY,
|
||||
nscoord aWidth);
|
||||
nscoord aWidth,
|
||||
const nscoord* aSpacing);
|
||||
virtual void DrawString(const PRUnichar *aString, PRUint32 aLength,
|
||||
nscoord aX, nscoord aY,
|
||||
nscoord aWidth,
|
||||
const nscoord* aSpacing);
|
||||
virtual void DrawString(const nsString& aString, nscoord aX, nscoord aY,
|
||||
nscoord aWidth);
|
||||
nscoord aWidth,
|
||||
const nscoord* aSpacing);
|
||||
|
||||
virtual void DrawImage(nsIImage *aImage, nscoord aX, nscoord aY);
|
||||
virtual void DrawImage(nsIImage *aImage, nscoord aX, nscoord aY,
|
||||
|
@ -448,10 +448,12 @@ public:
|
||||
* @param aX Horizontal starting point of baseline
|
||||
* @param aY Vertical starting point of baseline.
|
||||
* @param aWidth Width of the underline
|
||||
* @param aSpacing inter-character spacing to apply
|
||||
*/
|
||||
virtual void DrawString(const char *aString, PRUint32 aLength,
|
||||
nscoord aX, nscoord aY,
|
||||
nscoord aWidth) = 0;
|
||||
nscoord aWidth,
|
||||
const nscoord* aSpacing = nsnull) = 0;
|
||||
|
||||
/**
|
||||
* Draw a string in the RenderingContext
|
||||
@ -460,10 +462,12 @@ public:
|
||||
* @param aX Horizontal starting point of baseline
|
||||
* @param aY Vertical starting point of baseline.
|
||||
* @param aWidth length in twips of the underline
|
||||
* @param aSpacing inter-character spacing to apply
|
||||
*/
|
||||
virtual void DrawString(const PRUnichar *aString, PRUint32 aLength,
|
||||
nscoord aX, nscoord aY,
|
||||
nscoord aWidth) = 0;
|
||||
nscoord aWidth,
|
||||
const nscoord* aSpacing = nsnull) = 0;
|
||||
|
||||
/**
|
||||
* Draw a string in the RenderingContext
|
||||
@ -471,9 +475,11 @@ public:
|
||||
* @param aX Horizontal starting point of baseline
|
||||
* @param aY Vertical starting point of baseline.
|
||||
* @param aWidth Width of the underline
|
||||
* @param aSpacing inter-character spacing to apply
|
||||
*/
|
||||
virtual void DrawString(const nsString& aString, nscoord aX, nscoord aY,
|
||||
nscoord aWidth) = 0;
|
||||
nscoord aWidth,
|
||||
const nscoord* aSpacing = nsnull) = 0;
|
||||
|
||||
/**
|
||||
* Copy an image to the RenderingContext
|
||||
|
@ -295,6 +295,44 @@ void nsTransform2D :: TransformNoXLateCoord(nscoord *ptX, nscoord *ptY)
|
||||
}
|
||||
}
|
||||
|
||||
inline PRIntn NSToIntNFloor(float aValue)
|
||||
{
|
||||
return ((0.0f <= aValue) ? PRIntn(aValue) : PRIntn(aValue - CEIL_CONST_FLOAT));
|
||||
}
|
||||
|
||||
void nsTransform2D :: ScaleXCoords(const nscoord* aSrc,
|
||||
PRUint32 aNumCoords,
|
||||
PRIntn* aDst)
|
||||
{
|
||||
|
||||
if (type != MG_2DIDENTITY)
|
||||
{
|
||||
const nscoord* end = aSrc + aNumCoords;
|
||||
float scale = m00;
|
||||
while (aSrc < end) {
|
||||
nscoord c = *aSrc++;
|
||||
*aDst++ = NSToIntNFloor(c * scale);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void nsTransform2D :: ScaleYCoords(const nscoord* aSrc,
|
||||
PRUint32 aNumCoords,
|
||||
PRIntn* aDst)
|
||||
{
|
||||
|
||||
if (type != MG_2DIDENTITY)
|
||||
{
|
||||
const nscoord* end = aSrc + aNumCoords;
|
||||
float scale = m11;
|
||||
while (aSrc < end) {
|
||||
nscoord c = *aSrc++;
|
||||
*aDst++ = NSToIntNFloor(c * scale);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void nsTransform2D :: Transform(float *ptX, float *ptY)
|
||||
{
|
||||
float x, y;
|
||||
|
@ -185,6 +185,17 @@ public:
|
||||
void Transform(float *aX, float *aY, float *aWidth, float *aHeight);
|
||||
void TransformCoord(nscoord *aX, nscoord *aY, nscoord *aWidth, nscoord *aHeight);
|
||||
|
||||
/**
|
||||
* Scale an array of X/Y coordinates by the X/Y scale factor in the
|
||||
* matrix. The scale is done as if the other coordinate were zero.
|
||||
*
|
||||
* @param aSrc Base of coordinate input array
|
||||
* @param aDst Base of coordinate output array
|
||||
* @param aNumCoords Number of coordinates to scale
|
||||
*/
|
||||
void ScaleXCoords(const nscoord* aSrc, PRUint32 aNumCoords, PRIntn* aDst);
|
||||
void ScaleYCoords(const nscoord* aSrc, PRUint32 aNumCoords, PRIntn* aDst);
|
||||
|
||||
/**
|
||||
* add a translation to a Transform via x, y pair
|
||||
*
|
||||
|
@ -1453,18 +1453,34 @@ nsRenderingContextWin :: GetWidth(const PRUnichar *aString,
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
void nsRenderingContextWin :: DrawString(const char *aString, PRUint32 aLength,
|
||||
void
|
||||
nsRenderingContextWin :: DrawString(const char *aString, PRUint32 aLength,
|
||||
nscoord aX, nscoord aY,
|
||||
nscoord aWidth)
|
||||
nscoord aWidth,
|
||||
const nscoord* aSpacing)
|
||||
{
|
||||
PRInt32 x = aX;
|
||||
PRInt32 y = aY;
|
||||
|
||||
SetupFontAndColor();
|
||||
|
||||
INT dxMem[500];
|
||||
INT* dx0;
|
||||
if (nsnull != aSpacing) {
|
||||
dx0 = dxMem;
|
||||
if (aLength > 500) {
|
||||
dx0 = new INT[aLength];
|
||||
}
|
||||
mTMatrix->ScaleXCoords(aSpacing, aLength, dx0);
|
||||
}
|
||||
|
||||
mTMatrix->TransformCoord(&x, &y);
|
||||
|
||||
::ExtTextOut(mDC, x, y, 0, NULL, aString, aLength, NULL);
|
||||
::ExtTextOut(mDC, x, y, 0, NULL, aString, aLength, aSpacing ? dx0 : NULL);
|
||||
|
||||
if ((nsnull != aSpacing) && (dx0 != dxMem)) {
|
||||
delete [] dx0;
|
||||
}
|
||||
|
||||
if (nsnull != mFontMetrics)
|
||||
{
|
||||
@ -1480,17 +1496,33 @@ void nsRenderingContextWin :: DrawString(const char *aString, PRUint32 aLength,
|
||||
}
|
||||
}
|
||||
|
||||
void nsRenderingContextWin :: DrawString(const PRUnichar *aString, PRUint32 aLength,
|
||||
nscoord aX, nscoord aY, nscoord aWidth)
|
||||
void
|
||||
nsRenderingContextWin :: DrawString(const PRUnichar *aString, PRUint32 aLength,
|
||||
nscoord aX, nscoord aY, nscoord aWidth,
|
||||
const nscoord* aSpacing)
|
||||
{
|
||||
PRInt32 x = aX;
|
||||
PRInt32 y = aY;
|
||||
|
||||
SetupFontAndColor();
|
||||
|
||||
INT dxMem[500];
|
||||
INT* dx0;
|
||||
if (nsnull != aSpacing) {
|
||||
dx0 = dxMem;
|
||||
if (aLength > 500) {
|
||||
dx0 = new INT[aLength];
|
||||
}
|
||||
mTMatrix->ScaleXCoords(aSpacing, aLength, dx0);
|
||||
}
|
||||
|
||||
mTMatrix->TransformCoord(&x, &y);
|
||||
|
||||
::ExtTextOutW(mDC, x, y, 0, NULL, aString, aLength, NULL);
|
||||
::ExtTextOutW(mDC, x, y, 0, NULL, aString, aLength, aSpacing ? dx0 : NULL);
|
||||
|
||||
if ((nsnull != aSpacing) && (dx0 != dxMem)) {
|
||||
delete [] dx0;
|
||||
}
|
||||
|
||||
if (nsnull != mFontMetrics)
|
||||
{
|
||||
@ -1506,10 +1538,12 @@ void nsRenderingContextWin :: DrawString(const PRUnichar *aString, PRUint32 aLen
|
||||
}
|
||||
}
|
||||
|
||||
void nsRenderingContextWin :: DrawString(const nsString& aString,
|
||||
nscoord aX, nscoord aY, nscoord aWidth)
|
||||
void
|
||||
nsRenderingContextWin :: DrawString(const nsString& aString,
|
||||
nscoord aX, nscoord aY, nscoord aWidth,
|
||||
const nscoord* aSpacing)
|
||||
{
|
||||
DrawString(aString.GetUnicode(), aString.Length(), aX, aY, aWidth);
|
||||
DrawString(aString.GetUnicode(), aString.Length(), aX, aY, aWidth, aSpacing);
|
||||
}
|
||||
|
||||
void nsRenderingContextWin :: DrawImage(nsIImage *aImage, nscoord aX, nscoord aY)
|
||||
|
@ -133,11 +133,15 @@ public:
|
||||
|
||||
virtual void DrawString(const char *aString, PRUint32 aLength,
|
||||
nscoord aX, nscoord aY,
|
||||
nscoord aWidth);
|
||||
virtual void DrawString(const PRUnichar *aString, PRUint32 aLength, nscoord aX, nscoord aY,
|
||||
nscoord aWidth);
|
||||
nscoord aWidth,
|
||||
const nscoord* aSpacing);
|
||||
virtual void DrawString(const PRUnichar *aString, PRUint32 aLength,
|
||||
nscoord aX, nscoord aY,
|
||||
nscoord aWidth,
|
||||
const nscoord* aSpacing);
|
||||
virtual void DrawString(const nsString& aString, nscoord aX, nscoord aY,
|
||||
nscoord aWidth);
|
||||
nscoord aWidth,
|
||||
const nscoord* aSpacing);
|
||||
|
||||
virtual void DrawImage(nsIImage *aImage, nscoord aX, nscoord aY);
|
||||
virtual void DrawImage(nsIImage *aImage, nscoord aX, nscoord aY,
|
||||
|
Loading…
x
Reference in New Issue
Block a user