1
2
3 #include "tpalette.h"
4 #include "toonz/cleanupcolorstyles.h"
5 #include "toonz/targetcolors.h"
6 #include "tgl.h"
7
8 #include "cleanuppalette.h"
9
10 //===================================================================
11
createStandardCleanupPalette()12 TPalette *createStandardCleanupPalette() {
13 TPalette *palette = new TPalette();
14 TPalette::Page *page = palette->getPage(0);
15 page->removeStyle(1); // tolgo il black che c'e' gia' nella palette di
16 // default
17 TBlackCleanupStyle *black = new TBlackCleanupStyle();
18 palette->setStyle(1, black);
19 page->addStyle(1);
20 // page->addStyle(palette->addStyle(new TColorCleanupStyle(TPixel32::Red)));
21 // page->addStyle(palette->addStyle(new TColorCleanupStyle(TPixel32::Blue)));
22 black->setName(L"color_1");
23 palette->addRef();
24 palette->setIsCleanupPalette(true);
25 return palette;
26 }
27
28 //-------------------------------------------------------------------
29
createToonzPalette(TPalette * cleanupPalette)30 TPalette *createToonzPalette(TPalette *cleanupPalette) {
31 assert(cleanupPalette);
32 assert(cleanupPalette->isCleanupPalette());
33
34 TPalette *palette = new TPalette();
35
36 for (int i = 0; i < cleanupPalette->getPage(0)->getStyleCount(); i++) {
37 int styleId = cleanupPalette->getPage(0)->getStyleId(i);
38 TCleanupStyle *cs =
39 dynamic_cast<TCleanupStyle *>(cleanupPalette->getStyle(styleId));
40 if (!cs) continue;
41 TPixel32 color = cs->getMainColor();
42
43 while (palette->getStyleCount() < styleId) palette->addStyle(TPixel32::Red);
44
45 if (styleId == palette->getStyleCount())
46 palette->addStyle(color);
47 else
48 palette->setStyle(styleId, color);
49
50 if (styleId > 1) // 0 e 1 sono gia' nella pagina
51 palette->getPage(0)->addStyle(styleId);
52
53 assert(0 <= styleId && styleId < palette->getStyleCount());
54 if (cs->getFlags()) palette->getStyle(styleId)->setFlags(cs->getFlags());
55 }
56
57 return palette;
58 }
59
60 //-------------------------------------------------------------------
61
createToonzPalette(TPalette * cleanupPalette,int colorParamIndex)62 TPalette *createToonzPalette(TPalette *cleanupPalette, int colorParamIndex) {
63 assert(cleanupPalette);
64 assert(cleanupPalette->isCleanupPalette());
65
66 TPalette *palette = new TPalette();
67
68 for (int i = 0; i < cleanupPalette->getPage(0)->getStyleCount(); i++) {
69 int styleId = cleanupPalette->getPage(0)->getStyleId(i);
70 TCleanupStyle *cs =
71 dynamic_cast<TCleanupStyle *>(cleanupPalette->getStyle(styleId));
72 if (!cs) continue;
73 TPixel32 color = cs->getColorParamValue(colorParamIndex);
74
75 while (palette->getStyleCount() < styleId) palette->addStyle(TPixel32::Red);
76
77 if (styleId == palette->getStyleCount())
78 palette->addStyle(color);
79 else
80 palette->setStyle(styleId, color);
81
82 if (styleId > 1) // 0 e 1 sono gia' nella pagina
83 palette->getPage(0)->addStyle(styleId);
84
85 assert(0 <= styleId && styleId < palette->getStyleCount());
86 if (cs->getFlags()) palette->getStyle(styleId)->setFlags(cs->getFlags());
87 }
88
89 return palette;
90 }
91
92 //====================================================================================
93
update(TPalette * palette,bool noAntialias)94 void TargetColors::update(TPalette *palette, bool noAntialias) {
95 m_colors.clear();
96
97 TargetColor transparent(TPixel32(255, 255, 255, 0) /*TPixel32::Transparent*/,
98 0, // BackgroundStyle,
99 0, 0, 0, 0);
100
101 m_colors.push_back(transparent);
102
103 for (int i = 0; i < palette->getPage(0)->getStyleCount(); i++) {
104 int styleId = palette->getPage(0)->getStyleId(i);
105 TColorStyle *cs = palette->getStyle(styleId);
106 if (!cs) continue;
107 if (TBlackCleanupStyle *blackStyle =
108 dynamic_cast<TBlackCleanupStyle *>(cs)) {
109 TargetColor tc(
110 blackStyle->getMainColor(), styleId, (int)blackStyle->getBrightness(),
111 noAntialias ? 100 : (int)blackStyle->getContrast(),
112 blackStyle->getColorThreshold(), blackStyle->getWhiteThreshold());
113 m_colors.push_back(tc);
114 } else if (TColorCleanupStyle *colorStyle =
115 dynamic_cast<TColorCleanupStyle *>(cs)) {
116 TargetColor tc(colorStyle->getMainColor(), styleId,
117 (int)colorStyle->getBrightness(),
118 noAntialias ? 100 : (int)colorStyle->getContrast(),
119 colorStyle->getHRange(), colorStyle->getLineWidth());
120 m_colors.push_back(tc);
121 }
122 }
123 }
124
125 //-------------------------------------------------------------------
126
convertToCleanupPalette(TPalette * palette)127 void convertToCleanupPalette(TPalette *palette) {
128 if (palette->isCleanupPalette()) return;
129 for (int i = 1; i < palette->getStyleCount(); i++) {
130 TColorStyle *cs = palette->getStyle(i);
131 TPixel32 color = cs->getMainColor();
132 TColorStyle *ccs = 0;
133 if (i == 1)
134 ccs = new TBlackCleanupStyle();
135 else
136 ccs = new TColorCleanupStyle(color);
137 palette->setStyle(i, ccs);
138 }
139 palette->setIsCleanupPalette(true);
140 }
141
142 //-------------------------------------------------------------------
143
convertToLevelPalette(TPalette * palette)144 void convertToLevelPalette(TPalette *palette) {
145 if (!palette->isCleanupPalette()) return;
146 for (int i = 1; i < palette->getStyleCount(); i++) {
147 TPixel32 color = palette->getStyle(i)->getMainColor();
148 palette->setStyle(i, color);
149 }
150 palette->setIsCleanupPalette(false);
151 }
152