void CPDF_Color::SetValue(CPDF_Pattern* pPattern, FX_FLOAT* comps, int ncomps) { if (ncomps > MAX_PATTERN_COLORCOMPS) { return; } if (m_pCS == NULL || m_pCS->GetFamily() != PDFCS_PATTERN) { if (m_pBuffer) { FX_Free(m_pBuffer); } m_pCS = CPDF_ColorSpace::GetStockCS(PDFCS_PATTERN); m_pBuffer = m_pCS->CreateBuf(); } CPDF_DocPageData *pDocPageData = NULL; PatternValue* pvalue = (PatternValue*)m_pBuffer; if (pvalue->m_pPattern && pvalue->m_pPattern->m_pDocument) { pDocPageData = pvalue->m_pPattern->m_pDocument->GetPageData(); if (pDocPageData) { pDocPageData->ReleasePattern(pvalue->m_pPattern->m_pPatternObj); } } pvalue->m_nComps = ncomps; pvalue->m_pPattern = pPattern; if (ncomps) { FXSYS_memcpy(pvalue->m_Comps, comps, ncomps * sizeof(FX_FLOAT)); } pvalue->m_pCountedPattern = NULL; if (pPattern && pPattern->m_pDocument) { if (!pDocPageData) { pDocPageData = pPattern->m_pDocument->GetPageData(); } pvalue->m_pCountedPattern = pDocPageData->FindPatternPtr(pPattern->m_pPatternObj); } }
void CPDF_Color::ReleaseBuffer() { if (!m_pBuffer) { return; } if (m_pCS->GetFamily() == PDFCS_PATTERN) { PatternValue* pvalue = (PatternValue*)m_pBuffer; CPDF_Pattern* pPattern = pvalue->m_pCountedPattern ? pvalue->m_pCountedPattern->get() : NULL; if (pPattern && pPattern->m_pDocument) { CPDF_DocPageData *pPageData = pPattern->m_pDocument->GetPageData(); if (pPageData) { pPageData->ReleasePattern(pPattern->m_pPatternObj); } } } FX_Free(m_pBuffer); m_pBuffer = NULL; }