|
|
//
// view.cpp
//
#include "private.h"
#include "view.h"
#include "ic.h"
#include "range.h"
DBG_ID_INSTANCE(CContextView);
//+---------------------------------------------------------------------------
//
// ctor
//
//----------------------------------------------------------------------------
CContextView::CContextView(CInputContext *pic, TsViewCookie vcView) { Dbg_MemSetThisNameID(TEXT("CContextView"));
_pic = pic; _pic->AddRef();
_vcView = vcView; }
//+---------------------------------------------------------------------------
//
// dtor
//
//----------------------------------------------------------------------------
CContextView::~CContextView() { _pic->Release(); }
//+---------------------------------------------------------------------------
//
// GetRangeFromPoint
//
//----------------------------------------------------------------------------
STDAPI CContextView::GetRangeFromPoint(TfEditCookie ec, const POINT *ppt, DWORD dwFlags, ITfRange **ppRange) { CRange *range; IAnchor *pa; HRESULT hr;
if (ppRange == NULL) return E_INVALIDARG;
*ppRange = NULL;
if (ppt == NULL) return E_INVALIDARG;
if (dwFlags & ~(GXFPF_ROUND_NEAREST | GXFPF_NEAREST)) return E_INVALIDARG;
if (!_pic->_IsValidEditCookie(ec, TF_ES_READ)) { Assert(0); return TF_E_NOLOCK; }
hr = _pic->_GetTSI()->GetAnchorFromPoint(_vcView, ppt, dwFlags, &pa);
if (hr != S_OK) { // the only potentially bogus arg is the view, which could have gone away
return (hr == E_INVALIDARG) ? TF_E_INVALIDVIEW : E_FAIL; }
hr = E_FAIL;
range = new CRange;
if (range == NULL) goto Exit;
if (!range->_InitWithDefaultGravity(_pic, COPY_ANCHORS, pa, pa)) { range->Release(); goto Exit; }
*ppRange = (ITfRangeAnchor *)range; hr = S_OK;
Exit: pa->Release(); return hr; }
//+---------------------------------------------------------------------------
//
// GetScreenExt
//
//----------------------------------------------------------------------------
STDAPI CContextView::GetScreenExt(RECT *prc) { HRESULT hr;
if (prc == NULL) return E_INVALIDARG;
hr = _pic->_GetTSI()->GetScreenExt(_vcView, prc);
if (hr != S_OK) { hr = (hr == E_INVALIDARG) ? TF_E_INVALIDVIEW : E_FAIL; }
return hr; }
//+---------------------------------------------------------------------------
//
// GetScreenExtent
//
//----------------------------------------------------------------------------
STDAPI CContextView::GetTextExt(TfEditCookie ec, ITfRange *pRange, RECT *prc, BOOL *pfClipped) { CRange *range; HRESULT hr;
if (prc != NULL) { memset(prc, 0, sizeof(*prc)); } if (pfClipped != NULL) { *pfClipped = FALSE; } if (pRange == NULL || prc == NULL || pfClipped == NULL) return E_INVALIDARG;
if ((range = GetCRange_NA(pRange)) == NULL) return E_INVALIDARG;
if (!VerifySameContext(_pic, range)) return E_INVALIDARG;
if (!_pic->_IsValidEditCookie(ec, TF_ES_READ)) { Assert(0); return TF_E_NOLOCK; }
range->_QuickCheckCrossedAnchors();
hr = _pic->_GetTSI()->GetTextExt(_vcView, range->_GetStart(), range->_GetEnd(), prc, pfClipped);
if (hr != S_OK) { // the only potentially bogus arg is the view, which could have gone away
hr = (hr == E_INVALIDARG) ? TF_E_INVALIDVIEW : E_FAIL; }
return hr; }
//+---------------------------------------------------------------------------
//
// GetWnd
//
//----------------------------------------------------------------------------
STDAPI CContextView::GetWnd(HWND *phwnd) { HRESULT hr;
if (phwnd == NULL) return E_INVALIDARG;
hr = _pic->_GetTSI()->GetWnd(_vcView, phwnd);
if (hr != S_OK) { // the only potentially bogus arg is the view, which could have gone away
hr = (hr == E_INVALIDARG) ? TF_E_INVALIDVIEW : E_FAIL; }
return hr; }
|