diff options
author | Pixel <pixel@nobis-crew.org> | 2009-11-04 11:56:41 -0800 |
---|---|---|
committer | Pixel <pixel@nobis-crew.org> | 2009-11-04 11:59:33 -0800 |
commit | d577d991b97ae2b5ee1af23641bcffc3f83af5b2 (patch) | |
tree | 590639d50205d1bcfaff2a7d2dc6ebf3f373c7ed /iup/srcole/tLegacy.cpp |
Initial import. Contains the im, cd and iup librairies, and a "working" Makefile for them under linux.
Diffstat (limited to 'iup/srcole/tLegacy.cpp')
-rwxr-xr-x | iup/srcole/tLegacy.cpp | 240 |
1 files changed, 240 insertions, 0 deletions
diff --git a/iup/srcole/tLegacy.cpp b/iup/srcole/tLegacy.cpp new file mode 100755 index 0000000..c310865 --- /dev/null +++ b/iup/srcole/tLegacy.cpp @@ -0,0 +1,240 @@ +// legacy.cpp + +#include <windows.h> +#include "tLegacy.h" + + +/* + * RectConvertMappings + * + * Purpose: + * Converts the contents of a rectangle from device to logical + * coordinates where the hDC defines the logical coordinates. + * + * Parameters: + * pRect LPRECT containing the rectangle to convert. + * hDC HDC describing the logical coordinate system. + * if NULL, uses a screen DC in MM_LOMETRIC. + * fToDevice BOOL TRUE to convert from uConv to device, + * FALSE to convert device to uConv. + * + * Return Value: + * None + */ + + +void RectConvertMappings(LPRECT pRect, HDC hDC, BOOL fToDevice) + { + POINT rgpt[2]; + BOOL fSysDC=FALSE; + + if (NULL==pRect) + return; + + rgpt[0].x=pRect->left; + rgpt[0].y=pRect->top; + rgpt[1].x=pRect->right; + rgpt[1].y=pRect->bottom; + + if (NULL==hDC) + { + hDC=GetDC(NULL); + SetMapMode(hDC, MM_LOMETRIC); + fSysDC=TRUE; + } + + if (fToDevice) + LPtoDP(hDC, rgpt, 2); + else + DPtoLP(hDC, rgpt, 2); + + if (fSysDC) + ReleaseDC(NULL, hDC); + + pRect->left=rgpt[0].x; + pRect->top=rgpt[0].y; + pRect->right=rgpt[1].x; + pRect->bottom=rgpt[1].y; + + return; + } + +STDAPI_(void) XformRectInHimetricToPixels(HDC hDC, LPRECT prcHiMetric + , LPRECT prcPix) + { + int iXppli; //Pixels per logical inch along width + int iYppli; //Pixels per logical inch along height + int iXextInHiMetric=(prcHiMetric->right-prcHiMetric->left); + int iYextInHiMetric=(prcHiMetric->bottom-prcHiMetric->top); + BOOL fSystemDC=FALSE; + + if (NULL==hDC || GetDeviceCaps(hDC, LOGPIXELSX) == 0) + { + hDC=GetDC(NULL); + fSystemDC=TRUE; + } + + iXppli=GetDeviceCaps (hDC, LOGPIXELSX); + iYppli=GetDeviceCaps (hDC, LOGPIXELSY); + + //We got pixel units, convert them to logical HIMETRIC along the display + prcPix->right=MAP_LOGHIM_TO_PIX(iXextInHiMetric, iXppli); + prcPix->top =MAP_LOGHIM_TO_PIX(iYextInHiMetric, iYppli); + + prcPix->left =0; + prcPix->bottom= 0; + + if (fSystemDC) + ReleaseDC(NULL, hDC); + + return; + } +/* + * INOLE_SetIconInCache + * + * Purpose: + * Stores an iconic presentation metafile in the cache. + * + * Parameters: + * pObj IUnknown * of the object. + * hMetaPict HGLOBAL containing the presentation. + * + * Return Value: + * HRESULT From IOleCache::SetData. + */ + +#if 0 +STDAPI INOLE_SetIconInCache(IUnknown *pObj, HGLOBAL hMetaPict) + { + IOleCache *pCache; + FORMATETC fe; + STGMEDIUM stm; + HRESULT hr; + + if (NULL==hMetaPict) + return ResultFromScode(E_INVALIDARG); + + if (FAILED(pObj->QueryInterface(IID_IOleCache, (void **)&pCache))) + return ResultFromScode(E_NOINTERFACE); + + SETFormatEtc(fe, CF_METAFILEPICT, DVASPECT_ICON, NULL + , TYMED_MFPICT, -1); + + stm.tymed=TYMED_MFPICT; + stm.hGlobal=hMetaPict; + stm.pUnkForRelease=NULL; + + hr=pCache->SetData(&fe, &stm, FALSE); + pCache->Release(); + + return hr; + } +#endif + + + +/* + * XformRectInPixelsToHimetric + * XformRectInHimetricToPixels + * + * Purpose: + * Convert a rectangle between pixels of a given hDC and HIMETRIC units + * as manipulated in OLE. If the hDC is NULL, then a screen DC is used + * and assumes the MM_TEXT mapping mode. + * + * Parameters: + * hDC HDC providing reference to the pixel mapping. If + * NULL, a screen DC is used. + * prcPix LPRECT containng the rectangles to convert. + * prcHiMetric + * + * Return Value: + * None + * + * NOTE: + * When displaying on the screen, Window apps display everything enlarged + * from its actual size so that it is easier to read. For example, if an + * app wants to display a 1in. horizontal line, that when printed is + * actually a 1in. line on the printed page, then it will display the line + * on the screen physically larger than 1in. This is described as a line + * that is "logically" 1in. along the display width. Windows maintains as + * part of the device-specific information about a given display device: + * LOGPIXELSX -- no. of pixels per logical in along the display width + * LOGPIXELSY -- no. of pixels per logical in along the display height + * + * The following formula converts a distance in pixels into its equivalent + * logical HIMETRIC units: + * + * DistInHiMetric=(HIMETRIC_PER_INCH * DistInPix) + * ------------------------------- + * PIXELS_PER_LOGICAL_IN + * + * Rect in Pixels (MM_TEXT): + * + * 0---------- X + * | + * | 1) ------------------ ( 2 P1=(rc.left, rc.top) + * | | | P2=(rc.right, rc.top) + * | | | P3=(rc.left, rc.bottom) + * | | | P4=(rc.right, rc.bottom) + * | | + * Y | | + * 3) ------------------ ( 4 + * + * NOTE: Origin =(P1x, P1y) + * X extent=P4x - P1x + * Y extent=P4y - P1y + * + * + * Rect in Himetric (MM_HIMETRIC): + * + * + * 1) ------------------ ( 2 P1=(rc.left, rc.top) + * Y | | P2=(rc.right, rc.top) + * | | P3=(rc.left, rc.bottom) + * | | | P4=(rc.right, rc.bottom) + * | | | + * | | | + * | 3) ------------------ ( 4 + * | + * 0---------- X + * + * NOTE: Origin =(P3x, P3y) + * X extent=P2x - P3x + * Y extent=P2y - P3y + * + * + */ + +STDAPI_(void) XformRectInPixelsToHimetric(HDC hDC, LPRECT prcPix + , LPRECT prcHiMetric) + { + int iXppli; //Pixels per logical inch along width + int iYppli; //Pixels per logical inch along height + int iXextInPix=(prcPix->right-prcPix->left); + int iYextInPix=(prcPix->bottom-prcPix->top); + BOOL fSystemDC=FALSE; + + if (NULL==hDC || GetDeviceCaps(hDC, LOGPIXELSX) == 0) + { + hDC=GetDC(NULL); + fSystemDC=TRUE; + } + + iXppli=GetDeviceCaps (hDC, LOGPIXELSX); + iYppli=GetDeviceCaps (hDC, LOGPIXELSY); + + //We got pixel units, convert them to logical HIMETRIC along the display + prcHiMetric->right=MAP_PIX_TO_LOGHIM(iXextInPix, iXppli); + prcHiMetric->top =MAP_PIX_TO_LOGHIM(iYextInPix, iYppli); + + prcHiMetric->left =0; + prcHiMetric->bottom =0; + + if (fSystemDC) + ReleaseDC(NULL, hDC); + + return; + } + + |