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