Panel Image.cpp 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665
  1. /******************************************************************************/
  2. #include "stdafx.h"
  3. /******************************************************************************/
  4. /******************************************************************************/
  5. void EditPanelImage::Light::reset() {T=Light();}
  6. bool EditPanelImage::Light::newer(C Light &src)C
  7. {
  8. return enabled>src.enabled
  9. || intensity>src.intensity
  10. || back>src.back
  11. || highlight>src.highlight
  12. || highlight_cut>src.highlight_cut
  13. || specular>src.specular
  14. || specular_back>src.specular_back
  15. || specular_exp>src.specular_exp
  16. || specular_highlight>src.specular_highlight
  17. || specular_highlight_cut>src.specular_highlight_cut
  18. || angle>src.angle;
  19. }
  20. bool EditPanelImage::Light::equal(C Light &src)C
  21. {
  22. return enabled==src.enabled
  23. && intensity==src.intensity
  24. && back==src.back
  25. && highlight==src.highlight
  26. && highlight_cut==src.highlight_cut
  27. && specular==src.specular
  28. && specular_back==src.specular_back
  29. && specular_exp==src.specular_exp
  30. && specular_highlight==src.specular_highlight
  31. && specular_highlight_cut==src.specular_highlight_cut
  32. && angle==src.angle;
  33. }
  34. void EditPanelImage::Light::newData()
  35. {
  36. enabled++; intensity++; back++; highlight++; highlight_cut++; specular++; specular_back++; specular_exp++; specular_highlight++; specular_highlight_cut++; angle++;
  37. }
  38. bool EditPanelImage::Light::sync(PanelImageParams::Light &val, C Light &src, C PanelImageParams::Light &src_val)
  39. {
  40. bool changed=false;
  41. changed|=Sync(enabled , src.enabled , val.enabled , src_val.enabled );
  42. changed|=Sync(intensity , src.intensity , val.intensity , src_val.intensity );
  43. changed|=Sync(back , src.back , val.back , src_val.back );
  44. changed|=Sync(highlight , src.highlight , val.highlight , src_val.highlight );
  45. changed|=Sync(highlight_cut , src.highlight_cut , val.highlight_cut , src_val.highlight_cut );
  46. changed|=Sync(specular , src.specular , val.specular , src_val.specular );
  47. changed|=Sync(specular_back , src.specular_back , val.specular_back , src_val.specular_back );
  48. changed|=Sync(specular_exp , src.specular_exp , val.specular_exp , src_val.specular_exp );
  49. changed|=Sync(specular_highlight , src.specular_highlight , val.specular_highlight , src_val.specular_highlight );
  50. changed|=Sync(specular_highlight_cut, src.specular_highlight_cut, val.specular_highlight_cut, src_val.specular_highlight_cut);
  51. changed|=Sync(angle , src.angle , val.angle , src_val.angle );
  52. return changed;
  53. }
  54. bool EditPanelImage::Light::undo(PanelImageParams::Light &val, C Light &src, C PanelImageParams::Light &src_val)
  55. {
  56. bool changed=false;
  57. changed|=Undo(enabled , src.enabled , val.enabled , src_val.enabled );
  58. changed|=Undo(intensity , src.intensity , val.intensity , src_val.intensity );
  59. changed|=Undo(back , src.back , val.back , src_val.back );
  60. changed|=Undo(highlight , src.highlight , val.highlight , src_val.highlight );
  61. changed|=Undo(highlight_cut , src.highlight_cut , val.highlight_cut , src_val.highlight_cut );
  62. changed|=Undo(specular , src.specular , val.specular , src_val.specular );
  63. changed|=Undo(specular_back , src.specular_back , val.specular_back , src_val.specular_back );
  64. changed|=Undo(specular_exp , src.specular_exp , val.specular_exp , src_val.specular_exp );
  65. changed|=Undo(specular_highlight , src.specular_highlight , val.specular_highlight , src_val.specular_highlight );
  66. changed|=Undo(specular_highlight_cut, src.specular_highlight_cut, val.specular_highlight_cut, src_val.specular_highlight_cut);
  67. changed|=Undo(angle , src.angle , val.angle , src_val.angle );
  68. return changed;
  69. }
  70. bool EditPanelImage::Light::save(File &f)C
  71. {
  72. f.cmpUIntV(0);
  73. f<<enabled<<intensity<<back<<highlight<<highlight_cut<<specular<<specular_back<<specular_exp<<specular_highlight<<specular_highlight_cut<<angle;
  74. return f.ok();
  75. }
  76. bool EditPanelImage::Light::load(File &f)
  77. {
  78. switch(f.decUIntV())
  79. {
  80. case 0:
  81. {
  82. f>>enabled>>intensity>>back>>highlight>>highlight_cut>>specular>>specular_back>>specular_exp>>specular_highlight>>specular_highlight_cut>>angle;
  83. if(f.ok())return true;
  84. }break;
  85. }
  86. reset(); return false;
  87. }
  88. void EditPanelImage::ImageParams::reset() {T=ImageParams();}
  89. bool EditPanelImage::ImageParams::newer(C ImageParams &src)C
  90. {
  91. return blur_clamp>src.blur_clamp
  92. || blur>src.blur
  93. || uv_scale>src.uv_scale
  94. || uv_offset>src.uv_offset
  95. || uv_warp>src.uv_warp
  96. || intensity>src.intensity
  97. || mode>src.mode;
  98. }
  99. bool EditPanelImage::ImageParams::equal(C ImageParams &src)C
  100. {
  101. return blur_clamp==src.blur_clamp
  102. && blur==src.blur
  103. && uv_scale==src.uv_scale
  104. && uv_offset==src.uv_offset
  105. && uv_warp==src.uv_warp
  106. && intensity==src.intensity
  107. && mode==src.mode;
  108. }
  109. void EditPanelImage::ImageParams::newData()
  110. {
  111. blur_clamp++; blur++; uv_scale++; uv_offset++; uv_warp++; intensity++; mode++;
  112. }
  113. bool EditPanelImage::ImageParams::sync(PanelImageParams::ImageParams &val, C ImageParams &src, C PanelImageParams::ImageParams &src_val)
  114. {
  115. bool changed=false;
  116. changed|=Sync(blur_clamp, src.blur_clamp, val.blur_clamp, src_val.blur_clamp);
  117. changed|=Sync(blur , src.blur , val.blur , src_val.blur );
  118. changed|=Sync(uv_scale , src.uv_scale , val.uv_scale , src_val.uv_scale );
  119. changed|=Sync(uv_offset , src.uv_offset , val.uv_offset , src_val.uv_offset );
  120. changed|=Sync(uv_warp , src.uv_warp , val.uv_warp , src_val.uv_warp );
  121. changed|=Sync(intensity , src.intensity , val.intensity , src_val.intensity );
  122. changed|=Sync(mode , src.mode , val.mode , src_val.mode );
  123. return changed;
  124. }
  125. bool EditPanelImage::ImageParams::undo(PanelImageParams::ImageParams &val, C ImageParams &src, C PanelImageParams::ImageParams &src_val)
  126. {
  127. bool changed=false;
  128. changed|=Undo(blur_clamp, src.blur_clamp, val.blur_clamp, src_val.blur_clamp);
  129. changed|=Undo(blur , src.blur , val.blur , src_val.blur );
  130. changed|=Undo(uv_scale , src.uv_scale , val.uv_scale , src_val.uv_scale );
  131. changed|=Undo(uv_offset , src.uv_offset , val.uv_offset , src_val.uv_offset );
  132. changed|=Undo(uv_warp , src.uv_warp , val.uv_warp , src_val.uv_warp );
  133. changed|=Undo(intensity , src.intensity , val.intensity , src_val.intensity );
  134. changed|=Undo(mode , src.mode , val.mode , src_val.mode );
  135. return changed;
  136. }
  137. bool EditPanelImage::ImageParams::save(File &f)C
  138. {
  139. f.cmpUIntV(0);
  140. f<<blur_clamp<<blur<<uv_scale<<uv_offset<<uv_warp<<intensity<<mode;
  141. return f.ok();
  142. }
  143. bool EditPanelImage::ImageParams::load(File &f)
  144. {
  145. switch(f.decUIntV())
  146. {
  147. case 0:
  148. {
  149. f>>blur_clamp>>blur>>uv_scale>>uv_offset>>uv_warp>>intensity>>mode;
  150. if(f.ok())return true;
  151. }break;
  152. }
  153. reset(); return false;
  154. }
  155. void EditPanelImage::Section::reset() {T=Section();}
  156. void EditPanelImage::Section::includeIDs(MemPtr<UID> ids)C
  157. {
  158. Include(ids, depth_overlay_id);
  159. Include(ids, color_overlay_id);
  160. Include(ids, reflection_id);
  161. }
  162. bool EditPanelImage::Section::newer(C Section &src)C
  163. {
  164. return size>src.size
  165. || top_offset>src.top_offset
  166. || round_depth>src.round_depth
  167. || outer_depth>src.outer_depth
  168. || inner_depth>src.inner_depth
  169. || inner_distance>src.inner_distance
  170. || specular>src.specular
  171. || reflection_intensity>src.reflection_intensity
  172. || smooth_depth>src.smooth_depth
  173. || color>src.color
  174. || outer_color>src.outer_color
  175. || inner_color>src.inner_color
  176. || color_top>src.color_top
  177. || color_bottom>src.color_bottom
  178. || color_left>src.color_left
  179. || color_right>src.color_right
  180. || outer_border_color>src.outer_border_color
  181. || inner_border_color>src.inner_border_color
  182. || prev_border_color>src.prev_border_color
  183. || depth_overlay>src.depth_overlay || color_overlay>src.color_overlay || reflection>src.reflection
  184. || depth_overlay_params.newer(src.depth_overlay_params) || color_overlay_params.newer(src.color_overlay_params) || depth_noise.newer(src.depth_noise) || color_noise.newer(src.color_noise);
  185. }
  186. bool EditPanelImage::Section::equal(C Section &src)C
  187. {
  188. return size==src.size
  189. && top_offset==src.top_offset
  190. && round_depth==src.round_depth
  191. && outer_depth==src.outer_depth
  192. && inner_depth==src.inner_depth
  193. && inner_distance==src.inner_distance
  194. && specular==src.specular
  195. && reflection_intensity==src.reflection_intensity
  196. && smooth_depth==src.smooth_depth
  197. && color==src.color
  198. && outer_color==src.outer_color
  199. && inner_color==src.inner_color
  200. && color_top==src.color_top
  201. && color_bottom==src.color_bottom
  202. && color_left==src.color_left
  203. && color_right==src.color_right
  204. && outer_border_color==src.outer_border_color
  205. && inner_border_color==src.inner_border_color
  206. && prev_border_color==src.prev_border_color
  207. && depth_overlay==src.depth_overlay && color_overlay==src.color_overlay && reflection==src.reflection
  208. && depth_overlay_params.equal(src.depth_overlay_params) && color_overlay_params.equal(src.color_overlay_params) && depth_noise.equal(src.depth_noise) && color_noise.equal(src.color_noise);
  209. }
  210. void EditPanelImage::Section::newData()
  211. {
  212. size++; top_offset++; round_depth++; outer_depth++; inner_depth++; inner_distance++; specular++; reflection_intensity++; smooth_depth++;
  213. color++; outer_color++; inner_color++; color_top++; color_bottom++; color_left++; color_right++; outer_border_color++; inner_border_color++; prev_border_color++;
  214. depth_overlay++; color_overlay++; reflection++;
  215. depth_overlay_params.newData(); color_overlay_params.newData(); depth_noise.newData(); color_noise.newData();
  216. }
  217. bool EditPanelImage::Section::sync(PanelImageParams::Section &val, C Section &src, C PanelImageParams::Section &src_val)
  218. {
  219. bool changed=false;
  220. changed|=Sync(size , src.size , val.size , src_val.size );
  221. changed|=Sync(top_offset , src.top_offset , val.top_offset , src_val.top_offset );
  222. changed|=Sync(round_depth , src.round_depth , val.round_depth , src_val.round_depth );
  223. changed|=Sync(outer_depth , src.outer_depth , val.outer_depth , src_val.outer_depth );
  224. changed|=Sync(inner_depth , src.inner_depth , val.inner_depth , src_val.inner_depth );
  225. changed|=Sync(inner_distance , src.inner_distance , val.inner_distance , src_val.inner_distance );
  226. changed|=Sync(specular , src.specular , val.specular , src_val.specular );
  227. changed|=Sync(reflection_intensity, src.reflection_intensity, val.reflection_intensity, src_val.reflection_intensity);
  228. changed|=Sync(smooth_depth , src.smooth_depth , val.smooth_depth , src_val.smooth_depth );
  229. changed|=Sync(color , src.color , val.color , src_val.color );
  230. changed|=Sync(outer_color , src.outer_color , val.outer_color , src_val.outer_color );
  231. changed|=Sync(inner_color , src.inner_color , val.inner_color , src_val.inner_color );
  232. changed|=Sync(color_top , src.color_top , val.color_top , src_val.color_top );
  233. changed|=Sync(color_bottom , src.color_bottom , val.color_bottom , src_val.color_bottom );
  234. changed|=Sync(color_left , src.color_left , val.color_left , src_val.color_left );
  235. changed|=Sync(color_right , src.color_right , val.color_right , src_val.color_right );
  236. changed|=Sync(outer_border_color , src.outer_border_color , val.outer_border_color , src_val.outer_border_color );
  237. changed|=Sync(inner_border_color , src.inner_border_color , val.inner_border_color , src_val.inner_border_color );
  238. changed|=Sync(prev_border_color , src.prev_border_color , val.prev_border_color , src_val.prev_border_color );
  239. changed|=Sync(depth_overlay , src.depth_overlay , depth_overlay_id , src.depth_overlay_id );
  240. changed|=Sync(color_overlay , src.color_overlay , color_overlay_id , src.color_overlay_id );
  241. changed|=Sync(reflection , src.reflection , reflection_id , src.reflection_id );
  242. changed|=depth_overlay_params.sync(val.depth_overlay_params, src.depth_overlay_params, src_val.depth_overlay_params);
  243. changed|=color_overlay_params.sync(val.color_overlay_params, src.color_overlay_params, src_val.color_overlay_params);
  244. changed|=depth_noise .sync(val.depth_noise , src.depth_noise , src_val.depth_noise );
  245. changed|=color_noise .sync(val.color_noise , src.color_noise , src_val.color_noise );
  246. return changed;
  247. }
  248. bool EditPanelImage::Section::undo(PanelImageParams::Section &val, C Section &src, C PanelImageParams::Section &src_val)
  249. {
  250. bool changed=false;
  251. changed|=Undo(size , src.size , val.size , src_val.size );
  252. changed|=Undo(top_offset , src.top_offset , val.top_offset , src_val.top_offset );
  253. changed|=Undo(round_depth , src.round_depth , val.round_depth , src_val.round_depth );
  254. changed|=Undo(outer_depth , src.outer_depth , val.outer_depth , src_val.outer_depth );
  255. changed|=Undo(inner_depth , src.inner_depth , val.inner_depth , src_val.inner_depth );
  256. changed|=Undo(inner_distance , src.inner_distance , val.inner_distance , src_val.inner_distance );
  257. changed|=Undo(specular , src.specular , val.specular , src_val.specular );
  258. changed|=Undo(reflection_intensity, src.reflection_intensity, val.reflection_intensity, src_val.reflection_intensity);
  259. changed|=Undo(smooth_depth , src.smooth_depth , val.smooth_depth , src_val.smooth_depth );
  260. changed|=Undo(color , src.color , val.color , src_val.color );
  261. changed|=Undo(outer_color , src.outer_color , val.outer_color , src_val.outer_color );
  262. changed|=Undo(inner_color , src.inner_color , val.inner_color , src_val.inner_color );
  263. changed|=Undo(color_top , src.color_top , val.color_top , src_val.color_top );
  264. changed|=Undo(color_bottom , src.color_bottom , val.color_bottom , src_val.color_bottom );
  265. changed|=Undo(color_left , src.color_left , val.color_left , src_val.color_left );
  266. changed|=Undo(color_right , src.color_right , val.color_right , src_val.color_right );
  267. changed|=Undo(outer_border_color , src.outer_border_color , val.outer_border_color , src_val.outer_border_color );
  268. changed|=Undo(inner_border_color , src.inner_border_color , val.inner_border_color , src_val.inner_border_color );
  269. changed|=Undo(prev_border_color , src.prev_border_color , val.prev_border_color , src_val.prev_border_color );
  270. changed|=Undo(depth_overlay , src.depth_overlay , depth_overlay_id , src.depth_overlay_id );
  271. changed|=Undo(color_overlay , src.color_overlay , color_overlay_id , src.color_overlay_id );
  272. changed|=Undo(reflection , src.reflection , reflection_id , src.reflection_id );
  273. changed|=depth_overlay_params.undo(val.depth_overlay_params, src.depth_overlay_params, src_val.depth_overlay_params);
  274. changed|=color_overlay_params.undo(val.color_overlay_params, src.color_overlay_params, src_val.color_overlay_params);
  275. changed|=depth_noise .undo(val.depth_noise , src.depth_noise , src_val.depth_noise );
  276. changed|=color_noise .undo(val.color_noise , src.color_noise , src_val.color_noise );
  277. return changed;
  278. }
  279. bool EditPanelImage::Section::save(File &f)C
  280. {
  281. f.cmpUIntV(0);
  282. f<<size<<top_offset<<round_depth<<outer_depth<<inner_depth<<inner_distance<<specular<<reflection_intensity<<smooth_depth
  283. <<color<<outer_color<<inner_color<<color_top<<color_bottom<<color_left<<color_right<<outer_border_color<<inner_border_color<<prev_border_color
  284. <<depth_overlay<<color_overlay<<reflection
  285. <<depth_overlay_id<<color_overlay_id<<reflection_id;
  286. depth_overlay_params.save(f);
  287. color_overlay_params.save(f);
  288. depth_noise .save(f);
  289. color_noise .save(f);
  290. return f.ok();
  291. }
  292. bool EditPanelImage::Section::load(File &f)
  293. {
  294. switch(f.decUIntV())
  295. {
  296. case 0:
  297. {
  298. f>>size>>top_offset>>round_depth>>outer_depth>>inner_depth>>inner_distance>>specular>>reflection_intensity>>smooth_depth
  299. >>color>>outer_color>>inner_color>>color_top>>color_bottom>>color_left>>color_right>>outer_border_color>>inner_border_color>>prev_border_color
  300. >>depth_overlay>>color_overlay>>reflection
  301. >>depth_overlay_id>>color_overlay_id>>reflection_id;
  302. if(depth_overlay_params.load(f))
  303. if(color_overlay_params.load(f))
  304. if(depth_noise .load(f))
  305. if(color_noise .load(f))
  306. if(f.ok())return true;
  307. }break;
  308. }
  309. reset(); return false;
  310. }
  311. void EditPanelImage::Base::reset() {T=Base();}
  312. void EditPanelImage::Base::includeIDs(MemPtr<UID> ids)C
  313. {
  314. Include(ids, top_id); Include(ids, bottom_id); Include(ids, center_id); Include(ids, left_id); Include(ids, right_id);
  315. Include(ids, top_left_id); Include(ids, top_right_id); Include(ids, bottom_left_id); Include(ids, bottom_right_id);
  316. REPAO(sections).includeIDs(ids);
  317. }
  318. bool EditPanelImage::Base::newer(C Base &src)C
  319. {
  320. return cut_left>src.cut_left || cut_right>src.cut_right || cut_bottom>src.cut_bottom || cut_top>src.cut_top
  321. || cut_corners[0][0]>src.cut_corners[0][0] || cut_corners[0][1]>src.cut_corners[0][1] || cut_corners[1][0]>src.cut_corners[1][0] || cut_corners[1][1]>src.cut_corners[1][1]
  322. || cut_corner_slope>src.cut_corner_slope || cut_corner_amount>src.cut_corner_amount
  323. || force_uniform_stretch[0]>src.force_uniform_stretch[0] || force_uniform_stretch[1]>src.force_uniform_stretch[1]
  324. || resolution>src.resolution || width>src.width || height>src.height
  325. || round_corners>src.round_corners || left_slope>src.left_slope || right_slope>src.right_slope
  326. || max_side_stretch>src.max_side_stretch || extend>src.extend || extend_inner_padd>src.extend_inner_padd
  327. || border_size>src.border_size
  328. || outer_glow_spread>src.outer_glow_spread || outer_glow_radius>src.outer_glow_radius || inner_glow_radius>src.inner_glow_radius || outer_glow_color>src.outer_glow_color || inner_glow_color>src.inner_glow_color
  329. || light_ambient>src.light_ambient
  330. || depth>src.depth || round_depth>src.round_depth || inner_distance>src.inner_distance || smooth_depth>src.smooth_depth
  331. || shadow_radius>src.shadow_radius || shadow_opacity>src.shadow_opacity || shadow_spread>src.shadow_spread
  332. || color>src.color || color_top>src.color_top || color_bottom>src.color_bottom || color_left>src.color_left || color_right>src.color_right
  333. || images_size>src.images_size || top_height>src.top_height || bottom_height>src.bottom_height || left_right_width>src.left_right_width || top_corner_width>src.top_corner_width || bottom_corner_width>src.bottom_corner_width
  334. || top_image>src.top_image || bottom_image>src.bottom_image || center_image>src.center_image || left_image>src.left_image || right_image>src.right_image
  335. || top_left_image>src.top_left_image || top_right_image>src.top_right_image || bottom_left_image>src.bottom_left_image || bottom_right_image>src.bottom_right_image
  336. || compressed_time>src.compressed_time || mip_maps_time>src.mip_maps_time
  337. || lights[0].newer(src.lights[0])
  338. || lights[1].newer(src.lights[1])
  339. || sections[0].newer(src.sections[0])
  340. || sections[1].newer(src.sections[1]);
  341. }
  342. bool EditPanelImage::Base::equal(C Base &src)C
  343. {
  344. return cut_left==src.cut_left && cut_right==src.cut_right && cut_bottom==src.cut_bottom && cut_top==src.cut_top
  345. && cut_corners[0][0]==src.cut_corners[0][0] && cut_corners[0][1]==src.cut_corners[0][1] && cut_corners[1][0]==src.cut_corners[1][0] && cut_corners[1][1]==src.cut_corners[1][1]
  346. && cut_corner_slope==src.cut_corner_slope && cut_corner_amount==src.cut_corner_amount
  347. && force_uniform_stretch[0]==src.force_uniform_stretch[0] && force_uniform_stretch[1]==src.force_uniform_stretch[1]
  348. && resolution==src.resolution && width==src.width && height==src.height
  349. && round_corners==src.round_corners && left_slope==src.left_slope && right_slope==src.right_slope
  350. && max_side_stretch==src.max_side_stretch && extend==src.extend && extend_inner_padd==src.extend_inner_padd
  351. && border_size==src.border_size
  352. && outer_glow_spread==src.outer_glow_spread && outer_glow_radius==src.outer_glow_radius && inner_glow_radius==src.inner_glow_radius && outer_glow_color==src.outer_glow_color && inner_glow_color==src.inner_glow_color
  353. && light_ambient==src.light_ambient
  354. && depth==src.depth && round_depth==src.round_depth && inner_distance==src.inner_distance && smooth_depth==src.smooth_depth
  355. && shadow_radius==src.shadow_radius && shadow_opacity==src.shadow_opacity && shadow_spread==src.shadow_spread
  356. && color==src.color && color_top==src.color_top && color_bottom==src.color_bottom && color_left==src.color_left && color_right==src.color_right
  357. && images_size==src.images_size && top_height==src.top_height && bottom_height==src.bottom_height && left_right_width==src.left_right_width && top_corner_width==src.top_corner_width && bottom_corner_width==src.bottom_corner_width
  358. && top_image==src.top_image && bottom_image==src.bottom_image && center_image==src.center_image && left_image==src.left_image && right_image==src.right_image
  359. && top_left_image==src.top_left_image && top_right_image==src.top_right_image && bottom_left_image==src.bottom_left_image && bottom_right_image==src.bottom_right_image
  360. && compressed_time==src.compressed_time && mip_maps_time==src.mip_maps_time
  361. && lights[0].equal(src.lights[0])
  362. && lights[1].equal(src.lights[1])
  363. && sections[0].equal(src.sections[0])
  364. && sections[1].equal(src.sections[1]);
  365. }
  366. void EditPanelImage::Base::newData()
  367. {
  368. cut_left++; cut_right++; cut_bottom++; cut_top++;
  369. REPAD(y, cut_corners)REPAD(x, cut_corners[y])cut_corners[y][x]++; cut_corner_slope++; cut_corner_amount++;
  370. REPAO(force_uniform_stretch)++;
  371. resolution++; width++; height++;
  372. round_corners++; left_slope++; right_slope++;
  373. max_side_stretch++; extend++; extend_inner_padd++;
  374. border_size++;
  375. outer_glow_spread++; outer_glow_radius++; inner_glow_radius++; outer_glow_color++; inner_glow_color++;
  376. light_ambient++;
  377. depth++; round_depth++; inner_distance++; smooth_depth++;
  378. shadow_radius++; shadow_opacity++; shadow_spread++;
  379. color++; color_top++; color_bottom++; color_left++; color_right++;
  380. images_size++; top_height++; bottom_height++; left_right_width++; top_corner_width++; bottom_corner_width++;
  381. top_image++; bottom_image++; center_image++; left_image++; right_image++; top_left_image++; top_right_image++; bottom_left_image++; bottom_right_image++;
  382. compressed_time++; mip_maps_time++;
  383. REPAO(lights ).newData();
  384. REPAO(sections).newData();
  385. }
  386. bool EditPanelImage::Base::sync(PanelImageParams &val, C Base &src, C PanelImageParams &src_val)
  387. {
  388. bool changed=false;
  389. changed|=Sync(cut_left , src.cut_left , val.cut_left , src_val.cut_left );
  390. changed|=Sync(cut_right , src.cut_right , val.cut_right , src_val.cut_right );
  391. changed|=Sync(cut_bottom, src.cut_bottom, val.cut_bottom, src_val.cut_bottom);
  392. changed|=Sync(cut_top , src.cut_top , val.cut_top , src_val.cut_top );
  393. REPAD(y, cut_corners )
  394. REPAD(x, cut_corners[y])changed|=Sync(cut_corners[y][x], src.cut_corners[y][x], val.cut_corners[y][x], src_val.cut_corners[y][x]);
  395. changed|=Sync(cut_corner_slope , src.cut_corner_slope , val.cut_corner_slope , src_val.cut_corner_slope );
  396. changed|=Sync(cut_corner_amount, src.cut_corner_amount, val.cut_corner_amount, src_val.cut_corner_amount);
  397. REPA(force_uniform_stretch)changed|=Sync(force_uniform_stretch[i], src.force_uniform_stretch[i], val.force_uniform_stretch[i], src_val.force_uniform_stretch[i]);
  398. changed|=Sync(resolution , src.resolution , val.resolution , src_val.resolution );
  399. changed|=Sync(width , src.width , val.width , src_val.width );
  400. changed|=Sync(height , src.height , val.height , src_val.height );
  401. changed|=Sync(round_corners , src.round_corners , val.round_corners , src_val.round_corners );
  402. changed|=Sync(left_slope , src.left_slope , val.left_slope , src_val.left_slope );
  403. changed|=Sync(right_slope , src.right_slope , val.right_slope , src_val.right_slope );
  404. changed|=Sync(max_side_stretch , src.max_side_stretch , val.max_side_stretch , src_val.max_side_stretch );
  405. changed|=Sync(extend , src.extend , val.extend , src_val.extend );
  406. changed|=Sync(extend_inner_padd , src.extend_inner_padd , val.extend_inner_padd , src_val.extend_inner_padd );
  407. changed|=Sync(border_size , src.border_size , val.border_size , src_val.border_size );
  408. changed|=Sync(outer_glow_spread , src.outer_glow_spread , val.outer_glow_spread , src_val.outer_glow_spread );
  409. changed|=Sync(outer_glow_radius , src.outer_glow_radius , val.outer_glow_radius , src_val.outer_glow_radius );
  410. changed|=Sync(inner_glow_radius , src.inner_glow_radius , val.inner_glow_radius , src_val.inner_glow_radius );
  411. changed|=Sync(outer_glow_color , src.outer_glow_color , val.outer_glow_color , src_val.outer_glow_color );
  412. changed|=Sync(inner_glow_color , src.inner_glow_color , val.inner_glow_color , src_val.inner_glow_color );
  413. changed|=Sync(light_ambient , src.light_ambient , val.light_ambient , src_val.light_ambient );
  414. changed|=Sync(depth , src.depth , val.depth , src_val.depth );
  415. changed|=Sync(round_depth , src.round_depth , val.round_depth , src_val.round_depth );
  416. changed|=Sync(inner_distance , src.inner_distance , val.inner_distance , src_val.inner_distance );
  417. changed|=Sync(smooth_depth , src.smooth_depth , val.smooth_depth , src_val.smooth_depth );
  418. changed|=Sync(shadow_radius , src.shadow_radius , val.shadow_radius , src_val.shadow_radius );
  419. changed|=Sync(shadow_opacity , src.shadow_opacity , val.shadow_opacity , src_val.shadow_opacity );
  420. changed|=Sync(shadow_spread , src.shadow_spread , val.shadow_spread , src_val.shadow_spread );
  421. changed|=Sync(color , src.color , val.color , src_val.color );
  422. changed|=Sync(color_top , src.color_top , val.color_top , src_val.color_top );
  423. changed|=Sync(color_bottom , src.color_bottom , val.color_bottom , src_val.color_bottom );
  424. changed|=Sync(color_left , src.color_left , val.color_left , src_val.color_left );
  425. changed|=Sync(color_right , src.color_right , val.color_right , src_val.color_right );
  426. changed|=Sync(images_size , src.images_size , val.images_size , src_val.images_size );
  427. changed|=Sync(top_height , src.top_height , val.top_height , src_val.top_height );
  428. changed|=Sync(bottom_height , src.bottom_height , val.bottom_height , src_val.bottom_height );
  429. changed|=Sync(left_right_width , src.left_right_width , val.left_right_width , src_val.left_right_width );
  430. changed|=Sync(top_corner_width , src.top_corner_width , val.top_corner_width , src_val.top_corner_width );
  431. changed|=Sync(bottom_corner_width , src.bottom_corner_width , val.bottom_corner_width , src_val.bottom_corner_width );
  432. changed|=Sync(top_image , src.top_image , top_id , src .top_id );
  433. changed|=Sync(bottom_image , src.bottom_image , bottom_id , src .bottom_id );
  434. changed|=Sync(center_image , src.center_image , center_id , src .center_id );
  435. changed|=Sync(left_image , src.left_image , left_id , src .left_id );
  436. changed|=Sync(right_image , src.right_image , right_id , src .right_id );
  437. changed|=Sync(top_left_image , src.top_left_image , top_left_id , src .top_left_id );
  438. changed|=Sync(top_right_image , src.top_right_image , top_right_id , src .top_right_id );
  439. changed|=Sync(bottom_left_image , src.bottom_left_image , bottom_left_id , src .bottom_left_id );
  440. changed|=Sync(bottom_right_image , src.bottom_right_image , bottom_right_id , src .bottom_right_id );
  441. changed|=Sync(compressed_time , src.compressed_time , compressed , src .compressed );
  442. changed|=Sync(mip_maps_time , src.mip_maps_time , mip_maps , src .mip_maps );
  443. REPA(lights )changed|=lights [i].sync(val.lights [i], src.lights [i], src_val.lights [i]);
  444. REPA(sections)changed|=sections[i].sync(val.sections[i], src.sections[i], src_val.sections[i]);
  445. return changed;
  446. }
  447. bool EditPanelImage::Base::undo(PanelImageParams &val, C Base &src, C PanelImageParams &src_val)
  448. {
  449. bool changed=false;
  450. changed|=Undo(cut_left , src.cut_left , val.cut_left , src_val.cut_left );
  451. changed|=Undo(cut_right , src.cut_right , val.cut_right , src_val.cut_right );
  452. changed|=Undo(cut_bottom, src.cut_bottom, val.cut_bottom, src_val.cut_bottom);
  453. changed|=Undo(cut_top , src.cut_top , val.cut_top , src_val.cut_top );
  454. REPAD(y, cut_corners )
  455. REPAD(x, cut_corners[y])changed|=Undo(cut_corners[y][x], src.cut_corners[y][x], val.cut_corners[y][x], src_val.cut_corners[y][x]);
  456. changed|=Undo(cut_corner_slope , src.cut_corner_slope , val.cut_corner_slope , src_val.cut_corner_slope );
  457. changed|=Undo(cut_corner_amount, src.cut_corner_amount, val.cut_corner_amount, src_val.cut_corner_amount);
  458. REPA(force_uniform_stretch)changed|=Undo(force_uniform_stretch[i], src.force_uniform_stretch[i], val.force_uniform_stretch[i], src_val.force_uniform_stretch[i]);
  459. changed|=Undo(resolution , src.resolution , val.resolution , src_val.resolution );
  460. changed|=Undo(width , src.width , val.width , src_val.width );
  461. changed|=Undo(height , src.height , val.height , src_val.height );
  462. changed|=Undo(round_corners , src.round_corners , val.round_corners , src_val.round_corners );
  463. changed|=Undo(left_slope , src.left_slope , val.left_slope , src_val.left_slope );
  464. changed|=Undo(right_slope , src.right_slope , val.right_slope , src_val.right_slope );
  465. changed|=Undo(max_side_stretch , src.max_side_stretch , val.max_side_stretch , src_val.max_side_stretch );
  466. changed|=Undo(extend , src.extend , val.extend , src_val.extend );
  467. changed|=Undo(extend_inner_padd , src.extend_inner_padd , val.extend_inner_padd , src_val.extend_inner_padd );
  468. changed|=Undo(border_size , src.border_size , val.border_size , src_val.border_size );
  469. changed|=Undo(outer_glow_spread , src.outer_glow_spread , val.outer_glow_spread , src_val.outer_glow_spread );
  470. changed|=Undo(outer_glow_radius , src.outer_glow_radius , val.outer_glow_radius , src_val.outer_glow_radius );
  471. changed|=Undo(inner_glow_radius , src.inner_glow_radius , val.inner_glow_radius , src_val.inner_glow_radius );
  472. changed|=Undo(outer_glow_color , src.outer_glow_color , val.outer_glow_color , src_val.outer_glow_color );
  473. changed|=Undo(inner_glow_color , src.inner_glow_color , val.inner_glow_color , src_val.inner_glow_color );
  474. changed|=Undo(light_ambient , src.light_ambient , val.light_ambient , src_val.light_ambient );
  475. changed|=Undo(depth , src.depth , val.depth , src_val.depth );
  476. changed|=Undo(round_depth , src.round_depth , val.round_depth , src_val.round_depth );
  477. changed|=Undo(inner_distance , src.inner_distance , val.inner_distance , src_val.inner_distance );
  478. changed|=Undo(smooth_depth , src.smooth_depth , val.smooth_depth , src_val.smooth_depth );
  479. changed|=Undo(shadow_radius , src.shadow_radius , val.shadow_radius , src_val.shadow_radius );
  480. changed|=Undo(shadow_opacity , src.shadow_opacity , val.shadow_opacity , src_val.shadow_opacity );
  481. changed|=Undo(shadow_spread , src.shadow_spread , val.shadow_spread , src_val.shadow_spread );
  482. changed|=Undo(color , src.color , val.color , src_val.color );
  483. changed|=Undo(color_top , src.color_top , val.color_top , src_val.color_top );
  484. changed|=Undo(color_bottom , src.color_bottom , val.color_bottom , src_val.color_bottom );
  485. changed|=Undo(color_left , src.color_left , val.color_left , src_val.color_left );
  486. changed|=Undo(color_right , src.color_right , val.color_right , src_val.color_right );
  487. changed|=Undo(images_size , src.images_size , val.images_size , src_val.images_size );
  488. changed|=Undo(top_height , src.top_height , val.top_height , src_val.top_height );
  489. changed|=Undo(bottom_height , src.bottom_height , val.bottom_height , src_val.bottom_height );
  490. changed|=Undo(left_right_width , src.left_right_width , val.left_right_width , src_val.left_right_width );
  491. changed|=Undo(top_corner_width , src.top_corner_width , val.top_corner_width , src_val.top_corner_width );
  492. changed|=Undo(bottom_corner_width , src.bottom_corner_width , val.bottom_corner_width , src_val.bottom_corner_width );
  493. changed|=Undo(top_image , src.top_image , top_id , src .top_id );
  494. changed|=Undo(bottom_image , src.bottom_image , bottom_id , src .bottom_id );
  495. changed|=Undo(center_image , src.center_image , center_id , src .center_id );
  496. changed|=Undo(left_image , src.left_image , left_id , src .left_id );
  497. changed|=Undo(right_image , src.right_image , right_id , src .right_id );
  498. changed|=Undo(top_left_image , src.top_left_image , top_left_id , src .top_left_id );
  499. changed|=Undo(top_right_image , src.top_right_image , top_right_id , src .top_right_id );
  500. changed|=Undo(bottom_left_image , src.bottom_left_image , bottom_left_id , src .bottom_left_id );
  501. changed|=Undo(bottom_right_image , src.bottom_right_image , bottom_right_id , src .bottom_right_id );
  502. changed|=Undo(compressed_time , src.compressed_time , compressed , src .compressed );
  503. changed|=Undo(mip_maps_time , src.mip_maps_time , mip_maps , src .mip_maps );
  504. REPA(lights )changed|=lights [i].undo(val.lights [i], src.lights [i], src_val.lights [i]);
  505. REPA(sections)changed|=sections[i].undo(val.sections[i], src.sections[i], src_val.sections[i]);
  506. return changed;
  507. }
  508. bool EditPanelImage::Base::save(File &f)C
  509. {
  510. f.cmpUIntV(1);
  511. f<<cut_left<<cut_right<<cut_bottom<<cut_top
  512. <<cut_corners<<cut_corner_slope<<cut_corner_amount
  513. <<force_uniform_stretch
  514. <<resolution<<width<<height
  515. <<round_corners<<left_slope<<right_slope
  516. <<max_side_stretch<<extend<<extend_inner_padd
  517. <<border_size
  518. <<outer_glow_spread<<outer_glow_radius<<inner_glow_radius<<outer_glow_color<<inner_glow_color
  519. <<light_ambient
  520. <<depth<<round_depth<<inner_distance<<smooth_depth
  521. <<shadow_radius<<shadow_opacity<<shadow_spread
  522. <<color<<color_top<<color_bottom<<color_left<<color_right
  523. <<images_size<<top_height<<bottom_height<<left_right_width<<top_corner_width<<bottom_corner_width
  524. <<top_image<<bottom_image<<center_image<<left_image<<right_image<<top_left_image<<top_right_image<<bottom_left_image<<bottom_right_image
  525. <<compressed_time<<mip_maps_time<<compressed<<mip_maps
  526. <<top_id<<bottom_id<<center_id<<left_id<<right_id<<top_left_id<<top_right_id<<bottom_left_id<<bottom_right_id;
  527. FREPAO(lights ).save(f);
  528. FREPAO(sections).save(f);
  529. return f.ok();
  530. }
  531. bool EditPanelImage::Base::load(File &f)
  532. {
  533. reset(); switch(f.decUIntV())
  534. {
  535. case 1:
  536. {
  537. f>>cut_left>>cut_right>>cut_bottom>>cut_top
  538. >>cut_corners>>cut_corner_slope>>cut_corner_amount
  539. >>force_uniform_stretch
  540. >>resolution>>width>>height
  541. >>round_corners>>left_slope>>right_slope
  542. >>max_side_stretch>>extend>>extend_inner_padd
  543. >>border_size
  544. >>outer_glow_spread>>outer_glow_radius>>inner_glow_radius>>outer_glow_color>>inner_glow_color
  545. >>light_ambient
  546. >>depth>>round_depth>>inner_distance>>smooth_depth
  547. >>shadow_radius>>shadow_opacity>>shadow_spread
  548. >>color>>color_top>>color_bottom>>color_left>>color_right
  549. >>images_size>>top_height>>bottom_height>>left_right_width>>top_corner_width>>bottom_corner_width
  550. >>top_image>>bottom_image>>center_image>>left_image>>right_image>>top_left_image>>top_right_image>>bottom_left_image>>bottom_right_image
  551. >>compressed_time>>mip_maps_time>>compressed>>mip_maps
  552. >>top_id>>bottom_id>>center_id>>left_id>>right_id>>top_left_id>>top_right_id>>bottom_left_id>>bottom_right_id;
  553. FREPA(lights )if(!lights [i].load(f))goto error;
  554. FREPA(sections)if(!sections[i].load(f))goto error;
  555. if(f.ok())return true;
  556. }break;
  557. case 0:
  558. {
  559. f>>cut_left>>cut_right>>cut_bottom>>cut_top
  560. >>cut_corners>>cut_corner_slope>>cut_corner_amount
  561. >>force_uniform_stretch
  562. >>resolution>>width>>height
  563. >>round_corners>>left_slope>>right_slope
  564. >>max_side_stretch>>extend
  565. >>border_size
  566. >>outer_glow_spread>>outer_glow_radius>>inner_glow_radius>>outer_glow_color>>inner_glow_color
  567. >>light_ambient
  568. >>depth>>round_depth>>inner_distance>>smooth_depth
  569. >>shadow_radius>>shadow_opacity>>shadow_spread
  570. >>color>>color_top>>color_bottom>>color_left>>color_right
  571. >>images_size>>top_height>>bottom_height>>left_right_width>>top_corner_width>>bottom_corner_width
  572. >>top_image>>bottom_image>>center_image>>left_image>>right_image>>top_left_image>>top_right_image>>bottom_left_image>>bottom_right_image
  573. >>compressed_time>>mip_maps_time>>compressed>>mip_maps
  574. >>top_id>>bottom_id>>center_id>>left_id>>right_id>>top_left_id>>top_right_id>>bottom_left_id>>bottom_right_id;
  575. FREPA(lights )if(!lights [i].load(f))goto error;
  576. FREPA(sections)if(!sections[i].load(f))goto error;
  577. if(f.ok())return true;
  578. }break;
  579. }
  580. error:
  581. reset(); return false;
  582. }
  583. void EditPanelImage::reset( ) {T=EditPanelImage();}
  584. void EditPanelImage::newData( ) { base.newData();}
  585. bool EditPanelImage::newer(C EditPanelImage &src)C {return base.newer(src.base);}
  586. bool EditPanelImage::equal(C EditPanelImage &src)C {return base.equal(src.base);}
  587. bool EditPanelImage::sync(C EditPanelImage &src) {return base.sync(T, src.base, src);}
  588. bool EditPanelImage::undo(C EditPanelImage &src) {return base.undo(T, src.base, src);}
  589. EditPanelImage::Images::Images(Project &proj, bool fast) : proj(proj) {T.fast=fast;}
  590. Image* EditPanelImage::Images::get(C UID &image_id)
  591. {
  592. if(!image_id.valid())return null;
  593. REPA(images)if(images[i].id==image_id)return images[i].image_ptr();
  594. Src &src=images.New(); src.id=image_id;
  595. if(!fast && src.image.ImportTry(proj.editPath(image_id)))src.image_ptr=&src.image;
  596. if(!src.image_ptr)src.image_ptr=proj.gamePath(image_id);
  597. return src.image_ptr();
  598. }
  599. void EditPanelImage::make(PanelImage &panel_image, Threads &threads, Project &proj, Image *soft, Image *depth_map, bool fast)
  600. {
  601. Images images(proj, fast);
  602. PanelImageParams params=T;
  603. params.top_image=images.get(base.top_id);
  604. params.bottom_image=images.get(base.bottom_id);
  605. params.center_image=images.get(base.center_id);
  606. params.left_image=images.get(base.left_id);
  607. params.right_image=images.get(base.right_id);
  608. params.top_left_image=images.get(base.top_left_id);
  609. params.top_right_image=images.get(base.top_right_id);
  610. params.bottom_left_image=images.get(base.bottom_left_id);
  611. params.bottom_right_image=images.get(base.bottom_right_id);
  612. REPA(sections)
  613. {
  614. params.sections[i].depth_overlay=images.get(base.sections[i].depth_overlay_id);
  615. params.sections[i].color_overlay=images.get(base.sections[i].color_overlay_id);
  616. params.sections[i].reflection =images.get(base.sections[i]. reflection_id);
  617. }
  618. panel_image.create(params, depth_map, fast ? 2 : 6, FILTER_BEST, &threads);
  619. IMAGE_TYPE type=panel_image.image.type(); if(base.compressed)ImageProps(panel_image.image, null, &type);
  620. Image *src=&panel_image.image;
  621. if(soft){Swap(*soft, *src); src=soft;}
  622. src->copyTry(panel_image.image, -1, -1, -1, type, IMAGE_2D, base.mip_maps ? 0 : 1, FILTER_BEST, true, true);
  623. }
  624. bool EditPanelImage::save(File &f)C
  625. {
  626. f.cmpUIntV(0);
  627. base.save(f);
  628. ::EE::PanelImageParams::save(f);
  629. return f.ok();
  630. }
  631. bool EditPanelImage::load(File &f)
  632. {
  633. switch(f.decUIntV())
  634. {
  635. case 0:
  636. {
  637. if( base.load(f))
  638. if(::EE::PanelImageParams::load(f))
  639. if(f.ok())return true;
  640. }break;
  641. }
  642. reset(); return false;
  643. }
  644. bool EditPanelImage::load(C Str &name)
  645. {
  646. File f; if(f.readTry(name))return load(f);
  647. reset(); return false;
  648. }
  649. EditPanelImage::Section::Section() : depth_overlay_id(UIDZero), color_overlay_id(UIDZero), reflection_id(UIDZero) {}
  650. EditPanelImage::Base::Base() : compressed(false), mip_maps(false), top_id(UIDZero), bottom_id(UIDZero), center_id(UIDZero), left_id(UIDZero), right_id(UIDZero), top_left_id(UIDZero), top_right_id(UIDZero), bottom_left_id(UIDZero), bottom_right_id(UIDZero) {}
  651. EditPanelImage::Images::Src::Src() : id(UIDZero) {}
  652. /******************************************************************************/