You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
178 lines
4.8 KiB
178 lines
4.8 KiB
// cutil.h
|
|
//
|
|
// file to put misc utility classes implementation
|
|
//
|
|
#ifndef CUTIL_H
|
|
#define CUTIL_H
|
|
|
|
#include "private.h"
|
|
#include "regimx.h"
|
|
|
|
class CDocStatus
|
|
{
|
|
public:
|
|
CDocStatus(ITfContext *pic)
|
|
{
|
|
cpic = pic;
|
|
}
|
|
|
|
BOOL IsReadOnly()
|
|
{
|
|
TF_STATUS ts;
|
|
HRESULT hr = cpic->GetStatus(&ts);
|
|
if (S_OK == hr)
|
|
{
|
|
if (TF_SD_READONLY & ts.dwDynamicFlags)
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
private:
|
|
CComPtr<ITfContext> cpic;
|
|
};
|
|
|
|
class __declspec(novtable) CLangProfileUtil : public ITfFnLangProfileUtil
|
|
{
|
|
public:
|
|
CLangProfileUtil()
|
|
{
|
|
m_fProfileInit = FALSE;
|
|
m_langidDefault = 0xFFFF;
|
|
m_uiUseSAPIForLangDetection = 0;
|
|
}
|
|
|
|
virtual ~CLangProfileUtil();
|
|
|
|
// ITfFnLangProfileUtil method
|
|
STDMETHODIMP RegisterActiveProfiles(void);
|
|
STDMETHODIMP IsProfileAvailableForLang(LANGID langid, BOOL *pfAvailable);
|
|
|
|
// ITfFunction method
|
|
STDMETHODIMP GetDisplayName(BSTR *pbstrName);
|
|
|
|
// private APIs
|
|
HRESULT _EnsureProfiles(BOOL fRegister, BOOL *pfEnabled = NULL);
|
|
HRESULT _RegisterAProfile(HINSTANCE hInst, REFCLSID rclsid, const REGTIPLANGPROFILE *plp);
|
|
HRESULT _GetProfileLangID(LANGID *plangid);
|
|
static const REGTIPLANGPROFILE *_GetSPTIPProfileForLang(LANGID langid);
|
|
virtual BOOL _DictationEnabled(LANGID *plangidRequested = NULL);
|
|
BOOL _IsDictationActiveForLang(LANGID langidReq);
|
|
BOOL _IsDictationEnabledForLang(LANGID langidReq, BOOL fUseDefault = FALSE);
|
|
BOOL _IsDictationEnabledForLangSAPI(LANGID langidReq, BOOL fUseDefault);
|
|
LONG _IsDictationEnabledForLangInReg(LANGID langidReq, BOOL fUseDefault, BOOL *pfEnabled);
|
|
|
|
BOOL _IsAnyProfileEnabled();
|
|
BOOL _fUseSAPIForLanguageDetection(void);
|
|
BOOL _fUserRemovedProfile(void);
|
|
BOOL _fUserInitializedProfile(void);
|
|
BOOL _SetUserInitializedProfile(void);
|
|
|
|
void _ResetDefaultLang() {m_langidDefault = 0xFFFF; }
|
|
LANGID _GetLangIdFromRecognizerToken(HKEY hkeyToken);
|
|
|
|
CComPtr<ITfInputProcessorProfiles> m_cpProfileMgr;
|
|
|
|
typedef struct {
|
|
DWORD langid;
|
|
DWORD dwStat;
|
|
DWORD lidOverRidden;
|
|
} LANGPROFILESTAT ;
|
|
|
|
BOOL m_fProfileInit;
|
|
LANGID m_langidDefault;
|
|
UINT m_uiUseSAPIForLangDetection;
|
|
|
|
//
|
|
// this is an array of installed recognizers in their langid
|
|
//
|
|
CStructArray<LANGID> m_langidRecognizers;
|
|
};
|
|
|
|
|
|
typedef enum
|
|
{
|
|
DA_COLOR_AWARE,
|
|
DA_COLOR_UNAWARE
|
|
} ColorType;
|
|
|
|
class __declspec(novtable) CColorUtil
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
CColorUtil() {m_cBitsPixelScreen = 0; m_fHighContrast =0;}
|
|
COLORREF col( int r1, COLORREF col1, int r2, COLORREF col2 )
|
|
{
|
|
int sum = r1 + r2;
|
|
|
|
Assert( sum == 10 || sum == 100 || sum == 1000 );
|
|
int r = (r1 * GetRValue(col1) + r2 * GetRValue(col2) + sum/2) / sum;
|
|
int g = (r1 * GetGValue(col1) + r2 * GetGValue(col2) + sum/2) / sum;
|
|
int b = (r1 * GetBValue(col1) + r2 * GetBValue(col2) + sum/2) / sum;
|
|
return RGB( r, g, b );
|
|
|
|
}
|
|
COLORREF GetNewLookColor(ColorType ct = DA_COLOR_AWARE)
|
|
{
|
|
InitColorInfo();
|
|
|
|
COLORREF cr;
|
|
if (m_cBitsPixelScreen < 8 || m_fHighContrast == TRUE)
|
|
{
|
|
cr = GetSysColor( COLOR_HIGHLIGHT );
|
|
}
|
|
else if (ct == DA_COLOR_AWARE)
|
|
{
|
|
cr = col( 50, GetSysColor( COLOR_HIGHLIGHT ),
|
|
50, GetSysColor( COLOR_WINDOW ) );
|
|
}
|
|
else
|
|
{
|
|
cr = col( 80, GetSysColor( COLOR_INFOBK ),
|
|
20, GetSysColor(COLOR_3DSHADOW) );
|
|
}
|
|
return cr;
|
|
}
|
|
|
|
void InitColorInfo(void)
|
|
{
|
|
// do nothing if it's initialized already
|
|
if (m_cBitsPixelScreen) return;
|
|
|
|
HIGHCONTRAST hicntr = {0};
|
|
HDC hDC = CreateDC("DISPLAY", NULL, NULL, NULL);
|
|
|
|
// device caps
|
|
m_cBitsPixelScreen = GetDeviceCaps( hDC, BITSPIXEL );
|
|
|
|
// system paramater info
|
|
hicntr.cbSize = sizeof(HIGHCONTRAST);
|
|
SystemParametersInfo( SPI_GETHIGHCONTRAST, sizeof(HIGHCONTRAST), &hicntr, 0 );
|
|
|
|
m_fHighContrast = ((hicntr.dwFlags & HCF_HIGHCONTRASTON) != 0);
|
|
|
|
|
|
DeleteDC( hDC );
|
|
}
|
|
|
|
COLORREF GetTextColor()
|
|
{
|
|
return m_fHighContrast ? GetSysColor(COLOR_HIGHLIGHTTEXT) : GetSysColor(COLOR_WINDOWTEXT);
|
|
}
|
|
|
|
private:
|
|
int m_cBitsPixelScreen;
|
|
BOOL m_fHighContrast;
|
|
};
|
|
|
|
extern const GUID c_guidProfileBogus;
|
|
|
|
extern const GUID c_guidProfile0 ;
|
|
extern const GUID c_guidProfile1 ;
|
|
extern const GUID c_guidProfile2 ;
|
|
|
|
extern const REGTIPLANGPROFILE c_rgProfiles[];
|
|
|
|
#endif // CUTIL_H
|