FX_BOOL CFWL_NoteDriver::DoMouseEx(CFWL_MsgMouse* pMsg, IFWL_Widget* pMessageForm) { CFWL_WidgetMgr* pWidgetMgr = static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); if (!pWidgetMgr) return FALSE; IFWL_Widget* pTarget = NULL; if (m_pGrab) pTarget = m_pGrab; if (!pTarget) { pTarget = pWidgetMgr->GetWidgetAtPoint(pMessageForm, pMsg->m_fx, pMsg->m_fy); while (pTarget && pTarget->GetClassID() == FWL_CLASSHASH_Grid) { pTarget = pTarget->GetParent(); } } if (pTarget) { if (pMessageForm != pTarget) { pMessageForm->TransformTo(pTarget, pMsg->m_fx, pMsg->m_fy); } } if (!pTarget) return FALSE; pMsg->m_pDstTarget = pTarget; return TRUE; }
void IFWL_Widget::GetMatrix(CFX_Matrix& matrix, bool bGlobal) { if (!m_pProperties) return; if (!bGlobal) { matrix.SetIdentity(); return; } IFWL_Widget* parent = GetParent(); CFX_ArrayTemplate<IFWL_Widget*> parents; while (parent) { parents.Add(parent); parent = parent->GetParent(); } matrix.SetIdentity(); CFX_Matrix ctmOnParent; CFX_RectF rect; int32_t count = parents.GetSize(); for (int32_t i = count - 2; i >= 0; i--) { parent = parents.GetAt(i); parent->GetMatrix(ctmOnParent, false); parent->GetWidgetRect(rect); matrix.Concat(ctmOnParent, true); matrix.Translate(rect.left, rect.top, true); } CFX_Matrix m; m.SetIdentity(); matrix.Concat(m, true); parents.RemoveAll(); }
bool IFWL_Widget::IsParent(IFWL_Widget* pParent) { IFWL_Widget* pUpWidget = GetParent(); while (pUpWidget) { if (pUpWidget == pParent) return true; pUpWidget = pUpWidget->GetParent(); } return false; }
FX_BOOL CFWL_NoteDriver::DoWheel(CFWL_MsgMouseWheel* pMsg, IFWL_Widget* pMessageForm) { CFWL_WidgetMgr* pWidgetMgr = static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); if (!pWidgetMgr) return FALSE; IFWL_Widget* pDst = pWidgetMgr->GetWidgetAtPoint(pMessageForm, pMsg->m_fx, pMsg->m_fy); if (!pDst) return FALSE; while (pDst && pDst->GetClassID() == FWL_CLASSHASH_Grid) { pDst = pDst->GetParent(); } pMessageForm->TransformTo(pDst, pMsg->m_fx, pMsg->m_fy); pMsg->m_pDstTarget = pDst; return TRUE; }