qt/LedOK/wProgramManager/wEditProgram/wElement/etext.h

190 lines
6.2 KiB
C
Raw Normal View History

2022-01-04 18:11:48 +08:00
#ifndef ETEXT_H
#define ETEXT_H
#include <QPainter>
#include <QFontMetrics>
#include <QTextDocument>
#include <QGraphicsSceneMouseEvent>
#include "eobject.h"
#include "QTime"
#define MACRO_MAX_TEXT_PAGE 100
//这条语句害死人,加了这条语句文字就不能做到无反锯齿 MYFONT.setHintingPreference(QFont::PreferNoHinting);
class SuCaiFile{
public:
QString strEffect;
QString strFileName;
};
class txtBmpPage{
public:
int index=0;
QPixmap bitmap;
};
class txtBmpLine{
public:
int index=0;
int iStart=0;
int iEnd=0;
QPixmap bitmap;
};
class eTextAttr;
class eTextInput;
class eText : public eObject
{
Q_OBJECT
public:
enum PlayStyle {
Turning = 0,
Rolling,
Static
};
enum RollingStyle {
Left2Right = 0,
Right2Left,
Top2Bottom,
Bottom2Top
};
struct turningSt
{
QString strEffect="no";
int iEffectTime;
int iEffectSpeed;
int iPageStopTime;
int playDuration=10;
};
struct rolloingSt
{
int rollingStyle;
int rollingSpeed;
bool headTailConnected;
int headTailSpacing=10;
int playDuration=10;
};
struct staticSt
{
int playDuration=10;
};
struct Data {
// Widget
QString text;
QTextOption opt;
int lineSpacing;
int wordSpacing;
QColor cBackground;
int iPageCount=1;
// QList<SuCaiFile> listPng;
// Play
int playStyle;
//turning
turningSt stTurning;
//rolling
rolloingSt stRolloing;
//static
staticSt stStatic;
};
public:
explicit eText(QRectF rectInit,InteractiveType type = Dynamic, QGraphicsItem *parent = nullptr);
explicit eText(const QJsonObject &json, InteractiveType type = Dynamic, QGraphicsItem *parent = nullptr);
~eText() override;
public:
static void setElement(const QJsonObject &json, Data &attr);
public:
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
// virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override;
virtual int type() const override { return eObject::Text; }
virtual QWidget* wAttr() override;
virtual QWidget* wAttrElement() override;
virtual QJsonObject save(const QString &pRoot) override;
virtual QJsonObject elementJson() const override;
// virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
public:
void setInput();
void setTextContents(QTextDocument &doc);
void setTextRichContents(QTextDocument &doc);
// void setTextVAlign(int align, QTextDocument &doc);
signals:
void sPageCountChanged(int);
public slots:
void onWAttrClosed() { m_wAttr = nullptr; }
void onInputClosed() { m_wTextInput = nullptr; }
public slots: // Widget
void onTextRickChanged(const QString &);
void onTextChanged(const QString &text) { m_attr.text = text; updateGeometry(); }
void onBackgroundColorChanged(const QColor& color) { m_attr.cBackground = color; updateGeometry(); RefreshBigPixmap();}
void onTextLineSpacingChanged(int s) { m_attr.lineSpacing = s; updateGeometry(); RefreshBigPixmap();}
void onTextLetterSpacingChanged(int s) { m_attr.wordSpacing=s; updateGeometry();RefreshBigPixmap(); }
void onTextHAlignChanged(int align);
void onTextVAlignChanged(int align);
void RefreshBigPixmap();
void OnRectChanged();
void OnPageIndexPreview(int iPageIndex);
public slots: // Play
void onPlayStyleChanged(int n) { m_attr.playStyle = n; updateGeometry(); RefreshBigPixmap();}
void onHeadTailConnected(bool f) { m_attr.stRolloing.headTailConnected = f; }
void onHeadTailSpacingChanged(int n) { m_attr.stRolloing.headTailSpacing = n; }
void onRollingSpeedChanged(int n) { m_attr.stRolloing.rollingSpeed = n; }
void onTurningEffectSpeedChanged(int n) { m_attr.stTurning.iEffectSpeed = n;
int ibeishu=1;
if(m_list.count()>0)
ibeishu=m_list.count();
m_attr.stTurning.playDuration=n*ibeishu;
}
void onRollingStyleChanged(int n) { m_attr.stRolloing.rollingStyle = n; updateGeometry(); RefreshBigPixmap();}
void onTurningEffectChanged(QString strEffect);
// void onPlayDurationChanged(int n) { m_attr.playDuration = n; }
void onTurningPlayDurationChanged(QTime n) { QTime aa(0,0,0); m_attr.stTurning.playDuration = aa.secsTo(n); }
void onEveryPageDurationChanged(QTime n) { QTime aa(0,0,0); m_attr.stTurning.iEffectTime = aa.secsTo(n); }
void onRollingPlayDurationChanged(QTime n) { QTime aa(0,0,0); m_attr.stRolloing.playDuration = aa.secsTo(n); }
void onStaticPlayDurationChanged(QTime n) { QTime aa(0,0,0); m_attr.stStatic.playDuration = aa.secsTo(n); }
private:
int ClearPixmapTopAndBottomBlack();
void MakeMuliPngToDir(int iPageIndex,QString strPngPathAndName) ;
void MakeBigMoveUpOrDownOnePngToDir() ;
void MakeBigMoveLeftOrRightOnePngToDir() ;
void MakeBigMoveUpOrDownOnePngToDir(QString strPngPathAndName) ;
void MakeBigMoveLeftOrRightOnePngToDir(QString strPngPathAndName) ;
void CreateBigOnePixBmp();
int GetPagesPosList();
txtBmpPage GetFirstPagePixmap();
int GetLinePng(QPixmap bigOnePixmap) ;
void ProcessLastStartEndLianJie(QPixmap bmp,QString strPngFilePathName,int iLastRightNoWordWidth);
int GetWordSpaceRealInBmp(QPixmap bmp);
private: // Interior
QPointF m_pText;
QRectF m_rClip;
eTextAttr *m_wAttr;
eTextInput *m_wTextInput;
Data m_attr;
int m_lineH;
QPainter *m_pPainter=nullptr;
QPixmap *m_pRenderPixmap=nullptr;
QPixmap m_bigOnePixBmp;
QList<txtBmpPage> m_list;
qreal m_oldWidth=0;
qreal m_oldHeight=0;
QColor m_ImageBkColor;
QString m_pRootPath;
QList<txtBmpLine> m_linelist;
};
#endif // ETEXT_H