void copy_rect(ahm::PropertyValue *pTarget, ahm::PropertyValue *pSource) { if(isRect(pTarget) && isRect(pSource)) { // same types! if( pTarget->derivedType() == ahm::PropertyValue::TYPE_RECT && pSource->derivedType() == ahm::PropertyValue::TYPE_RECT) { ahm::PropertyValueRect* pSourceRect = (ahm::PropertyValueRect* ) pSource; ahm::PropertyValueRect* pTargetRect = (ahm::PropertyValueRect* ) pTarget; copy_scalar(pTargetRect->left(), pSourceRect->left()); copy_scalar(pTargetRect->top(), pSourceRect->top()); copy_scalar(pTargetRect->right(), pSourceRect->right()); copy_scalar(pTargetRect->bottom(), pSourceRect->bottom()); } else if( pTarget->derivedType() == ahm::PropertyValue::TYPE_FLOAT_RECT && pSource->derivedType() == ahm::PropertyValue::TYPE_FLOAT_RECT) { ahm::PropertyValueFloatRect* pSourceFloatRect = (ahm::PropertyValueFloatRect* ) pSource; ahm::PropertyValueFloatRect* pTargetFloatRect = (ahm::PropertyValueFloatRect* ) pTarget; ahm::FLOAT_RECT frect = { 0,0,0,0}; pSourceFloatRect->getValue(frect); pTargetFloatRect->setValue(frect); } // different types else if( pTarget->derivedType() == ahm::PropertyValue::TYPE_RECT && pSource->derivedType() == ahm::PropertyValue::TYPE_FLOAT_RECT) { ahm::PropertyValueFloatRect* pSourceFloatRect = (ahm::PropertyValueFloatRect* ) pSource; ahm::PropertyValueRect* pTargetRect = (ahm::PropertyValueRect* ) pTarget; ahm::FLOAT_RECT frect = { 0,0,0,0 }; setFloat(pTargetRect->left(), frect.left); setFloat(pTargetRect->top(), frect.top); setFloat(pTargetRect->right(), frect.right); setFloat(pTargetRect->bottom(), frect.bottom); } else if( pTarget->derivedType() == ahm::PropertyValue::TYPE_FLOAT_RECT && pSource->derivedType() == ahm::PropertyValue::TYPE_RECT) { ahm::PropertyValueRect* pSourceRect = (ahm::PropertyValueRect* ) pSource; ahm::PropertyValueFloatRect* pTargetFloatRect = (ahm::PropertyValueFloatRect* ) pTarget; ahm::FLOAT_RECT frect = { 0,0,0,0 }; getFloat(frect.left, pSourceRect->left()); getFloat(frect.top, pSourceRect->top()); getFloat(frect.right, pSourceRect->right()); getFloat(frect.bottom, pSourceRect->bottom()); pTargetFloatRect->setValue(frect); } } }
void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point) { CPoint Button1(165,122); CPoint Button2(350,122); if (isRect(point,Button1)) { crack(); } if (isRect(point,Button2)) restore(); SendMessage(WM_NCLBUTTONDOWN,(WPARAM)HTCAPTION,(LPARAM)HTCAPTION); CDialog::OnLButtonDown(nFlags, point); }
SharedBuffer const* Region::getSharedBuffer(size_t* count) const { // We can get to the SharedBuffer of a Vector<Rect> because Rect has // a trivial destructor. SharedBuffer const* sb = SharedBuffer::bufferFromData(mStorage.array()); if (count) { size_t numRects = isRect() ? 1 : mStorage.size() - 1; count[0] = numRects; } sb->acquire(); return sb; }
void Region::unite(const Region& region) { if (region.isEmpty()) return; if (isRect() && m_bounds.contains(region.m_bounds)) return; if (region.isRect() && region.m_bounds.contains(m_bounds)) { m_shape = region.m_shape; m_bounds = region.m_bounds; return; } // FIXME: We may want another way to construct a Region without doing this test when we expect it to be false. if (!isRect() && contains(region)) return; Shape unitedShape = Shape::unionShapes(m_shape, region.m_shape); m_shape.swap(unitedShape); m_bounds.unite(region.m_bounds); }
Region::const_iterator Region::end() const { return isRect() ? ((&mBounds) + 1) : (mStorage.array() + mStorage.size()); }
Region::const_iterator Region::begin() const { return isRect() ? &mBounds : mStorage.array(); }
Region::const_iterator Region::end() const { size_t numRects = isRect() ? 1 : mStorage.size() - 1; return mStorage.array() + numRects; }
bool isRect(ahm::Property* pProperty) { return pProperty ? isRect(pProperty->value()) : false; }