Files
core/ASCOfficePDFReader/SXPathScanner.h

79 lines
2.7 KiB
C++

#ifndef _SXPATH_SCANNER_H
#define _SXPATH_SCANNER_H
#include "STypes.h"
class SXPath;
class SBitmap;
struct SIntersect;
//-------------------------------------------------------------------------------------------------------------------------------
// SXPathScanner
//-------------------------------------------------------------------------------------------------------------------------------
class SXPathScanner
{
public:
// <pXPath> äîëæåí áûòü îòñîðòèðîâàí.
SXPathScanner(SXPath *pXPath, BOOL bEO);
~SXPathScanner();
// Âîçâðàùàåì BBox äëÿ Path.
void GetBBox(int *pnMinX, int *pnMinY, int *pnMaxX, int *pnMaxY)
{
*pnMinX = m_nMinX;
*pnMinY = m_nMinY;
*pnMaxX = m_nMaxX;
*pnMaxY = m_nMaxY;
}
// Âîçâðàùàåì BBox äëÿ Path ñ ó÷åòîì AntiAliasing.
void GetBBoxAA(int *pnMinX, int *pnMinY, int *pnMaxX, int *pnMaxY);
// Âîçâðàùàåì ìèíèìàëüíîå è ìàêñèìàëüíîå çíà÷åíèÿ X äëÿ ïðîìåæóòêà Y.
void GetSpanBounds(int nY, int *pnSpanMinX, int *pnSpanMaxX);
// True, åñëè òî÷êà (<x>,<y>) ëåæèò âíóòðè Path.
BOOL IsInsidePath(int nX, int nY);
// True, åñëè âåñü èíòåðâàë ([<nX0>,<nX1>], <nY>) ëåæèò âíóòðè Path.
BOOL IsInsidePath(int x0, int x1, int y);
// Âîçâðàùàåì ñëåäóþùèé ïðîìåæóòî, ëåæàùèé âíóòðè Path äëÿ <nY>. Åñëè <nY> îòëè÷àåòñÿ, ïî ñðàâåíèþ ñ ïðåäûäóùèì âûçîâîì ôóíêöèè
// GetNextSpan, òîãäà âîçâðàùàåì ïåðâûé ïðîìåæóòîê äëÿ äàííîãî <nY>. Âîçâðàùàåì FALSE, åñëè íåò áîëüøå ïðîìåæóòêîâ äëÿ <nY>.
BOOL GetNextSpan(int nY, int *pnX0, int *pnX1);
// Ïîìåùàåì îäíó AA-ëèíèþ â <pAABuffer>. Ôóíêöèÿ âîçâðàùàåò ìèíèìàëüíîå è ìàêñèìàëüíîå çíà÷åíèå êîîðäèíàò ïèêñåëåé ñ íåíóëåâûìè
// çíà÷åíèÿìè.
void RenderAALine(SBitmap *pAABuffer, int *pnX0, int *pnX1, int nY);
// Îáðåçàåì ÀÀ-ëèíèþ, îáíóëÿÿ çíà÷åíèÿ ïèêñåëåé. Íà âõîäå, âñå íåíóëåâûå ïèêñåëè íàõîäÿòñÿ âíóòðè ïðîìåæóòêà [<nX0>,<nX1>].
// Ôóíêöèÿ îáíîâëÿåò çíà÷åíèÿ ïåðåìåííûõ <nX0> è <nX1>.
void ClipAALine(SBitmap *pAABuffer, int *pnX0, int *pnX1, int nY);
private:
void ComputeIntersections(int nY);
private:
SXPath *m_pXPath;
BOOL m_bEO;
int m_nMinX; //
int m_nMinY; // BBox äëÿ XPath
int m_nMaxX; //
int m_nMaxY; //
int m_nInterY; // Òåêóùåå çíà÷åíèå Y
int m_nInterIndex; // Òåêóùèé íîìåð â <inter> - èñïîëüçóåìûé â GetNextSpan
int m_nInterCount; // Òåêóùèé EO/NZWN ñ÷åò÷èê - èñïîëüçóåìûé â GetNextSpan
int m_nXPathIndex; // Òåêóùèé íîìåð â <m_pXPath> - èñïîëüçâóåìûé â ComputeIntersections
SIntersect *m_pInter; // Ìàññèâ ïåðåñå÷åíèé äëÿ <m_nInterY>
int m_nInterLen; // Êîëè÷åñòâî ýëåìåíòîâ â ìàññèâå <m_pInter>
int m_nInterSize; // Ðàçìåð ìàññèâà <inter>
};
#endif /* _SXPATH_SCANNER_H */