mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
79 lines
2.7 KiB
C++
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 */
|