diff --git a/CMakeLists.txt b/CMakeLists.txt index 02ce6503..13f4ab55 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -593,7 +593,6 @@ set(VMIX_RSC_FILES ./rsc/mesh/icon_vimix.ply ./rsc/mesh/icon_group_vimix.ply ./rsc/mesh/icon_circles.ply - ./rsc/mesh/icon_dots.ply ./rsc/mesh/icon_empty.ply ./rsc/mesh/icon_lock.ply ./rsc/mesh/icon_unlock.ply @@ -603,7 +602,6 @@ set(VMIX_RSC_FILES ./rsc/mesh/icon_clock.ply ./rsc/mesh/icon_clock_hand.ply ./rsc/mesh/icon_grid.ply - ./rsc/mesh/icon_rightarrow.ply ./rsc/mesh/icon_crop.ply ./rsc/mesh/icon_eye.ply ./rsc/mesh/icon_eye_slash.ply @@ -614,6 +612,14 @@ set(VMIX_RSC_FILES ./rsc/mesh/icon_text.ply ./rsc/mesh/icon_play.ply ./rsc/mesh/icon_fastforward.ply + ./rsc/mesh/icon_blend_normal.ply + ./rsc/mesh/icon_blend_add.ply + ./rsc/mesh/icon_blend_subtract.ply + ./rsc/mesh/icon_blend_mult.ply + ./rsc/mesh/icon_blend_soft_light.ply + ./rsc/mesh/icon_blend_hard_light.ply + ./rsc/mesh/icon_blend_soft_sub.ply + ./rsc/mesh/icon_blend_lighten.ply ./rsc/mesh/h_line.ply ./rsc/mesh/h_mark.ply ./rsc/shaders/filters/default.glsl diff --git a/rsc/images/icons.dds b/rsc/images/icons.dds index 098aad72..5f3f4d6b 100644 Binary files a/rsc/images/icons.dds and b/rsc/images/icons.dds differ diff --git a/rsc/mesh/icon_blend_add.ply b/rsc/mesh/icon_blend_add.ply new file mode 100644 index 00000000..c914f7e2 --- /dev/null +++ b/rsc/mesh/icon_blend_add.ply @@ -0,0 +1,54 @@ +ply +format ascii 1.0 +comment Created in Blender version 4.2.2 LTS +element vertex 22 +property float x +property float y +property float z +property float s +property float t +element face 20 +property list uchar uint vertex_indices +end_header +-0.072711065 0.091354586 0 0.04761905 0 +0.11023354 0.109645195 0 0.23809524 0 +-0.072711065 0.109645195 0 0 0 +0.091939084 0.091354586 0 0.0952381 0 +0.11023354 -0.07326077 0 0.1904762 0 +0.091939084 -0.07326077 0 0.14285715 0 +-0.10929998 -0.109841965 0 0.33333334 0 +-0.0544166 -0.0092436895 0 0.95238096 0 +-0.10929998 0.07306399 0 0.2857143 0 +-0.026974909 0.01819221 0 0.47619048 0 +0.073644616 0.07306399 0 0.42857143 0 +-0.008680448 0.01819221 0 0.52380955 0 +0.01876124 -0.0092436895 0 0.61904764 0 +0.073644616 -0.109841965 0 0.3809524 0 +-0.026974909 -0.0092436895 0 1 0 +-0.008680448 -0.0092436895 0 0.5714286 0 +-0.0544166 -0.027534284 0 0.9047619 0 +0.01876124 -0.027534284 0 0.6666667 0 +-0.026974909 -0.027534284 0 0.85714287 0 +-0.026974909 -0.054970175 0 0.8095238 0 +-0.008680448 -0.054970175 0 0.7619048 0 +-0.008680448 -0.027534284 0 0.71428573 0 +3 0 1 2 +3 0 3 1 +3 3 4 1 +3 5 4 3 +3 6 7 8 +3 7 9 8 +3 9 10 8 +3 9 11 10 +3 11 12 10 +3 12 13 10 +3 7 14 9 +3 15 12 11 +3 6 16 7 +3 17 13 12 +3 6 18 16 +3 6 19 18 +3 20 17 21 +3 20 13 17 +3 6 20 19 +3 6 13 20 diff --git a/rsc/mesh/icon_blend_hard_light.ply b/rsc/mesh/icon_blend_hard_light.ply new file mode 100644 index 00000000..2c591082 --- /dev/null +++ b/rsc/mesh/icon_blend_hard_light.ply @@ -0,0 +1,222 @@ +ply +format ascii 1.0 +comment Created in Blender version 4.2.2 LTS +element vertex 106 +property float x +property float y +property float z +property float s +property float t +element face 104 +property list uchar uint vertex_indices +end_header +-0.07268818 0.09148041 0 0.00952381 0 +0.11037082 0.109782435 0 0.04761905 0 +-0.07268818 0.109782435 0 0 0 +0.092064925 0.09148041 0 0.01904762 0 +0.11037082 -0.073237896 0 0.03809524 0 +0.092064925 -0.073237896 0 0.028571429 0 +-0.10929998 -0.109841965 0 0.06666667 0 +-0.06168455 -0.00045199692 0 0.83809525 0 +-0.10929998 0.07317837 0 0.057142857 0 +-0.060415167 0.0023493767 0 0.84761906 0 +-0.05896481 0.005064994 0 0.85714287 0 +-0.057337295 0.0076856837 0 0.8666667 0 +-0.055536423 0.010202259 0 0.8761905 0 +-0.053566005 0.012605518 0 0.8857143 0 +-0.051429853 0.0148862675 0 0.8952381 0 +-0.049147803 0.017021112 0 0.9047619 0 +-0.046743296 0.018990196 0 0.9142857 0 +-0.044225514 0.020789735 0 0.9238095 0 +-0.041603655 0.022415929 0 0.93333334 0 +-0.038886912 0.023864947 0 0.94285715 0 +-0.036084473 0.025133006 0 0.95238096 0 +0.07375901 0.07317837 0 0.08571429 0 +-0.03320553 0.026216306 0 0.96190476 0 +-0.030259289 0.027111016 0 0.9714286 0 +-0.027254917 0.027813353 0 0.9809524 0 +-0.024201617 0.028319515 0 0.9904762 0 +-0.021108583 0.02862569 0 1 0 +-0.017985001 0.02872803 0 0.0952381 0 +-0.014862224 0.028624527 0 0.104761906 0 +-0.011770047 0.02831734 0 0.114285715 0 +-0.008717656 0.027810268 0 0.123809524 0 +-0.0057142302 0.027107142 0 0.13333334 0 +-0.0027689561 0.026211746 0 0.14285715 0 +0.00010898709 0.02512788 0 0.15238096 0 +0.0029104128 0.023859344 0 0.16190477 0 +0.005626127 0.022409968 0 0.17142858 0 +0.008246966 0.020783536 0 0.18095239 0 +0.01076372 0.018983863 0 0.1904762 0 +0.013167232 0.01701472 0 0.2 0 +0.015448287 0.014879957 0 0.20952381 0 +0.017583512 0.012599371 0 0.21904762 0 +0.019553058 0.010196373 0 0.22857143 0 +0.021353118 0.0076801404 0 0.23809524 0 +0.022979893 0.005059868 0 0.24761905 0 +0.024429597 0.00234472 0 0.25714287 0 +0.025698386 -0.00045610964 0 0.26666668 0 +0.07375901 -0.109841965 0 0.07619048 0 +-0.062769145 -0.0033299178 0 0.82857144 0 +0.026782475 -0.003333442 0 0.2761905 0 +-0.06366517 -0.006275207 0 0.81904763 0 +0.027678065 -0.0062780976 0 0.2857143 0 +-0.06436878 -0.009278677 0 0.8095238 0 +0.02838134 -0.00928089 0 0.2952381 0 +-0.06487619 -0.012331136 0 0.8 0 +0.028888516 -0.012332641 0 0.30476192 0 +-0.06518359 -0.01542341 0 0.7904762 0 +0.029195763 -0.01542417 0 0.31428573 0 +-0.06528716 -0.01854629 0 0.7809524 0 +0.029299282 -0.01854629 0 0.32380953 0 +-0.06518472 -0.021669969 0 0.7714286 0 +0.029196896 -0.021669209 0 0.33333334 0 +0.028890662 -0.02476158 0 0.34285715 0 +-0.064878345 -0.024763092 0 0.7619048 0 +0.028384395 -0.027814232 0 0.35238096 0 +-0.06437184 -0.02781646 0 0.75238097 0 +0.027681924 -0.030817963 0 0.36190477 0 +-0.063669026 -0.030820876 0 0.74285716 0 +0.026787005 -0.033763595 0 0.37142858 0 +-0.0627737 -0.033767134 0 0.73333335 0 +0.025703497 -0.036641926 0 0.3809524 0 +-0.06168968 -0.036646053 0 0.72380954 0 +0.024435185 -0.03944377 0 0.3904762 0 +-0.06042077 -0.039448433 0 0.71428573 0 +0.022985853 -0.042159945 0 0.4 0 +-0.058970775 -0.04216508 0 0.7047619 0 +0.021359317 -0.044781245 0 0.40952381 0 +-0.05734351 -0.04478679 0 0.6952381 0 +0.019559406 -0.04729849 0 0.41904762 0 +-0.055542786 -0.04730437 0 0.6857143 0 +0.01758989 -0.0497025 0 0.42857143 0 +-0.0535724 -0.049708635 0 0.6761905 0 +0.015454605 -0.051984064 0 0.43809524 0 +-0.05143617 -0.05199038 0 0.6666667 0 +0.013173364 -0.05411977 0 0.44761905 0 +-0.04915395 -0.05412616 0 0.6571429 0 +0.010769598 -0.056089774 0 0.45714286 0 +-0.046749182 -0.056096125 0 0.64761907 0 +0.008252494 -0.057890262 0 0.46666667 0 +-0.044231065 -0.057896476 0 0.63809526 0 +0.005631253 -0.059517436 0 0.47619048 0 +-0.041608796 -0.059523392 0 0.62857145 0 +0.002915062 -0.06096748 0 0.4857143 0 +-0.038891576 -0.060973078 0 0.61904764 0 +0.00011309981 -0.062236592 0 0.4952381 0 +-0.03608861 -0.062241722 0 0.60952383 0 +-0.002765432 -0.063320965 0 0.50476193 0 +-0.033209078 -0.06332551 0 0.6 0 +-0.0057113394 -0.064216785 0 0.51428574 0 +-0.030262187 -0.064220645 0 0.5904762 0 +-0.008715443 -0.064920254 0 0.52380955 0 +-0.027257137 -0.064923316 0 0.5809524 0 +-0.011768557 -0.06542756 0 0.53333336 0 +-0.02420313 -0.0654297 0 0.5714286 0 +-0.014861472 -0.06573489 0 0.54285717 0 +-0.02110935 -0.06573602 0 0.5619048 0 +-0.017985001 -0.06583844 0 0.552381 0 +3 0 1 2 +3 0 3 1 +3 3 4 1 +3 5 4 3 +3 6 7 8 +3 7 9 8 +3 9 10 8 +3 10 11 8 +3 11 12 8 +3 12 13 8 +3 13 14 8 +3 14 15 8 +3 15 16 8 +3 16 17 8 +3 17 18 8 +3 18 19 8 +3 19 20 8 +3 20 21 8 +3 20 22 21 +3 22 23 21 +3 23 24 21 +3 24 25 21 +3 25 26 21 +3 26 27 21 +3 27 28 21 +3 28 29 21 +3 29 30 21 +3 30 31 21 +3 31 32 21 +3 32 33 21 +3 33 34 21 +3 34 35 21 +3 35 36 21 +3 36 37 21 +3 37 38 21 +3 38 39 21 +3 39 40 21 +3 40 41 21 +3 41 42 21 +3 42 43 21 +3 43 44 21 +3 44 45 21 +3 45 46 21 +3 6 47 7 +3 48 46 45 +3 6 49 47 +3 50 46 48 +3 6 51 49 +3 52 46 50 +3 6 53 51 +3 54 46 52 +3 6 55 53 +3 56 46 54 +3 6 57 55 +3 58 46 56 +3 6 59 57 +3 60 46 58 +3 61 46 60 +3 6 62 59 +3 63 46 61 +3 6 64 62 +3 65 46 63 +3 6 66 64 +3 67 46 65 +3 6 68 66 +3 69 46 67 +3 6 70 68 +3 71 46 69 +3 6 72 70 +3 73 46 71 +3 6 74 72 +3 75 46 73 +3 6 76 74 +3 77 46 75 +3 6 78 76 +3 79 46 77 +3 6 80 78 +3 81 46 79 +3 6 82 80 +3 83 46 81 +3 6 84 82 +3 85 46 83 +3 6 86 84 +3 87 46 85 +3 6 88 86 +3 89 46 87 +3 6 90 88 +3 91 46 89 +3 6 92 90 +3 93 46 91 +3 6 94 92 +3 95 46 93 +3 6 96 94 +3 97 46 95 +3 6 98 96 +3 99 46 97 +3 6 100 98 +3 101 46 99 +3 6 102 100 +3 103 46 101 +3 6 104 102 +3 105 46 103 +3 6 105 104 +3 6 46 105 diff --git a/rsc/mesh/icon_blend_lighten.ply b/rsc/mesh/icon_blend_lighten.ply new file mode 100644 index 00000000..c8de399b --- /dev/null +++ b/rsc/mesh/icon_blend_lighten.ply @@ -0,0 +1,44 @@ +ply +format ascii 1.0 +comment Created in Blender version 4.2.2 LTS +element vertex 17 +property float x +property float y +property float z +property float s +property float t +element face 15 +property list uchar uint vertex_indices +end_header +-0.07285437 0.09114095 0 0.0625 0 +0.10981976 0.109412126 0 0.3125 0 +-0.07285437 0.109412126 0 0 0 +0.091544725 0.09114095 0 0.125 0 +0.10981976 -0.07322149 0 0.25 0 +0.091544725 -0.07322149 0 0.1875 0 +-0.10948064 -0.109841965 0 0.4375 0 +-0.058492586 0.025407545 0 0.625 0 +-0.10948064 0.07286977 0 0.375 0 +0.07326969 0.07286977 0 0.5625 0 +0.028688602 -0.0070309266 0 0.6875 0 +0.07326969 -0.109841965 0 0.5 0 +-0.058492586 0.0056197196 0 1 0 +-0.058492586 -0.04143212 0 0.875 0 +0.009610474 -0.017736696 0 0.9375 0 +0.028688602 -0.02860304 0 0.75 0 +-0.058492586 -0.060863078 0 0.8125 0 +3 0 1 2 +3 0 3 1 +3 3 4 1 +3 5 4 3 +3 6 7 8 +3 7 9 8 +3 7 10 9 +3 10 11 9 +3 6 12 7 +3 6 13 12 +3 13 14 12 +3 15 11 10 +3 16 11 15 +3 6 16 13 +3 6 11 16 diff --git a/rsc/mesh/icon_blend_mult.ply b/rsc/mesh/icon_blend_mult.ply new file mode 100644 index 00000000..4f7bce9f --- /dev/null +++ b/rsc/mesh/icon_blend_mult.ply @@ -0,0 +1,54 @@ +ply +format ascii 1.0 +comment Created in Blender version 4.2.2 LTS +element vertex 22 +property float x +property float y +property float z +property float s +property float t +element face 20 +property list uchar uint vertex_indices +end_header +-0.073128715 0.0914061 0 0.04761905 0 +0.109534174 0.10966853 0 0.23809524 0 +-0.073128715 0.10966853 0 0 0 +0.091267884 0.0914061 0 0.0952381 0 +0.109534174 -0.07295578 0 0.1904762 0 +0.091267884 -0.07295578 0 0.14285715 0 +-0.109661296 -0.10948064 0 0.33333334 0 +-0.054309446 0.006318152 0 1 0 +-0.109661296 0.07314367 0 0.2857143 0 +-0.042411387 0.018338539 0 0.47619048 0 +0.07300159 0.07314367 0 0.42857143 0 +0.006108448 0.018071033 0 0.5714286 0 +0.017935157 0.0060684755 0 0.61904764 0 +0.07300159 -0.10948064 0 0.3809524 0 +-0.018329851 -0.0065226182 0 0.52380955 0 +-0.0547554 -0.042191423 0 0.9047619 0 +-0.030263595 -0.018168487 0 0.95238096 0 +-0.0063782707 -0.018168487 0 0.6666667 0 +0.018060029 -0.042690784 0 0.71428573 0 +-0.04273247 -0.05408698 0 0.85714287 0 +0.0060549304 -0.054515004 0 0.7619048 0 +-0.018329851 -0.030402884 0 0.8095238 0 +3 0 1 2 +3 0 3 1 +3 3 4 1 +3 5 4 3 +3 6 7 8 +3 7 9 8 +3 9 10 8 +3 9 11 10 +3 11 12 10 +3 12 13 10 +3 14 11 9 +3 6 15 7 +3 15 16 7 +3 17 18 12 +3 18 13 12 +3 19 20 21 +3 6 19 15 +3 20 13 18 +3 6 20 19 +3 6 13 20 diff --git a/rsc/mesh/icon_blend_normal.ply b/rsc/mesh/icon_blend_normal.ply new file mode 100644 index 00000000..037bcfbc --- /dev/null +++ b/rsc/mesh/icon_blend_normal.ply @@ -0,0 +1,28 @@ +ply +format ascii 1.0 +comment Created in Blender version 4.2.2 LTS +element vertex 10 +property float x +property float y +property float z +property float s +property float t +element face 6 +property list uchar uint vertex_indices +end_header +-0.07297526 0.09135432 0 0.11111111 0 +0.11032981 0.10968094 0 0.5555556 0 +-0.07297526 0.10968094 0 0 0 +0.09199931 0.09135432 0 0.22222222 0 +0.11032981 -0.073585406 0 0.44444445 0 +0.09199931 -0.073585406 0 0.33333334 0 +-0.10963628 -0.11023868 0 0.7777778 0 +0.07366879 0.07302768 0 1 0 +-0.10963628 0.07302768 0 0.6666667 0 +0.07366879 -0.11023868 0 0.8888889 0 +3 0 1 2 +3 0 3 1 +3 3 4 1 +3 5 4 3 +3 6 7 8 +3 6 9 7 diff --git a/rsc/mesh/icon_blend_soft_light.ply b/rsc/mesh/icon_blend_soft_light.ply new file mode 100644 index 00000000..4e547b55 --- /dev/null +++ b/rsc/mesh/icon_blend_soft_light.ply @@ -0,0 +1,174 @@ +ply +format ascii 1.0 +comment Created in Blender version 4.2.2 LTS +element vertex 83 +property float x +property float y +property float z +property float s +property float t +element face 79 +property list uchar uint vertex_indices +end_header +-0.07290316 0.09147241 0 0.0121951215 0 +0.1099843 0.10975728 0 0.06097561 0 +-0.07290316 0.10975728 0 0 0 +0.091695555 0.09147241 0 0.024390243 0 +0.1099843 -0.07309154 0 0.048780486 0 +0.091695555 -0.07309154 0 0.036585364 0 +-0.10948064 -0.1096613 0 0.085365854 0 +-0.05822414 -0.00053750724 0 0.597561 0 +-0.10948064 0.07318752 0 0.07317073 0 +-0.055750687 0.004383467 0 0.6097561 0 +-0.05268512 0.00891722 0 0.6219512 0 +-0.04907864 0.013012551 0 0.63414633 0 +-0.04498244 0.016618274 0 0.64634144 0 +-0.040447734 0.019683175 0 0.6585366 0 +-0.035525717 0.022156127 0 0.6707317 0 +0.07340681 0.07318752 0 0.1097561 0 +-0.030267581 0.023985885 0 0.68292683 0 +-0.024724536 0.025121279 0 0.69512194 0 +-0.01894778 0.025511123 0 0.12195122 0 +-0.013171017 0.025121279 0 0.13414635 0 +-0.0076279715 0.023985885 0 0.14634146 0 +-0.002369836 0.022156127 0 0.15853658 0 +0.0025521815 0.019683175 0 0.17073171 0 +0.007086888 0.01661826 0 0.18292683 0 +0.011183083 0.013012543 0 0.19512194 0 +0.014789559 0.0089172125 0 0.20731707 0 +0.01785513 0.0043834597 0 0.2195122 0 +0.020328574 -0.0005375147 0 0.23170732 0 +0.07340681 -0.1096613 0 0.09756097 0 +-0.01676885 -0.05068185 0 0.7195122 0 +-0.012085743 0.015836112 0 1 0 +-0.016340211 0.016440101 0 0.70731705 0 +-0.008017488 0.014717221 0 0.9878049 0 +-0.0041704625 0.0131183565 0 0.9756098 0 +-0.000579685 0.011074416 0 0.9634146 0 +0.0027198046 0.008620292 0 0.9512195 0 +0.005692996 0.0057908893 0 0.9390244 0 +0.008304864 0.0026211068 0 0.9268293 0 +0.010520384 -0.00085414946 0 0.91463417 0 +-0.060054287 -0.0057945326 0 0.58536583 0 +0.02215872 -0.0057945326 0 0.24390244 0 +0.01230453 -0.0045999885 0 0.902439 0 +0.013622284 -0.008581497 0 0.8902439 0 +-0.061189923 -0.011336409 0 0.5731707 0 +0.023294352 -0.011336409 0 0.25609756 0 +0.014438622 -0.012763783 0 0.8780488 0 +-0.061579846 -0.01711195 0 0.5609756 0 +0.023684286 -0.01711195 0 0.2682927 0 +0.01471851 -0.01711195 0 0.86585367 0 +-0.06118993 -0.02288749 0 0.5487805 0 +0.014434196 -0.021496154 0 0.85365856 0 +0.023294352 -0.02288749 0 0.2804878 0 +0.013605081 -0.025710896 0 0.8414634 0 +-0.060054295 -0.02842936 0 0.5365854 0 +0.02215872 -0.02842936 0 0.29268292 0 +0.012267001 -0.02972044 0 0.8292683 0 +-0.05822415 -0.033686385 0 0.5243902 0 +0.020328574 -0.033686377 0 0.30487806 0 +0.010455765 -0.033489108 0 0.81707317 0 +0.008207209 -0.03698118 0 0.80487806 0 +0.01785513 -0.03860736 0 0.31707317 0 +-0.055750694 -0.038607366 0 0.5121951 0 +0.005557157 -0.040160954 0 0.79268295 0 +0.0147895515 -0.043141104 0 0.3292683 0 +-0.052685127 -0.04314111 0 0.5 0 +0.0025414154 -0.042992726 0 0.7804878 0 +-0.0008041933 -0.045440786 0 0.76829267 0 +0.011183076 -0.047236435 0 0.34146342 0 +-0.049078647 -0.047236446 0 0.4878049 0 +-0.004443839 -0.047469437 0 0.75609756 0 +0.0070868805 -0.050842155 0 0.35365853 0 +-0.04498245 -0.050842166 0 0.47560975 0 +-0.008341715 -0.04904297 0 0.74390244 0 +-0.01246199 -0.050125673 0 0.73170733 0 +0.002552174 -0.053907074 0 0.36585367 0 +-0.04044774 -0.053907085 0 0.46341464 0 +-0.0023698434 -0.056380007 0 0.37804878 0 +-0.035525724 -0.05638002 0 0.4512195 0 +-0.007627979 -0.058209766 0 0.3902439 0 +-0.030267589 -0.058209777 0 0.4390244 0 +-0.013171025 -0.05934516 0 0.40243903 0 +-0.024724536 -0.059345167 0 0.42682928 0 +-0.01894778 -0.059735004 0 0.41463414 0 +3 0 1 2 +3 0 3 1 +3 3 4 1 +3 5 4 3 +3 6 7 8 +3 7 9 8 +3 9 10 8 +3 10 11 8 +3 11 12 8 +3 12 13 8 +3 13 14 8 +3 14 15 8 +3 14 16 15 +3 16 17 15 +3 17 18 15 +3 18 19 15 +3 19 20 15 +3 20 21 15 +3 21 22 15 +3 22 23 15 +3 23 24 15 +3 24 25 15 +3 25 26 15 +3 26 27 15 +3 27 28 15 +3 29 30 31 +3 29 32 30 +3 29 33 32 +3 29 34 33 +3 29 35 34 +3 29 36 35 +3 29 37 36 +3 29 38 37 +3 6 39 7 +3 40 28 27 +3 29 41 38 +3 29 42 41 +3 6 43 39 +3 44 28 40 +3 29 45 42 +3 6 46 43 +3 47 28 44 +3 29 48 45 +3 6 49 46 +3 29 50 48 +3 51 28 47 +3 29 52 50 +3 6 53 49 +3 54 28 51 +3 29 55 52 +3 6 56 53 +3 57 28 54 +3 29 58 55 +3 29 59 58 +3 60 28 57 +3 6 61 56 +3 29 62 59 +3 63 28 60 +3 6 64 61 +3 29 65 62 +3 29 66 65 +3 67 28 63 +3 6 68 64 +3 29 69 66 +3 70 28 67 +3 6 71 68 +3 29 72 69 +3 29 73 72 +3 74 28 70 +3 6 75 71 +3 76 28 74 +3 6 77 75 +3 78 28 76 +3 6 79 77 +3 80 28 78 +3 6 81 79 +3 82 28 80 +3 6 82 81 +3 6 28 82 diff --git a/rsc/mesh/icon_blend_soft_sub.ply b/rsc/mesh/icon_blend_soft_sub.ply new file mode 100644 index 00000000..c2536dc1 --- /dev/null +++ b/rsc/mesh/icon_blend_soft_sub.ply @@ -0,0 +1,206 @@ +ply +format ascii 1.0 +comment Created in Blender version 4.2.2 LTS +element vertex 98 +property float x +property float y +property float z +property float s +property float t +element face 96 +property list uchar uint vertex_indices +end_header +-0.07283364 0.09149335 0 0.2 0 +0.11040141 0.10981299 0 1 0 +-0.07283364 0.10981299 0 0 0 +0.092077896 0.09149335 0 0.4 0 +0.11040141 -0.07338336 0 0.8 0 +0.092077896 -0.07338336 0 0.6 0 +-0.023650885 0.023889855 0 0.012048192 0 +-0.012075409 0.02388984 0 0.56626505 0 +-0.017863132 0.024280444 0 0 0 +-0.02920451 0.022752255 0 0.024096385 0 +-0.0065217763 0.02275224 0 0.55421686 0 +-0.03447271 0.02091895 0 0.036144577 0 +-0.0012535825 0.020918936 0 0.5421687 0 +-0.039404176 0.018441245 0 0.04819277 0 +0.0036778823 0.01844123 0 0.5301205 0 +-0.0439476 0.015370399 0 0.060240965 0 +0.008221306 0.015370384 0 0.5180723 0 +-0.04805168 0.011757717 0 0.072289154 0 +-0.015240908 0.015183553 0 0.57831323 0 +0.012325391 0.011757709 0 0.5060241 0 +-0.01524961 0.01386039 0 1 0 +-0.010978632 0.014578551 0 0.5903614 0 +-0.00690341 0.013457961 0 0.60240966 0 +-0.015273668 0.010202244 0 0.9879518 0 +-0.0030502453 0.011856705 0 0.61445785 0 +0.00054587424 0.00980968 0 0.62650603 0 +-0.05166512 0.007654503 0 0.084337346 0 +0.015938833 0.0076544955 0 0.4939759 0 +-0.015310019 0.004676111 0 0.97590363 0 +0.0038499683 0.007351801 0 0.6385542 0 +-0.054736618 0.0031120405 0 0.09638554 0 +0.01901032 0.003112033 0 0.48192772 0 +0.0068270415 0.004517995 0 0.6506024 0 +-0.01535558 -0.002251014 0 0.96385545 0 +0.009442098 0.0013431534 0 0.6626506 0 +-0.05721486 -0.0018183812 0 0.10843374 0 +0.021488577 -0.0018183887 0 0.4698795 0 +0.011660151 -0.0021378025 0 0.67469877 0 +-0.059048552 -0.0070854574 0 0.12048193 0 +0.02332227 -0.0070854723 0 0.45783132 0 +0.013446212 -0.005889952 0 0.686747 0 +-0.015407287 -0.010112137 0 0.9518072 0 +0.014765292 -0.009878382 0 0.6987952 0 +-0.06018639 -0.012637913 0 0.13253012 0 +0.024460107 -0.012637928 0 0.44578314 0 +0.015582398 -0.014068201 0 0.7108434 0 +-0.015462056 -0.018440254 0 0.939759 0 +-0.060577072 -0.018424459 0 0.14457831 0 +0.0248508 -0.018424459 0 0.43373495 0 +0.01586257 -0.018424459 0 0.72289157 0 +-0.06018639 -0.024210997 0 0.15662651 0 +0.015577719 -0.02281712 0 0.73493975 0 +0.024460122 -0.024210997 0 0.42168674 0 +-0.0155168325 -0.026768379 0 0.92771083 0 +0.014747098 -0.027040191 0 0.74698794 0 +-0.059048552 -0.029763453 0 0.16867469 0 +0.023322284 -0.029763453 0 0.40963855 0 +-0.0155685395 -0.0346295 0 0.91566265 0 +0.01340659 -0.031057857 0 0.7590361 0 +-0.05721486 -0.035030536 0 0.18072289 0 +0.021488592 -0.035030536 0 0.39759037 0 +0.011592075 -0.034834288 0 0.7710843 0 +-0.0156141 -0.04155662 0 0.90361446 0 +0.009339415 -0.03833369 0 0.78313255 0 +-0.054736618 -0.039960958 0 0.19277108 0 +0.01901035 -0.039960958 0 0.38554215 0 +0.006684497 -0.041520238 0 0.79518074 0 +-0.05166512 -0.04450342 0 0.20481928 0 +0.015938848 -0.04450342 0 0.37349397 0 +0.0036632046 -0.044358127 0 0.8072289 0 +-0.015650444 -0.04708276 0 0.8915663 0 +0.00031141192 -0.04681153 0 0.8192771 0 +-0.04805168 -0.048606638 0 0.21686748 0 +0.0123254135 -0.048606638 0 0.36144578 0 +-0.0033350065 -0.04884464 0 0.8313253 0 +-0.015674502 -0.0507409 0 0.8795181 0 +-0.0439476 -0.052219316 0 0.22891566 0 +0.008221328 -0.052219316 0 0.3493976 0 +-0.0072401613 -0.050421644 0 0.8433735 0 +-0.011368185 -0.05150672 0 0.85542166 0 +-0.015683204 -0.05206406 0 0.8674699 0 +-0.039404176 -0.055290163 0 0.24096386 0 +0.0036779046 -0.055290163 0 0.33734939 0 +-0.03447271 -0.057767883 0 0.25301206 0 +-0.0012535602 -0.057767883 0 0.3253012 0 +-0.02920451 -0.05960119 0 0.26506025 0 +-0.006521754 -0.05960119 0 0.31325302 0 +-0.023650885 -0.060738787 0 0.27710843 0 +-0.0120753795 -0.060738787 0 0.30120483 0 +-0.017863132 -0.061129384 0 0.28915662 0 +-0.10948065 -0.110022634 0 0.14285715 0 +-0.091157146 0.05485408 0 0.5714286 0 +-0.10948065 0.07317372 0 0 0 +0.0737544 0.07317372 0 0.42857143 0 +0.05543089 0.05485408 0 0.71428573 0 +0.0737544 -0.110022634 0 0.2857143 0 +-0.091157146 -0.091703 0 1 0 +0.05543089 -0.091703 0 0.85714287 0 +3 0 1 2 +3 0 3 1 +3 3 4 1 +3 5 4 3 +3 6 7 8 +3 9 7 6 +3 9 10 7 +3 11 10 9 +3 11 12 10 +3 13 12 11 +3 13 14 12 +3 15 14 13 +3 15 16 14 +3 17 18 15 +3 18 16 15 +3 18 19 16 +3 17 20 18 +3 21 19 18 +3 22 19 21 +3 17 23 20 +3 24 19 22 +3 25 19 24 +3 26 23 17 +3 25 27 19 +3 26 28 23 +3 29 27 25 +3 30 28 26 +3 29 31 27 +3 32 31 29 +3 30 33 28 +3 34 31 32 +3 35 33 30 +3 34 36 31 +3 37 36 34 +3 38 33 35 +3 37 39 36 +3 40 39 37 +3 38 41 33 +3 42 39 40 +3 43 41 38 +3 42 44 39 +3 45 44 42 +3 43 46 41 +3 47 46 43 +3 45 48 44 +3 49 48 45 +3 50 46 47 +3 51 48 49 +3 51 52 48 +3 50 53 46 +3 54 52 51 +3 55 53 50 +3 54 56 52 +3 55 57 53 +3 58 56 54 +3 59 57 55 +3 58 60 56 +3 61 60 58 +3 59 62 57 +3 63 60 61 +3 64 62 59 +3 63 65 60 +3 66 65 63 +3 67 62 64 +3 66 68 65 +3 69 68 66 +3 67 70 62 +3 71 68 69 +3 72 70 67 +3 71 73 68 +3 74 73 71 +3 72 75 70 +3 76 75 72 +3 74 77 73 +3 78 77 74 +3 79 77 78 +3 76 80 75 +3 80 77 79 +3 76 77 80 +3 81 77 76 +3 81 82 77 +3 83 82 81 +3 83 84 82 +3 85 84 83 +3 85 86 84 +3 87 86 85 +3 87 88 86 +3 89 88 87 +3 90 91 92 +3 91 93 92 +3 91 94 93 +3 94 95 93 +3 90 96 91 +3 97 95 94 +3 90 97 96 +3 90 95 97 diff --git a/rsc/mesh/icon_blend_subtract.ply b/rsc/mesh/icon_blend_subtract.ply new file mode 100644 index 00000000..19d5fbc7 --- /dev/null +++ b/rsc/mesh/icon_blend_subtract.ply @@ -0,0 +1,44 @@ +ply +format ascii 1.0 +comment Created in Blender version 4.2.2 LTS +element vertex 18 +property float x +property float y +property float z +property float s +property float t +element face 14 +property list uchar uint vertex_indices +end_header +-0.073069215 0.09155264 0 0.7058824 0 +0.10989119 0.10984481 0 0.47058824 0 +-0.073069215 0.10984481 0 0.7647059 0 +0.09159514 0.09155264 0 0.64705884 0 +0.10989119 -0.07307695 0 0.5294118 0 +0.09159514 -0.07307695 0 0.5882353 0 +-0.109661296 -0.1096613 0 0.4117647 0 +-0.091365255 0.05496829 0 0 0 +-0.109661296 0.073260464 0 0.23529412 0 +0.07329911 0.073260464 0 0.29411766 0 +0.055003062 0.05496829 0 0.1764706 0 +0.07329911 -0.1096613 0 0.3529412 0 +-0.091365255 -0.09136913 0 0.05882353 0 +0.055003062 -0.09136913 0 0.11764706 0 +-0.054773174 -0.027346507 0 1 0 +0.01841098 -0.009054333 0 0.88235295 0 +-0.054773174 -0.009054333 0 0.8235294 0 +0.01841098 -0.027346507 0 0.9411765 0 +3 0 1 2 +3 0 3 1 +3 3 4 1 +3 5 4 3 +3 6 7 8 +3 7 9 8 +3 7 10 9 +3 10 11 9 +3 6 12 7 +3 13 11 10 +3 14 15 16 +3 14 17 15 +3 6 13 12 +3 6 11 13 diff --git a/rsc/mesh/icon_dots.ply b/rsc/mesh/icon_dots.ply deleted file mode 100644 index 9cd39aef..00000000 --- a/rsc/mesh/icon_dots.ply +++ /dev/null @@ -1,296 +0,0 @@ -ply -format ascii 1.0 -comment Created by Blender 2.83.2 - www.blender.org, source file: 'icons.blend' -element vertex 144 -property float x -property float y -property float z -property uchar red -property uchar green -property uchar blue -property uchar alpha -element face 138 -property list uchar uint vertex_indices -end_header --0.100451 0.019553 0.000000 255 255 255 255 --0.095145 0.019553 0.000000 255 255 255 255 --0.097798 0.019732 0.000000 255 255 255 255 --0.102996 0.019033 0.000000 255 255 255 255 --0.092601 0.019033 0.000000 255 255 255 255 --0.105409 0.018194 0.000000 255 255 255 255 --0.090187 0.018194 0.000000 255 255 255 255 --0.107668 0.017061 0.000000 255 255 255 255 --0.087929 0.017061 0.000000 255 255 255 255 --0.109748 0.015656 0.000000 255 255 255 255 --0.085848 0.015655 0.000000 255 255 255 255 --0.111627 0.014002 0.000000 255 255 255 255 --0.083970 0.014002 0.000000 255 255 255 255 --0.113281 0.012124 0.000000 255 255 255 255 --0.082316 0.012124 0.000000 255 255 255 255 --0.080911 0.010044 0.000000 255 255 255 255 --0.114686 0.010044 0.000000 255 255 255 255 --0.079777 0.007786 0.000000 255 255 255 255 --0.115820 0.007786 0.000000 255 255 255 255 --0.078938 0.005373 0.000000 255 255 255 255 --0.116659 0.005373 0.000000 255 255 255 255 --0.078418 0.002829 0.000000 255 255 255 255 --0.117179 0.002829 0.000000 255 255 255 255 --0.078239 0.000176 0.000000 255 255 255 255 --0.117358 0.000176 0.000000 255 255 255 255 --0.117179 -0.002478 0.000000 255 255 255 255 --0.078418 -0.002478 0.000000 255 255 255 255 --0.078938 -0.005024 0.000000 255 255 255 255 --0.116659 -0.005024 0.000000 255 255 255 255 --0.079777 -0.007437 0.000000 255 255 255 255 --0.115820 -0.007437 0.000000 255 255 255 255 --0.080911 -0.009695 0.000000 255 255 255 255 --0.114686 -0.009695 0.000000 255 255 255 255 --0.082316 -0.011775 0.000000 255 255 255 255 --0.113281 -0.011775 0.000000 255 255 255 255 --0.083970 -0.013653 0.000000 255 255 255 255 --0.111627 -0.013653 0.000000 255 255 255 255 --0.085848 -0.015306 0.000000 255 255 255 255 --0.109748 -0.015306 0.000000 255 255 255 255 --0.087929 -0.016710 0.000000 255 255 255 255 --0.107668 -0.016710 0.000000 255 255 255 255 --0.090187 -0.017843 0.000000 255 255 255 255 --0.105409 -0.017843 0.000000 255 255 255 255 --0.092601 -0.018681 0.000000 255 255 255 255 --0.102996 -0.018681 0.000000 255 255 255 255 --0.095145 -0.019200 0.000000 255 255 255 255 --0.100451 -0.019200 0.000000 255 255 255 255 --0.097798 -0.019379 0.000000 255 255 255 255 -0.092979 0.018972 0.000000 255 255 255 255 -0.098284 0.018972 0.000000 255 255 255 255 -0.095631 0.019150 0.000000 255 255 255 255 -0.090434 0.018452 0.000000 255 255 255 255 -0.100829 0.018452 0.000000 255 255 255 255 -0.088020 0.017614 0.000000 255 255 255 255 -0.103243 0.017613 0.000000 255 255 255 255 -0.085762 0.016482 0.000000 255 255 255 255 -0.105501 0.016479 0.000000 255 255 255 255 -0.083682 0.015077 0.000000 255 255 255 255 -0.107581 0.015074 0.000000 255 255 255 255 -0.081803 0.013424 0.000000 255 255 255 255 -0.109460 0.013421 0.000000 255 255 255 255 -0.080149 0.011547 0.000000 255 255 255 255 -0.111114 0.011542 0.000000 255 255 255 255 -0.078744 0.009467 0.000000 255 255 255 255 -0.112519 0.009463 0.000000 255 255 255 255 -0.077610 0.007209 0.000000 255 255 255 255 -0.113653 0.007205 0.000000 255 255 255 255 -0.076771 0.004795 0.000000 255 255 255 255 -0.114492 0.004792 0.000000 255 255 255 255 -0.076251 0.002250 0.000000 255 255 255 255 -0.115012 0.002247 0.000000 255 255 255 255 -0.076072 -0.000405 0.000000 255 255 255 255 -0.115191 -0.000405 0.000000 255 255 255 255 -0.076251 -0.003059 0.000000 255 255 255 255 -0.115012 -0.003057 0.000000 255 255 255 255 -0.114492 -0.005602 0.000000 255 255 255 255 -0.076771 -0.005605 0.000000 255 255 255 255 -0.113653 -0.008014 0.000000 255 255 255 255 -0.077610 -0.008018 0.000000 255 255 255 255 -0.112519 -0.010272 0.000000 255 255 255 255 -0.078743 -0.010277 0.000000 255 255 255 255 -0.111113 -0.012352 0.000000 255 255 255 255 -0.080148 -0.012356 0.000000 255 255 255 255 -0.109459 -0.014231 0.000000 255 255 255 255 -0.081802 -0.014234 0.000000 255 255 255 255 -0.107579 -0.015884 0.000000 255 255 255 255 -0.083680 -0.015887 0.000000 255 255 255 255 -0.105498 -0.017289 0.000000 255 255 255 255 -0.085759 -0.017291 0.000000 255 255 255 255 -0.103238 -0.018423 0.000000 255 255 255 255 -0.088016 -0.018424 0.000000 255 255 255 255 -0.100824 -0.019261 0.000000 255 255 255 255 -0.090428 -0.019262 0.000000 255 255 255 255 -0.098277 -0.019782 0.000000 255 255 255 255 -0.092971 -0.019782 0.000000 255 255 255 255 -0.095622 -0.019960 0.000000 255 255 255 255 --0.002654 0.019054 0.000000 255 255 255 255 -0.002652 0.019054 0.000000 255 255 255 255 --0.000001 0.019233 0.000000 255 255 255 255 --0.005199 0.018534 0.000000 255 255 255 255 -0.005197 0.018534 0.000000 255 255 255 255 --0.007612 0.017695 0.000000 255 255 255 255 -0.007610 0.017695 0.000000 255 255 255 255 --0.009871 0.016561 0.000000 255 255 255 255 -0.009869 0.016561 0.000000 255 255 255 255 --0.011951 0.015156 0.000000 255 255 255 255 -0.011949 0.015156 0.000000 255 255 255 255 --0.013829 0.013503 0.000000 255 255 255 255 -0.013828 0.013503 0.000000 255 255 255 255 --0.015483 0.011625 0.000000 255 255 255 255 -0.015481 0.011625 0.000000 255 255 255 255 --0.016889 0.009545 0.000000 255 255 255 255 -0.016887 0.009545 0.000000 255 255 255 255 --0.018023 0.007287 0.000000 255 255 255 255 -0.018021 0.007287 0.000000 255 255 255 255 --0.018861 0.004874 0.000000 255 255 255 255 -0.018859 0.004874 0.000000 255 255 255 255 --0.019382 0.002330 0.000000 255 255 255 255 -0.019380 0.002330 0.000000 255 255 255 255 --0.019560 -0.000323 0.000000 255 255 255 255 -0.019559 -0.000323 0.000000 255 255 255 255 --0.019382 -0.002975 0.000000 255 255 255 255 -0.019380 -0.002975 0.000000 255 255 255 255 --0.018861 -0.005519 0.000000 255 255 255 255 -0.018859 -0.005519 0.000000 255 255 255 255 --0.018023 -0.007932 0.000000 255 255 255 255 -0.018021 -0.007932 0.000000 255 255 255 255 --0.016889 -0.010190 0.000000 255 255 255 255 -0.016887 -0.010190 0.000000 255 255 255 255 --0.015483 -0.012270 0.000000 255 255 255 255 -0.015481 -0.012270 0.000000 255 255 255 255 --0.013829 -0.014148 0.000000 255 255 255 255 -0.013828 -0.014148 0.000000 255 255 255 255 --0.011951 -0.015802 0.000000 255 255 255 255 -0.011949 -0.015802 0.000000 255 255 255 255 --0.009871 -0.017207 0.000000 255 255 255 255 -0.009869 -0.017207 0.000000 255 255 255 255 --0.007612 -0.018341 0.000000 255 255 255 255 -0.007610 -0.018341 0.000000 255 255 255 255 --0.005199 -0.019179 0.000000 255 255 255 255 -0.005197 -0.019179 0.000000 255 255 255 255 --0.002654 -0.019700 0.000000 255 255 255 255 -0.002652 -0.019700 0.000000 255 255 255 255 --0.000001 -0.019878 0.000000 255 255 255 255 -3 0 1 2 -3 3 1 0 -3 3 4 1 -3 5 4 3 -3 5 6 4 -3 7 6 5 -3 7 8 6 -3 9 8 7 -3 9 10 8 -3 11 10 9 -3 11 12 10 -3 13 12 11 -3 13 14 12 -3 13 15 14 -3 16 15 13 -3 16 17 15 -3 18 17 16 -3 18 19 17 -3 20 19 18 -3 20 21 19 -3 22 21 20 -3 22 23 21 -3 24 23 22 -3 25 23 24 -3 25 26 23 -3 25 27 26 -3 28 27 25 -3 28 29 27 -3 30 29 28 -3 30 31 29 -3 32 31 30 -3 32 33 31 -3 34 33 32 -3 34 35 33 -3 36 35 34 -3 36 37 35 -3 38 37 36 -3 38 39 37 -3 40 39 38 -3 40 41 39 -3 42 41 40 -3 42 43 41 -3 44 43 42 -3 44 45 43 -3 46 45 44 -3 46 47 45 -3 48 49 50 -3 51 49 48 -3 51 52 49 -3 53 52 51 -3 53 54 52 -3 55 54 53 -3 55 56 54 -3 57 56 55 -3 57 58 56 -3 59 58 57 -3 59 60 58 -3 61 60 59 -3 61 62 60 -3 63 62 61 -3 63 64 62 -3 65 64 63 -3 65 66 64 -3 67 66 65 -3 67 68 66 -3 69 68 67 -3 69 70 68 -3 71 70 69 -3 71 72 70 -3 73 72 71 -3 73 74 72 -3 73 75 74 -3 76 75 73 -3 76 77 75 -3 78 77 76 -3 78 79 77 -3 80 79 78 -3 80 81 79 -3 82 81 80 -3 82 83 81 -3 84 83 82 -3 84 85 83 -3 86 85 84 -3 86 87 85 -3 88 87 86 -3 88 89 87 -3 90 89 88 -3 90 91 89 -3 92 91 90 -3 92 93 91 -3 94 93 92 -3 94 95 93 -3 96 97 98 -3 99 97 96 -3 99 100 97 -3 101 100 99 -3 101 102 100 -3 103 102 101 -3 103 104 102 -3 105 104 103 -3 105 106 104 -3 107 106 105 -3 107 108 106 -3 109 108 107 -3 109 110 108 -3 111 110 109 -3 111 112 110 -3 113 112 111 -3 113 114 112 -3 115 114 113 -3 115 116 114 -3 117 116 115 -3 117 118 116 -3 119 118 117 -3 119 120 118 -3 121 120 119 -3 121 122 120 -3 123 122 121 -3 123 124 122 -3 125 124 123 -3 125 126 124 -3 127 126 125 -3 127 128 126 -3 129 128 127 -3 129 130 128 -3 131 130 129 -3 131 132 130 -3 133 132 131 -3 133 134 132 -3 135 134 133 -3 135 136 134 -3 137 136 135 -3 137 138 136 -3 139 138 137 -3 139 140 138 -3 141 140 139 -3 141 142 140 -3 143 142 141 diff --git a/rsc/mesh/icon_group_vimix.ply b/rsc/mesh/icon_group_vimix.ply index c6176168..b43382b8 100644 --- a/rsc/mesh/icon_group_vimix.ply +++ b/rsc/mesh/icon_group_vimix.ply @@ -1,648 +1,50 @@ ply format ascii 1.0 -comment Created by Blender 2.91.2 - www.blender.org -element vertex 320 +comment Created in Blender version 4.2.2 LTS +element vertex 18 property float x property float y property float z -element face 318 +property float s +property float t +element face 20 property list uchar uint vertex_indices end_header --0.075364 0.080724 0.001667 -0.096283 0.097068 0.001667 --0.075364 0.097068 0.001667 -0.079936 0.080724 0.001667 -0.096283 -0.074543 0.001667 -0.079936 -0.074543 0.001667 --0.099885 -0.099059 0.001667 --0.083538 0.048037 0.001667 --0.099885 0.064381 0.001667 -0.063589 0.064381 0.001667 -0.047241 0.048037 0.001667 -0.063589 -0.099059 0.001667 --0.083538 -0.082715 0.001667 -0.047241 -0.082715 0.001667 -0.002248 0.021272 0.001667 -0.005256 0.021354 0.001667 -0.004134 0.021399 0.001667 -0.006351 0.021220 0.001667 -0.000438 0.020903 0.001667 -0.007418 0.021002 0.001667 -0.008452 0.020704 0.001667 --0.001277 0.020307 0.001667 -0.009452 0.020328 0.001667 -0.010412 0.019878 0.001667 --0.002882 0.019501 0.001667 -0.011331 0.019358 0.001667 --0.004361 0.018503 0.001667 -0.012206 0.018773 0.001667 -0.013032 0.018124 0.001667 --0.005696 0.017328 0.001667 -0.013808 0.017417 0.001667 -0.014529 0.016654 0.001667 --0.006871 0.015993 0.001667 -0.015193 0.015839 0.001667 --0.007870 0.014515 0.001667 -0.018036 0.015840 0.001667 -0.020300 0.015738 0.001667 -0.018036 0.015840 0.001667 -0.018036 0.015840 0.001667 -0.018036 0.015840 0.001667 -0.018036 0.015840 0.001667 -0.018036 0.015840 0.001667 -0.018036 0.015840 0.001667 -0.018036 0.015840 0.001667 -0.018036 0.015839 0.001667 -0.018036 0.015839 0.001667 -0.018036 0.015839 0.001667 -0.018036 0.015839 0.001667 -0.018036 0.015839 0.001667 -0.022471 0.015443 0.001667 -0.024530 0.014966 0.001667 -0.026456 0.014322 0.001667 --0.008676 0.012910 0.001667 -0.028230 0.013523 0.001667 -0.029832 0.012583 0.001667 --0.009271 0.011195 0.001667 -0.004134 0.011670 0.001667 -0.031243 0.011515 0.001667 -0.003568 0.011632 0.001667 -0.004700 0.011632 0.001667 -0.003026 0.011521 0.001667 -0.005242 0.011521 0.001667 -0.002511 0.011342 0.001667 -0.005757 0.011342 0.001667 -0.032441 0.010333 0.001667 -0.002029 0.011101 0.001667 -0.006239 0.011101 0.001667 --0.009641 0.009386 0.001667 -0.001586 0.010801 0.001667 -0.006682 0.010801 0.001667 -0.001185 0.010449 0.001667 -0.007083 0.010449 0.001667 -0.000833 0.010048 0.001667 -0.007435 0.010048 0.001667 -0.033408 0.009049 0.001667 -0.000533 0.009605 0.001667 -0.007735 0.009605 0.001667 -0.000291 0.009123 0.001667 -0.007977 0.009123 0.001667 --0.009768 0.007500 0.001667 -0.000112 0.008609 0.001667 -0.008156 0.008609 0.001667 -0.034123 0.007677 0.001667 -0.000001 0.008066 0.001667 -0.008267 0.008066 0.001667 --0.000037 0.007500 0.001667 -0.008305 0.007500 0.001667 -0.034566 0.006229 0.001667 --0.009768 0.007428 0.001667 -0.000001 0.006934 0.001667 -0.008267 0.006934 0.001667 --0.009768 0.007230 0.001667 --0.009768 0.006930 0.001667 -0.008156 0.006392 0.001667 -0.000112 0.006392 0.001667 --0.009768 0.006555 0.001667 --0.009768 0.006129 0.001667 -0.007977 0.005877 0.001667 -0.000291 0.005877 0.001667 -0.034719 0.004720 0.001667 --0.009768 0.005677 0.001667 -0.007735 0.005396 0.001667 -0.000533 0.005396 0.001667 --0.009768 0.005226 0.001667 -0.007435 0.004952 0.001667 -0.000833 0.004952 0.001667 --0.009768 0.004800 0.001667 -0.007083 0.004552 0.001667 -0.001185 0.004552 0.001667 --0.009768 0.004424 0.001667 -0.018036 0.001941 0.001667 -0.006682 0.004199 0.001667 -0.001586 0.004199 0.001667 --0.009768 0.004125 0.001667 -0.006239 0.003900 0.001667 -0.002029 0.003900 0.001667 --0.009768 0.003927 0.001667 --0.009768 0.003855 0.001667 -0.005757 0.003658 0.001667 -0.002511 0.003658 0.001667 --0.074397 -0.046979 0.001667 -0.005242 0.003479 0.001667 -0.003026 0.003479 0.001667 -0.004700 0.003368 0.001667 -0.003568 0.003368 0.001667 -0.004134 0.003330 0.001667 -0.018036 0.001667 0.001667 -0.018036 0.000911 0.001667 -0.018036 -0.000231 0.001667 -0.018036 -0.001663 0.001667 -0.018036 -0.003288 0.001667 -0.018036 -0.005009 0.001667 -0.018036 -0.006730 0.001667 -0.018036 -0.008355 0.001667 -0.018036 -0.009787 0.001667 -0.018036 -0.010929 0.001667 -0.018036 -0.011685 0.001667 -0.018036 -0.011959 0.001667 -0.017829 -0.015695 0.001667 -0.017222 -0.019311 0.001667 -0.016238 -0.022783 0.001667 -0.014898 -0.026090 0.001667 -0.013226 -0.029209 0.001667 -0.011243 -0.032119 0.001667 -0.008971 -0.034798 0.001667 -0.006432 -0.037223 0.001667 -0.003650 -0.039373 0.001667 -0.000646 -0.041226 0.001667 --0.047778 -0.045317 0.001667 --0.002558 -0.042759 0.001667 --0.005940 -0.043951 0.001667 --0.005799 -0.044332 0.001667 --0.014345 -0.045266 0.001667 --0.005409 -0.045386 0.001667 --0.014428 -0.045269 0.001667 --0.014193 -0.045678 0.001667 --0.014510 -0.045274 0.001667 --0.014592 -0.045279 0.001667 --0.014673 -0.045284 0.001667 --0.014755 -0.045290 0.001667 --0.014836 -0.045295 0.001667 --0.014918 -0.045301 0.001667 --0.015000 -0.045306 0.001667 --0.015082 -0.045310 0.001667 --0.015164 -0.045314 0.001667 --0.015246 -0.045316 0.001667 --0.015329 -0.045317 0.001667 --0.048194 -0.045525 0.001667 --0.031010 -0.045317 0.001667 --0.023293 -0.066183 0.001667 --0.022117 -0.045317 0.001667 --0.021986 -0.045671 0.001667 --0.004820 -0.046979 0.001667 --0.049343 -0.046099 0.001667 --0.021623 -0.046651 0.001667 --0.013772 -0.046815 0.001667 --0.051078 -0.046967 0.001667 --0.021076 -0.048131 0.001667 --0.013137 -0.048534 0.001667 --0.053254 -0.048054 0.001667 --0.004082 -0.048975 0.001667 --0.074558 -0.047105 0.001667 --0.074713 -0.047236 0.001667 --0.074863 -0.047373 0.001667 --0.075007 -0.047515 0.001667 --0.075145 -0.047663 0.001667 --0.075278 -0.047815 0.001667 --0.075405 -0.047973 0.001667 --0.075525 -0.048136 0.001667 --0.055723 -0.049288 0.001667 --0.020390 -0.049987 0.001667 --0.075640 -0.048303 0.001667 --0.075747 -0.048475 0.001667 --0.075849 -0.048651 0.001667 --0.012340 -0.050688 0.001667 --0.075943 -0.048831 0.001667 --0.076031 -0.049015 0.001667 --0.003244 -0.051240 0.001667 --0.076111 -0.049202 0.001667 --0.076184 -0.049391 0.001667 --0.058338 -0.050596 0.001667 --0.076249 -0.049583 0.001667 --0.076307 -0.049777 0.001667 --0.076357 -0.049973 0.001667 --0.076400 -0.050171 0.001667 --0.019611 -0.052093 0.001667 --0.076435 -0.050370 0.001667 --0.076463 -0.050571 0.001667 --0.076482 -0.050773 0.001667 --0.060954 -0.051903 0.001667 --0.011436 -0.053133 0.001667 --0.076494 -0.050975 0.001667 --0.076498 -0.051179 0.001667 --0.076415 -0.052124 0.001667 --0.002357 -0.053640 0.001667 --0.063423 -0.053138 0.001667 --0.018786 -0.054323 0.001667 --0.076178 -0.053003 0.001667 --0.075802 -0.053804 0.001667 --0.010478 -0.055724 0.001667 --0.065599 -0.054225 0.001667 --0.001469 -0.056039 0.001667 --0.075304 -0.054518 0.001667 --0.067334 -0.055093 0.001667 --0.017961 -0.056554 0.001667 --0.074700 -0.055135 0.001667 --0.068483 -0.055667 0.001667 --0.074008 -0.055644 0.001667 --0.073242 -0.056036 0.001667 --0.068899 -0.055875 0.001667 --0.009520 -0.058314 0.001667 --0.069782 -0.056223 0.001667 --0.072421 -0.056300 0.001667 --0.000631 -0.058304 0.001667 --0.070674 -0.056404 0.001667 --0.071559 -0.056426 0.001667 --0.017183 -0.058660 0.001667 -0.000107 -0.060300 0.001667 --0.008616 -0.060759 0.001667 --0.016497 -0.060516 0.001667 -0.000696 -0.061893 0.001667 --0.015949 -0.061996 0.001667 --0.007819 -0.062913 0.001667 -0.001086 -0.062947 0.001667 --0.015587 -0.062976 0.001667 --0.007184 -0.064632 0.001667 -0.001227 -0.063328 0.001667 --0.015456 -0.063330 0.001667 -0.001306 -0.063600 0.001667 --0.015377 -0.063602 0.001667 -0.001347 -0.063874 0.001667 --0.015336 -0.063876 0.001667 -0.001351 -0.064147 0.001667 --0.015332 -0.064149 0.001667 -0.001320 -0.064414 0.001667 --0.015363 -0.064416 0.001667 -0.001255 -0.064674 0.001667 --0.015428 -0.064676 0.001667 --0.006763 -0.065769 0.001667 -0.001158 -0.064922 0.001667 --0.015525 -0.064924 0.001667 -0.001030 -0.065156 0.001667 --0.015653 -0.065158 0.001667 -0.000873 -0.065373 0.001667 --0.015810 -0.065375 0.001667 -0.000688 -0.065568 0.001667 --0.015995 -0.065571 0.001667 -0.000476 -0.065740 0.001667 --0.016206 -0.065742 0.001667 -0.000240 -0.065885 0.001667 --0.016442 -0.065887 0.001667 --0.006611 -0.066181 0.001667 --0.000019 -0.066000 0.001667 --0.016702 -0.066002 0.001667 --0.000096 -0.066028 0.001667 --0.016779 -0.066030 0.001667 --0.000310 -0.066106 0.001667 --0.016992 -0.066108 0.001667 --0.000632 -0.066223 0.001667 --0.017314 -0.066225 0.001667 --0.006496 -0.066440 0.001667 --0.023178 -0.066442 0.001667 --0.001035 -0.066370 0.001667 --0.017718 -0.066372 0.001667 --0.001493 -0.066537 0.001667 --0.018176 -0.066539 0.001667 --0.006351 -0.066676 0.001667 --0.023033 -0.066678 0.001667 --0.001979 -0.066713 0.001667 --0.018661 -0.066715 0.001667 --0.006179 -0.066888 0.001667 --0.022861 -0.066890 0.001667 --0.002464 -0.066890 0.001667 --0.019146 -0.066892 0.001667 --0.005983 -0.067073 0.001667 --0.022665 -0.067075 0.001667 --0.002922 -0.067057 0.001667 --0.019604 -0.067059 0.001667 --0.003326 -0.067204 0.001667 --0.020008 -0.067206 0.001667 --0.005766 -0.067230 0.001667 --0.022449 -0.067232 0.001667 --0.003648 -0.067321 0.001667 --0.020330 -0.067323 0.001667 --0.005532 -0.067358 0.001667 --0.022215 -0.067360 0.001667 --0.003861 -0.067399 0.001667 --0.020543 -0.067401 0.001667 --0.005284 -0.067455 0.001667 --0.021966 -0.067457 0.001667 --0.003938 -0.067427 0.001667 --0.020620 -0.067429 0.001667 --0.004210 -0.067506 0.001667 --0.020893 -0.067508 0.001667 --0.005024 -0.067519 0.001667 --0.021707 -0.067521 0.001667 --0.004484 -0.067546 0.001667 --0.021167 -0.067548 0.001667 --0.004757 -0.067551 0.001667 --0.021439 -0.067553 0.001667 +-0.11977417 0.06797172 0 0.05882353 0 +-0.08921936 0.08527437 0 0.47058824 0 +-0.09253149 0.091741174 0 0 0 +0.118126765 0.091741174 0 0.4117647 0 +0.11171061 0.08527437 0 0.5294118 0 +0.118126765 -0.07195778 0 0.3529412 0 +-0.10799964 0.06797172 0 0.7647059 0 +0.11171061 -0.06849031 0 0.5882353 0 +-0.1199129 -0.09180902 0 0.1764706 0 +-0.1199129 0.06797172 0 0.11764706 0 +-0.10215573 0.050218314 0 0.8235294 0 +0.0931731 0.06797172 0 0.7058824 0 +0.075415924 0.050218314 0 0.88235295 0 +0.0931731 -0.08281095 0 0.64705884 0 +-0.10215573 -0.0740556 0 1 0 +0.075415924 -0.0740556 0 0.9411765 0 +0.0931731 -0.091652974 0 0.29411766 0 +0.0931731 -0.09180902 0 0.23529412 0 3 0 1 2 -3 0 3 1 -3 3 4 1 -3 5 4 3 -3 6 7 8 -3 7 9 8 -3 7 10 9 -3 10 11 9 -3 6 12 7 -3 13 11 10 -3 6 13 12 -3 6 11 13 -3 14 15 16 -3 14 17 15 -3 18 17 14 -3 18 19 17 -3 18 20 19 -3 21 20 18 -3 21 22 20 -3 21 23 22 -3 24 23 21 -3 24 25 23 -3 26 25 24 -3 26 27 25 -3 26 28 27 -3 29 28 26 -3 29 30 28 -3 29 31 30 -3 32 31 29 -3 32 33 31 -3 34 33 32 -3 35 36 37 -3 38 36 35 -3 39 36 38 -3 40 36 39 -3 41 36 40 -3 42 36 41 -3 43 36 42 -3 44 36 43 -3 45 36 44 -3 46 36 45 -3 47 36 46 -3 48 36 47 -3 34 48 33 -3 34 36 48 -3 34 49 36 -3 34 50 49 -3 34 51 50 -3 52 51 34 -3 52 53 51 -3 52 54 53 -3 55 54 52 -3 55 56 54 -3 56 57 54 -3 55 58 56 -3 59 57 56 -3 55 60 58 -3 61 57 59 -3 55 62 60 -3 63 57 61 -3 63 64 57 -3 55 65 62 -3 66 64 63 -3 67 65 55 -3 67 68 65 -3 69 64 66 -3 67 70 68 -3 71 64 69 -3 67 72 70 -3 73 64 71 -3 73 74 64 -3 67 75 72 -3 76 74 73 -3 67 77 75 -3 78 74 76 -3 79 77 67 -3 79 80 77 -3 81 74 78 -3 81 82 74 -3 79 83 80 -3 84 82 81 -3 79 85 83 -3 86 82 84 -3 86 87 82 -3 88 85 79 -3 88 89 85 -3 90 87 86 -3 91 89 88 -3 92 89 91 -3 93 87 90 -3 92 94 89 -3 95 94 92 -3 96 94 95 -3 97 87 93 -3 96 98 94 -3 97 99 87 -3 100 98 96 -3 101 99 97 -3 100 102 98 -3 103 102 100 -3 104 99 101 -3 103 105 102 -3 106 105 103 -3 107 99 104 -3 106 108 105 -3 109 108 106 -3 107 110 99 -3 111 110 107 -3 109 112 108 -3 113 112 109 -3 114 110 111 -3 113 115 112 -3 116 115 113 -3 117 115 116 -3 118 110 114 -3 117 119 115 -3 120 119 117 -3 121 110 118 -3 120 122 119 -3 123 110 121 -3 120 124 122 -3 125 110 123 -3 120 125 124 -3 120 110 125 -3 120 126 110 -3 120 127 126 -3 120 128 127 -3 120 129 128 -3 120 130 129 -3 120 131 130 -3 120 132 131 -3 120 133 132 -3 120 134 133 -3 120 135 134 -3 120 136 135 -3 120 137 136 -3 120 138 137 -3 120 139 138 -3 120 140 139 -3 120 141 140 -3 120 142 141 -3 120 143 142 -3 120 144 143 -3 120 145 144 -3 120 146 145 -3 120 147 146 -3 120 148 147 -3 148 149 147 -3 148 150 149 -3 148 151 150 -3 148 152 151 -3 152 153 151 -3 148 154 152 -3 155 153 152 -3 148 156 154 -3 148 157 156 -3 148 158 157 -3 148 159 158 -3 148 160 159 -3 148 161 160 -3 148 162 161 -3 148 163 162 -3 148 164 163 -3 148 165 164 -3 148 166 165 -3 120 167 148 -3 168 166 148 -3 169 170 168 -3 170 166 168 -3 169 171 170 -3 155 172 153 -3 120 173 167 -3 169 174 171 -3 175 172 155 -3 120 176 173 -3 169 177 174 -3 178 172 175 -3 120 179 176 -3 178 180 172 -3 181 179 120 -3 182 179 181 -3 183 179 182 -3 184 179 183 -3 185 179 184 -3 186 179 185 -3 187 179 186 -3 188 179 187 -3 188 189 179 -3 169 190 177 -3 191 189 188 -3 192 189 191 -3 193 189 192 -3 194 180 178 -3 195 189 193 -3 196 189 195 -3 194 197 180 -3 198 189 196 -3 199 189 198 -3 199 200 189 -3 201 200 199 -3 202 200 201 -3 203 200 202 -3 204 200 203 -3 169 205 190 -3 206 200 204 -3 207 200 206 -3 208 200 207 -3 208 209 200 -3 210 197 194 -3 211 209 208 -3 212 209 211 -3 213 209 212 -3 210 214 197 -3 213 215 209 -3 169 216 205 -3 217 215 213 -3 218 215 217 -3 219 214 210 -3 218 220 215 -3 219 221 214 -3 222 220 218 -3 222 223 220 -3 169 224 216 -3 225 223 222 -3 225 226 223 -3 227 226 225 -3 228 226 227 -3 228 229 226 -3 230 221 219 -3 228 231 229 -3 232 231 228 -3 230 233 221 -3 232 234 231 -3 235 234 232 -3 169 236 224 -3 230 237 233 -3 238 237 230 -3 169 239 236 -3 238 240 237 -3 169 241 239 -3 242 240 238 -3 242 243 240 -3 169 244 241 -3 245 243 242 -3 245 246 243 -3 169 247 244 -3 245 248 246 -3 169 249 247 -3 245 250 248 -3 169 251 249 -3 245 252 250 -3 169 253 251 -3 245 254 252 -3 169 255 253 -3 245 256 254 -3 169 257 255 -3 258 256 245 -3 258 259 256 -3 169 260 257 -3 258 261 259 -3 169 262 260 -3 258 263 261 -3 169 264 262 -3 258 265 263 -3 169 266 264 -3 258 267 265 -3 169 268 266 -3 258 269 267 -3 169 270 268 -3 271 269 258 -3 271 272 269 -3 169 273 270 -3 271 274 272 -3 169 275 273 -3 271 276 274 -3 169 277 275 -3 271 278 276 -3 169 279 277 -3 280 278 271 -3 281 279 169 -3 280 282 278 -3 281 283 279 -3 280 284 282 -3 281 285 283 -3 286 284 280 -3 287 285 281 -3 286 288 284 -3 287 289 285 -3 290 288 286 -3 291 289 287 -3 290 292 288 -3 291 293 289 -3 294 292 290 -3 295 293 291 -3 294 296 292 -3 295 297 293 -3 294 298 296 -3 295 299 297 -3 300 298 294 -3 301 299 295 -3 300 302 298 -3 301 303 299 -3 304 302 300 -3 305 303 301 -3 304 306 302 -3 305 307 303 -3 308 306 304 -3 309 307 305 -3 308 310 306 -3 309 311 307 -3 308 312 310 -3 309 313 311 -3 314 312 308 -3 315 313 309 -3 314 316 312 -3 315 317 313 -3 318 316 314 -3 319 317 315 +3 1 3 2 +3 1 4 3 +3 4 5 3 +3 0 6 1 +3 7 5 4 +3 8 0 9 +3 8 6 0 +3 8 10 6 +3 10 11 6 +3 10 12 11 +3 12 13 11 +3 8 14 10 +3 15 13 12 +3 13 5 7 +3 13 16 5 +3 8 15 14 +3 8 13 15 +3 8 16 13 +3 8 17 16 diff --git a/rsc/mesh/icon_rightarrow.ply b/rsc/mesh/icon_rightarrow.ply deleted file mode 100644 index 47114565..00000000 --- a/rsc/mesh/icon_rightarrow.ply +++ /dev/null @@ -1,364 +0,0 @@ -ply -format ascii 1.0 -comment Created by Blender 2.91.0 - www.blender.org -element vertex 178 -property float x -property float y -property float z -element face 176 -property list uchar uint vertex_indices -end_header --0.007848 0.007826 0.000000 --0.006431 0.036270 0.000000 --0.007848 0.036270 0.000000 --0.004848 0.036270 0.000000 --0.003156 0.036270 0.000000 --0.001410 0.036270 0.000000 -0.000337 0.036270 0.000000 -0.002029 0.036270 0.000000 -0.003612 0.036270 0.000000 -0.005029 0.036270 0.000000 -0.006227 0.036270 0.000000 -0.007151 0.036270 0.000000 -0.007746 0.036270 0.000000 -0.007956 0.036270 0.000000 -0.007956 0.007826 0.000000 --0.044254 0.028970 0.000000 --0.041697 0.028916 0.000000 --0.042967 0.029065 0.000000 -0.041804 0.028897 0.000000 -0.044362 0.028951 0.000000 -0.043074 0.029046 0.000000 --0.045523 0.028615 0.000000 -0.045631 0.028597 0.000000 --0.040480 0.028538 0.000000 -0.040587 0.028519 0.000000 --0.046737 0.027987 0.000000 -0.046845 0.027968 0.000000 --0.039351 0.027945 0.000000 -0.039459 0.027926 0.000000 --0.047861 0.027070 0.000000 -0.047969 0.027051 0.000000 --0.038348 0.027152 0.000000 -0.038455 0.027133 0.000000 --0.037505 0.026175 0.000000 -0.037612 0.026156 0.000000 --0.048301 0.026630 0.000000 -0.048408 0.026611 0.000000 --0.049517 0.025415 0.000000 -0.049624 0.025396 0.000000 --0.036858 0.025027 0.000000 -0.036966 0.025008 0.000000 --0.051354 0.023578 0.000000 -0.051461 0.023559 0.000000 --0.036444 0.023724 0.000000 -0.036552 0.023705 0.000000 --0.036298 0.022281 0.000000 -0.036406 0.022262 0.000000 --0.053656 0.021276 0.000000 -0.053763 0.021257 0.000000 --0.036298 0.021997 0.000000 -0.036406 0.007826 0.000000 --0.036298 0.021211 0.000000 --0.056269 0.018664 0.000000 -0.056376 0.018645 0.000000 --0.036298 0.020023 0.000000 --0.036298 0.018534 0.000000 --0.059037 0.015897 0.000000 -0.059144 0.015878 0.000000 --0.036298 0.016844 0.000000 --0.036298 0.015054 0.000000 --0.061805 0.013129 0.000000 -0.061912 0.013110 0.000000 --0.036298 0.013263 0.000000 --0.036298 0.011574 0.000000 --0.064418 0.010517 0.000000 -0.064525 0.010498 0.000000 --0.036298 0.010085 0.000000 --0.066720 0.008215 0.000000 -0.066828 0.008196 0.000000 --0.036298 0.008897 0.000000 --0.036298 0.008110 0.000000 --0.068557 0.006379 0.000000 -0.068664 0.006360 0.000000 --0.036298 0.007826 0.000000 --0.069773 0.005163 0.000000 -0.069880 0.005144 0.000000 --0.070213 0.004723 0.000000 -0.070320 0.004704 0.000000 --0.070819 0.004030 0.000000 -0.070926 0.004011 0.000000 --0.071315 0.003279 0.000000 -0.071422 0.003260 0.000000 --0.071701 0.002483 0.000000 -0.071808 0.002464 0.000000 --0.071976 0.001653 0.000000 -0.072084 0.001634 0.000000 --0.072142 0.000800 0.000000 -0.072249 0.000780 0.000000 --0.072197 -0.000065 0.000000 -0.072304 -0.000084 0.000000 --0.072142 -0.000930 0.000000 -0.072249 -0.000949 0.000000 --0.071976 -0.001783 0.000000 -0.072084 -0.001802 0.000000 --0.071701 -0.002613 0.000000 -0.071808 -0.002633 0.000000 --0.071315 -0.003410 0.000000 -0.071422 -0.003429 0.000000 --0.070819 -0.004160 0.000000 -0.070926 -0.004179 0.000000 --0.070213 -0.004854 0.000000 -0.070320 -0.004873 0.000000 --0.069773 -0.005293 0.000000 -0.069880 -0.005312 0.000000 --0.068557 -0.006509 0.000000 -0.068664 -0.006528 0.000000 --0.066720 -0.008345 0.000000 --0.036298 -0.007975 0.000000 --0.007848 -0.007975 0.000000 -0.007956 -0.007975 0.000000 -0.036406 -0.007975 0.000000 -0.066828 -0.008364 0.000000 --0.036298 -0.022412 0.000000 --0.007848 -0.036419 0.000000 --0.007043 -0.036419 0.000000 --0.001921 -0.036419 0.000000 -0.007956 -0.036419 0.000000 -0.036406 -0.008260 0.000000 -0.036406 -0.009046 0.000000 --0.064418 -0.010647 0.000000 -0.064525 -0.010666 0.000000 -0.036406 -0.010234 0.000000 -0.036406 -0.011723 0.000000 --0.061805 -0.013260 0.000000 -0.061912 -0.013278 0.000000 -0.036406 -0.013413 0.000000 --0.059037 -0.016027 0.000000 -0.059144 -0.016046 0.000000 -0.036406 -0.015203 0.000000 -0.036406 -0.016993 0.000000 --0.056269 -0.018795 0.000000 -0.056376 -0.018813 0.000000 -0.036406 -0.018683 0.000000 -0.036406 -0.020172 0.000000 --0.053656 -0.021407 0.000000 -0.053763 -0.021426 0.000000 -0.036406 -0.021360 0.000000 -0.036406 -0.022146 0.000000 --0.051354 -0.023709 0.000000 -0.051461 -0.023728 0.000000 -0.036406 -0.022431 0.000000 --0.036444 -0.023855 0.000000 -0.036552 -0.023874 0.000000 --0.049517 -0.025545 0.000000 -0.049624 -0.025564 0.000000 --0.036858 -0.025158 0.000000 -0.036966 -0.025176 0.000000 --0.037505 -0.026305 0.000000 -0.037612 -0.026324 0.000000 --0.048301 -0.026761 0.000000 -0.048408 -0.026780 0.000000 --0.038348 -0.027283 0.000000 -0.038455 -0.027302 0.000000 --0.047861 -0.027200 0.000000 -0.047969 -0.027219 0.000000 --0.046737 -0.028118 0.000000 -0.046845 -0.028136 0.000000 --0.039351 -0.028075 0.000000 -0.039459 -0.028094 0.000000 --0.040479 -0.028668 0.000000 -0.040587 -0.028687 0.000000 --0.045523 -0.028746 0.000000 -0.045631 -0.028765 0.000000 --0.041697 -0.029047 0.000000 -0.041804 -0.029066 0.000000 --0.044254 -0.029100 0.000000 -0.044362 -0.029119 0.000000 --0.042967 -0.029196 0.000000 -0.043074 -0.029215 0.000000 --0.000229 -0.036419 0.000000 -0.006539 -0.036419 0.000000 -0.004956 -0.036419 0.000000 -0.001517 -0.036419 0.000000 -0.003264 -0.036419 0.000000 --0.003504 -0.036419 0.000000 --0.004921 -0.036419 0.000000 --0.006120 -0.036419 0.000000 --0.007638 -0.036419 0.000000 -3 0 1 2 -3 0 3 1 -3 0 4 3 -3 0 5 4 -3 0 6 5 -3 0 7 6 -3 0 8 7 -3 0 9 8 -3 0 10 9 -3 0 11 10 -3 0 12 11 -3 0 13 12 -3 0 14 13 -3 15 16 17 -3 18 19 20 -3 21 16 15 -3 18 22 19 -3 21 23 16 -3 24 22 18 -3 25 23 21 -3 24 26 22 -3 25 27 23 -3 28 26 24 -3 29 27 25 -3 28 30 26 -3 29 31 27 -3 32 30 28 -3 29 33 31 -3 34 30 32 -3 35 33 29 -3 34 36 30 -3 37 33 35 -3 34 38 36 -3 37 39 33 -3 40 38 34 -3 41 39 37 -3 40 42 38 -3 41 43 39 -3 44 42 40 -3 41 45 43 -3 46 42 44 -3 47 45 41 -3 46 48 42 -3 47 49 45 -3 50 48 46 -3 47 51 49 -3 52 51 47 -3 50 53 48 -3 52 54 51 -3 52 55 54 -3 56 55 52 -3 50 57 53 -3 56 58 55 -3 56 59 58 -3 60 59 56 -3 50 61 57 -3 60 62 59 -3 60 63 62 -3 64 63 60 -3 50 65 61 -3 64 66 63 -3 67 66 64 -3 50 68 65 -3 67 69 66 -3 67 70 69 -3 71 70 67 -3 50 72 68 -3 71 73 70 -3 71 0 73 -3 71 14 0 -3 71 50 14 -3 71 72 50 -3 74 72 71 -3 74 75 72 -3 76 75 74 -3 76 77 75 -3 78 77 76 -3 78 79 77 -3 80 79 78 -3 80 81 79 -3 82 81 80 -3 82 83 81 -3 84 83 82 -3 84 85 83 -3 86 85 84 -3 86 87 85 -3 88 87 86 -3 88 89 87 -3 90 89 88 -3 90 91 89 -3 92 91 90 -3 92 93 91 -3 94 93 92 -3 94 95 93 -3 96 95 94 -3 96 97 95 -3 98 97 96 -3 98 99 97 -3 100 99 98 -3 100 101 99 -3 102 101 100 -3 102 103 101 -3 104 103 102 -3 104 105 103 -3 106 105 104 -3 106 107 105 -3 107 108 105 -3 108 109 105 -3 109 110 105 -3 110 111 105 -3 106 112 107 -3 113 109 108 -3 113 114 109 -3 114 115 109 -3 115 116 109 -3 117 111 110 -3 118 111 117 -3 119 112 106 -3 118 120 111 -3 121 120 118 -3 122 120 121 -3 123 112 119 -3 122 124 120 -3 125 124 122 -3 126 112 123 -3 125 127 124 -3 128 127 125 -3 129 127 128 -3 130 112 126 -3 129 131 127 -3 132 131 129 -3 133 131 132 -3 134 112 130 -3 133 135 131 -3 136 135 133 -3 137 135 136 -3 138 112 134 -3 137 139 135 -3 140 139 137 -3 138 141 112 -3 142 139 140 -3 143 141 138 -3 142 144 139 -3 143 145 141 -3 146 144 142 -3 143 147 145 -3 148 144 146 -3 149 147 143 -3 148 150 144 -3 149 151 147 -3 152 150 148 -3 153 151 149 -3 152 154 150 -3 155 151 153 -3 152 156 154 -3 155 157 151 -3 158 156 152 -3 155 159 157 -3 160 156 158 -3 161 159 155 -3 160 162 156 -3 161 163 159 -3 164 162 160 -3 165 163 161 -3 164 166 162 -3 165 167 163 -3 168 166 164 -3 115 169 116 -3 169 170 116 -3 169 171 170 -3 169 172 171 -3 172 173 171 -3 114 174 115 -3 114 175 174 -3 114 176 175 -3 113 177 114 diff --git a/src/Decorations.cpp b/src/Decorations.cpp index 0807e55f..99773b4f 100644 --- a/src/Decorations.cpp +++ b/src/Decorations.cpp @@ -543,22 +543,14 @@ Symbol::Symbol(Type t, glm::vec3 pos) : Node(), type_(t) shadows[RECEIVE]= shadow; icons[TEXT] = new Mesh("mesh/icon_text.ply"); shadows[TEXT] = shadow; - icons[DOTS] = new Mesh("mesh/icon_dots.ply"); - shadows[DOTS] = nullptr; icons[BUSY] = new Mesh("mesh/icon_circles.ply"); shadows[BUSY] = nullptr; icons[LOCK] = new Mesh("mesh/icon_lock.ply"); shadows[LOCK] = shadow; icons[UNLOCK] = new Mesh("mesh/icon_unlock.ply"); shadows[UNLOCK] = shadow; - icons[EYE] = new Mesh("mesh/icon_eye.ply"); - shadows[EYE] = shadow; - icons[EYESLASH] = new Mesh("mesh/icon_eye_slash.ply"); - shadows[EYESLASH] = shadow; icons[TELEVISION] = new Mesh("mesh/icon_tv.ply"); shadows[TELEVISION] = shadow; - icons[ARROWS] = new Mesh("mesh/icon_rightarrow.ply"); - shadows[ARROWS] = shadow; icons[ROTATION] = new Mesh("mesh/border_handles_rotation.ply"); shadows[ROTATION] = shadow; icons[CIRCLE] = new Mesh("mesh/icon_circle.ply"); @@ -577,6 +569,22 @@ Symbol::Symbol(Type t, glm::vec3 pos) : Node(), type_(t) shadows[PLAY] = shadow; icons[FFWRD] = new Mesh("mesh/icon_fastforward.ply"); shadows[FFWRD] = shadow; + icons[BLEND_NORMAL] = new Mesh("mesh/icon_blend_normal.ply"); + shadows[BLEND_NORMAL] = nullptr; + icons[BLEND_SCREEN] = new Mesh("mesh/icon_blend_add.ply"); + shadows[BLEND_SCREEN] = nullptr; + icons[BLEND_SUBTRACT] = new Mesh("mesh/icon_blend_subtract.ply"); + shadows[BLEND_SUBTRACT]= nullptr; + icons[BLEND_MULT] = new Mesh("mesh/icon_blend_mult.ply"); + shadows[BLEND_MULT]= nullptr; + icons[BLEND_H_LIGHT] = new Mesh("mesh/icon_blend_hard_light.ply"); + shadows[BLEND_H_LIGHT]= nullptr; + icons[BLEND_S_LIGHT] = new Mesh("mesh/icon_blend_soft_light.ply"); + shadows[BLEND_S_LIGHT]= nullptr; + icons[BLEND_S_SUB] = new Mesh("mesh/icon_blend_soft_sub.ply"); + shadows[BLEND_S_SUB]= nullptr; + icons[BLEND_LIGHTEN] = new Mesh("mesh/icon_blend_lighten.ply"); + shadows[BLEND_LIGHTEN]= nullptr; icons[EMPTY] = new Mesh("mesh/icon_empty.ply"); shadows[EMPTY] = shadow; } diff --git a/src/Decorations.h b/src/Decorations.h index eb32a646..9b0db962 100644 --- a/src/Decorations.h +++ b/src/Decorations.h @@ -96,14 +96,10 @@ class Symbol : public Node SHARE, RECEIVE, TEXT, - DOTS, BUSY, LOCK, UNLOCK, - EYE, - EYESLASH, TELEVISION, - ARROWS, ROTATION, CROP, CIRCLE, @@ -114,6 +110,14 @@ class Symbol : public Node CROSS, PLAY, FFWRD, + BLEND_NORMAL, + BLEND_SCREEN, + BLEND_SUBTRACT, + BLEND_MULT, + BLEND_H_LIGHT, + BLEND_S_LIGHT, + BLEND_S_SUB, + BLEND_LIGHTEN, EMPTY } Type; Symbol(Type t, glm::vec3 pos = glm::vec3(0.f)); @@ -156,7 +160,7 @@ class Character : public Node void draw (glm::mat4 modelview, glm::mat4 projection) override; void accept (Visitor& v) override; - GlmToolkit::AxisAlignedBoundingBox bbox() const { return font_->bbox(); } + GlmToolkit::AxisAlignedBoundingBox bbox() const { return font_->bbox().scaled(glm::vec3(scale_.y, 1.f, 1.f)); } glm::vec4 color; diff --git a/src/DisplaysView.cpp b/src/DisplaysView.cpp index 6d0e013d..f58be396 100644 --- a/src/DisplaysView.cpp +++ b/src/DisplaysView.cpp @@ -553,7 +553,7 @@ void DisplaysView::draw() Settings::application.windows[0].fullscreen); // Set window position depending on icons size ImGuiToolkit::PushFont(ImGuiToolkit::FONT_LARGE); - ImGui::SetNextWindowPos(ImVec2(P.x, P.y - 1.5f * ImGui::GetFrameHeight() ), ImGuiCond_Always); + ImGui::SetNextWindowPos(ImVec2(P.x, P.y - 2.f * ImGui::GetFrameHeight() ), ImGuiCond_Always); if (ImGui::Begin("##DisplaysMaskOptions", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoBringToFrontOnFocus )) diff --git a/src/GeometryView.cpp b/src/GeometryView.cpp index 691a673e..7e796388 100644 --- a/src/GeometryView.cpp +++ b/src/GeometryView.cpp @@ -298,7 +298,7 @@ void GeometryView::draw() P = Rendering::manager().project(glm::vec3(P, 0.f), scene.root()->transform_, false); // Set window position depending on icons size ImGuiToolkit::PushFont(ImGuiToolkit::FONT_LARGE); - ImGui::SetNextWindowPos(ImVec2(P.x, P.y - 1.5f * ImGui::GetFrameHeight() ), ImGuiCond_Always); + ImGui::SetNextWindowPos(ImVec2(P.x, P.y - 2.f * ImGui::GetFrameHeight() ), ImGuiCond_Always); if (ImGui::Begin("##GeometryViewOptions", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoBringToFrontOnFocus )) @@ -312,28 +312,29 @@ void GeometryView::draw() ImGui::PushStyleColor(ImGuiCol_PopupBg, ImVec4(0.14f, 0.14f, 0.14f, 0.9f)); // toggle sources visibility flag - std::string _label = std::to_string(hidden_count_) + " source" + (hidden_count_>1?"s ":" ") - + "outside mixing circle " + ICON_FA_MOON; + std::string _label = Settings::application.views[mode_].ignore_mix ? "Show " : "Hide "; + _label += "non visible sources\n("; + _label += std::to_string(hidden_count_) + " source" + (hidden_count_>1?"s are ":" is ") + "outside mixing circle)"; ImGuiToolkit::ButtonIconToggle(12, 0, &Settings::application.views[mode_].ignore_mix, _label.c_str()); // select layers visibility - static std::vector< std::string > _tooltips = { - {"Sources in Background layer"}, - {"Sources in Workspace layer"}, - {"Sources in Foreground layer"}, - {"Sources in all layers (total)"} - }; - std::vector< std::tuple > _workspaces = { - {ICON_WORKSPACE_BACKGROUND, std::to_string( workspaces_counts_[Source::WORKSPACE_BACKGROUND] )}, - {ICON_WORKSPACE_CENTRAL, std::to_string( workspaces_counts_[Source::WORKSPACE_CENTRAL] )}, - {ICON_WORKSPACE_FOREGROUND, std::to_string( workspaces_counts_[Source::WORKSPACE_FOREGROUND] )}, - {ICON_WORKSPACE, std::to_string( workspaces_counts_[Source::WORKSPACE_ANY] )} + static std::vector > _workspaces + = {{ICON_WORKSPACE_BACKGROUND, "Show only sources in\nBackground layer ("}, + {ICON_WORKSPACE_CENTRAL, "Show only sources in\nWorkspace layer ("}, + {ICON_WORKSPACE_FOREGROUND, "Show only sources in\nForeground layer ("}, + {ICON_WORKSPACE, "Show sources in all layers ("} }; ImGui::SameLine(0, IMGUI_SAME_LINE); - ImGui::SetNextItemWidth( ImGui::GetTextLineHeightWithSpacing() * 2.6); - if ( ImGuiToolkit::ComboIcon ("##WORKSPACE", &Settings::application.current_workspace, _workspaces, _tooltips) ){ - // need full update - Mixer::manager().setView(mode_); + std::ostringstream oss; + oss << std::get<2>(_workspaces[Settings::application.current_workspace]); + oss << std::to_string(workspaces_counts_[Settings::application.current_workspace]); + oss << ")"; + if (ImGuiToolkit::ButtonIcon(std::get<0>( + _workspaces[Settings::application.current_workspace]), + std::get<1>( + _workspaces[Settings::application.current_workspace]), + oss.str().c_str() )) { + Settings::application.current_workspace = (Settings::application.current_workspace+1)%4; } ImGui::PopStyleColor(6); @@ -1597,6 +1598,52 @@ void GeometryView::terminate(bool force) adaptGridToSource(); } + +View::Cursor GeometryView::over(glm::vec2 pos) +{ + View::Cursor ret = Cursor(); + + // unproject mouse coordinate into scene coordinates + glm::vec3 scene_point_ = Rendering::manager().unProject(pos); + + // picking visitor traverses the scene + PickingVisitor pv(scene_point_, false); + scene.accept(pv); + + // + // mouse over current source + // + Source *current = Mixer::manager().currentSource(); + if (current != nullptr) { + // reset mouse over handles + current->handles_[mode_][Handles::EDIT_CROP]->color = glm::vec4(COLOR_HIGHLIGHT_SOURCE, 0.6f); + current->handles_[mode_][Handles::EDIT_SHAPE]->color = glm::vec4(COLOR_HIGHLIGHT_SOURCE, 0.6f); + + // picking visitor found nodes? + if (!pv.empty()) { + // find pick in the current source + std::pair pick = {nullptr, glm::vec2(0.f)}; + auto itp = pv.rbegin(); + for (; itp != pv.rend(); ++itp){ + // test if source contains this node + Source::hasNode is_in_source((*itp).first ); + if ( is_in_source( current ) ){ + // a node in the current source was clicked ! + pick = *itp; + break; + } + } + // mouse over handles + if (pick.first == current->handles_[mode_][Handles::EDIT_CROP]) + current->handles_[mode_][Handles::EDIT_CROP]->color = glm::vec4(COLOR_HIGHLIGHT_SOURCE, 1.f); + else if (pick.first == current->handles_[mode_][Handles::EDIT_SHAPE]) + current->handles_[mode_][Handles::EDIT_SHAPE]->color = glm::vec4(COLOR_HIGHLIGHT_SOURCE, 1.f); + } + } + + return ret; +} + #define MAX_DURATION 1000.f #define MIN_SPEED_A 0.005f #define MAX_SPEED_A 0.5f diff --git a/src/GeometryView.h b/src/GeometryView.h index 6015c1b5..473233f4 100644 --- a/src/GeometryView.h +++ b/src/GeometryView.h @@ -22,6 +22,7 @@ class GeometryView : public View Cursor grab (Source *s, glm::vec2 from, glm::vec2 to, std::pair pick) override; void terminate(bool force = false) override; void arrow (glm::vec2) override; + Cursor over (glm::vec2) override; private: Surface *output_surface_; diff --git a/src/ImGuiToolkit.cpp b/src/ImGuiToolkit.cpp index 0ef7c783..e0e5ba58 100644 --- a/src/ImGuiToolkit.cpp +++ b/src/ImGuiToolkit.cpp @@ -576,17 +576,19 @@ bool ImGuiToolkit::ComboIcon (const char* label, int* current_item, char text_buf[256]; ImFormatString(text_buf, IM_ARRAYSIZE(text_buf), " %s", std::get<2>( items.at(*current_item) ).c_str()); if ( ImGui::BeginCombo( label, text_buf, ImGuiComboFlags_None) ) { - for (int p = 0; p < (int) items.size(); ++p){ - ImGui::PushID((void*)(intptr_t)p); - if (ImGuiToolkit::SelectableIcon( std::get<0>( items.at(p) ), - std::get<1>( items.at(p) ), - std::get<2>( items.at(p) ).c_str(), - p == *current_item) ) { - *current_item = p; + for (auto item = items.cbegin(); item != items.cend(); ++item) { + int index = item - items.cbegin(); + ImGui::PushID((void*)(intptr_t)index); + if (ImGuiToolkit::SelectableIcon(std::get<0>(*item), + std::get<1>(*item ), + std::get<2>(*item).c_str(), + index == *current_item) ) { + *current_item = index; ret = true; } - if (ImGui::IsItemHovered() && p < (int) tooltips.size() ) - ImGuiToolkit::ToolTip( tooltips.at(p).c_str() ); + + if (ImGui::IsItemHovered() && index < (int) tooltips.size() ) + ImGuiToolkit::ToolTip( tooltips.at(index).c_str() ); ImGui::PopID(); } ImGui::EndCombo(); diff --git a/src/ImGuiVisitor.cpp b/src/ImGuiVisitor.cpp index 6ba4c655..e2bcb53e 100644 --- a/src/ImGuiVisitor.cpp +++ b/src/ImGuiVisitor.cpp @@ -197,40 +197,11 @@ void ImGuiVisitor::visit(Shader &n) // ImGui::SameLine(0, 5); ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN); int mode = n.blending; - if (ImGui::Combo("Blending", &mode, "Normal\0Screen\0Subtract\0Multiply\0Soft light" - "\0Hard light\0Soft subtract\0Lighten only\0") ) { + ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN); + if (ImGuiToolkit::ComboIcon("Blending", &mode, Shader::blendingFunction) ) + { n.blending = Shader::BlendMode(mode); - - oss << "Blending "; - switch(n.blending) { - case Shader::BLEND_OPACITY: - oss<<"Normal"; - break; - case Shader::BLEND_SCREEN: - oss<<"Screen"; - break; - case Shader::BLEND_SUBTRACT: - oss<<"Subtract"; - break; - case Shader::BLEND_MULTIPLY: - oss<<"Multiply"; - break; - case Shader::BLEND_HARD_LIGHT: - oss<<"Hard light"; - break; - case Shader::BLEND_SOFT_LIGHT: - oss<<"Soft light"; - break; - case Shader::BLEND_SOFT_SUBTRACT: - oss<<"Soft subtract"; - break; - case Shader::BLEND_LIGHTEN_ONLY: - oss<<"Lighten only"; - break; - case Shader::BLEND_NONE: - oss<<"None"; - break; - } + oss << "Blending " << std::get<2>(Shader::blendingFunction[mode]).c_str(); Action::manager().store(oss.str()); } @@ -440,7 +411,10 @@ void ImGuiVisitor::visit (Source& s) oss << s.name() << ": "; // blending selection + Shader::BlendMode prevblend = s.blendingShader()->blending; s.blendingShader()->accept(*this); + if (s.blendingShader()->blending != prevblend) + s.touch(); // Draw different info if failed or succeed if ( !s.failed() ) { diff --git a/src/InputMappingWindow.cpp b/src/InputMappingWindow.cpp index e386a426..490bd50e 100644 --- a/src/InputMappingWindow.cpp +++ b/src/InputMappingWindow.cpp @@ -345,7 +345,7 @@ void InputMappingWindow::SliderParametersCallback(SourceCallback *callback, cons edited->setValue(val); ImGui::SameLine(0, IMGUI_SAME_LINE / 2); - ImGuiToolkit::Indication("Depth value to place the source front (12) or back (0) in the scene.", 6, 6); + ImGuiToolkit::Indication("Depth value to place the source front (12) or back (0) in the scene.", 11, 16); } break; @@ -388,7 +388,7 @@ void InputMappingWindow::SliderParametersCallback(SourceCallback *callback, cons edited->setValue(val); ImGui::SameLine(0, IMGUI_SAME_LINE / 2); - ImGuiToolkit::Indication("Factor to multiply the playback speed of a video source.", 16, 7); + ImGuiToolkit::Indication("Factor to multiply the playback speed of a video source.", 0, 12); } break; @@ -579,7 +579,7 @@ void InputMappingWindow::SliderParametersCallback(SourceCallback *callback, cons edited->setValue(val); ImGui::SameLine(0, IMGUI_SAME_LINE / 2); - ImGuiToolkit::Indication("Hue shift for color correction.", 12, 4); + ImGuiToolkit::Indication("Hue shift for color correction.", 3, 4); } break; @@ -604,7 +604,7 @@ void InputMappingWindow::SliderParametersCallback(SourceCallback *callback, cons edited->setValue(val); ImGui::SameLine(0, IMGUI_SAME_LINE / 3); - ImGuiToolkit::Indication("Threshold for color correction.", 8, 1); + ImGuiToolkit::Indication("Threshold for color correction.", 5, 4); } break; @@ -650,7 +650,7 @@ void InputMappingWindow::SliderParametersCallback(SourceCallback *callback, cons if (ImGui::Combo("##CALLBACK_INVERT", &val, "None\0Color RGB\0Luminance\0")) edited->setValue( (float) val); ImGui::SameLine(0, IMGUI_SAME_LINE / 2); - ImGuiToolkit::Indication("Invert mode for color correction.", 6, 16); + ImGuiToolkit::Indication("Invert mode for color correction.", 4, 4); } break; diff --git a/src/LayerView.cpp b/src/LayerView.cpp index 65d7c09a..f7d6d589 100644 --- a/src/LayerView.cpp +++ b/src/LayerView.cpp @@ -96,7 +96,34 @@ void LayerView::draw() // initialize the verification of the selection static bool candidate_flatten_group = false; - // display popup menu + // display popup menu source + if (show_context_menu_ == MENU_SOURCE) { + ImGui::OpenPopup("LayerSourceContextMenu"); + show_context_menu_ = MENU_NONE; + } + if (ImGui::BeginPopup("LayerSourceContextMenu")) { + // work on the current source + Source *s = Mixer::manager().currentSource(); + if (s != nullptr) { + for (auto bmode = Shader::blendingFunction.cbegin(); + bmode != Shader::blendingFunction.cend(); + ++bmode) { + int index = bmode - Shader::blendingFunction.cbegin(); + if (ImGuiToolkit::MenuItemIcon(std::get<0>(*bmode), + std::get<1>(*bmode), + std::get<2>(*bmode).c_str(), + nullptr, + s->blendingShader()->blending == index)) { + s->blendingShader()->blending = Shader::BlendMode(index); + s->touch(); + Action::manager().store(s->name() + ": Blending " + std::get<2>(*bmode)); + } + } + } + ImGui::EndPopup(); + } + + // display popup menu selection if (show_context_menu_ == MENU_SELECTION) { // initialize the verification of the selection @@ -269,6 +296,14 @@ std::pair LayerView::pick(glm::vec2 P) else if ( pick.first == s->symbol_ ) { UserInterface::manager().showSourceEditor(s); } + // pick the initials: show in panel + else if ( pick.first == s->initial_1_ ) { + UserInterface::manager().setSourceInPanel(s); + } + // pick blending icon + else if (pick.first == s->blendmode_->activeChild()) { + openContextMenu(MENU_SOURCE); + } } else pick = { nullptr, glm::vec2(0.f) }; @@ -356,9 +391,11 @@ View::Cursor LayerView::grab (Source *s, glm::vec2 from, glm::vec2 to, std::pair current_action_ = s->name() + ": " + info.str(); if ( d > LAYER_FOREGROUND ) - info << "\n (Foreground)"; + info << "\n (Foreground layer)"; else if ( d < LAYER_BACKGROUND ) - info << "\n (Background)"; + info << "\n (Background layer)"; + else + info << "\n (Workspace layer)"; return Cursor(Cursor_ResizeNESW, info.str() ); } @@ -376,11 +413,18 @@ View::Cursor LayerView::over (glm::vec2 pos) if (s != nullptr && s->ready()) { s->symbol_->color = glm::vec4( COLOR_HIGHLIGHT_SOURCE, 1.f ); + s->initial_0_->color = glm::vec4( COLOR_HIGHLIGHT_SOURCE, 1.f ); + s->initial_1_->color = glm::vec4( COLOR_HIGHLIGHT_SOURCE, 1.f ); const ImVec4 h = ImGuiToolkit::HighlightColor(); // overlay symbol if ( pick.first == s->symbol_ ) s->symbol_->color = glm::vec4( h.x, h.y, h.z, 1.f ); + // overlay initials + else if ( pick.first == s->initial_1_ ) { + s->initial_1_->color = glm::vec4( h.x, h.y, h.z, 1.f ); + s->initial_0_->color = glm::vec4( h.x, h.y, h.z, 1.f ); + } } return ret; diff --git a/src/MixingView.cpp b/src/MixingView.cpp index d6f686ea..87f03cf1 100644 --- a/src/MixingView.cpp +++ b/src/MixingView.cpp @@ -458,6 +458,10 @@ std::pair MixingView::pick(glm::vec2 P) else if ( pick.first == s->symbol_ ) { UserInterface::manager().showSourceEditor(s); } + // pick the initials: show in panel + else if ( pick.first == s->initial_1_ ) { + UserInterface::manager().setSourceInPanel(s); + } // pick on the mixing group rotation icon else if ( pick.first == s->rotation_mixingroup_ ) { if (UserInterface::manager().shiftModifier()) @@ -675,12 +679,18 @@ View::Cursor MixingView::over (glm::vec2 pos) if (s != nullptr && s->ready()) { s->symbol_->color = glm::vec4( COLOR_HIGHLIGHT_SOURCE, 1.f ); + s->initial_0_->color = glm::vec4( COLOR_HIGHLIGHT_SOURCE, 1.f ); + s->initial_1_->color = glm::vec4( COLOR_HIGHLIGHT_SOURCE, 1.f ); const ImVec4 h = ImGuiToolkit::HighlightColor(); // overlay symbol if ( pick.first == s->symbol_ ) s->symbol_->color = glm::vec4( h.x, h.y, h.z, 1.f ); - + // overlay initials + else if ( pick.first == s->initial_1_ ) { + s->initial_1_->color = glm::vec4( h.x, h.y, h.z, 1.f ); + s->initial_0_->color = glm::vec4( h.x, h.y, h.z, 1.f ); + } } return ret; diff --git a/src/PickingVisitor.cpp b/src/PickingVisitor.cpp index f3fd5e58..fea18939 100644 --- a/src/PickingVisitor.cpp +++ b/src/PickingVisitor.cpp @@ -238,21 +238,20 @@ void PickingVisitor::visit(Symbol& n) } -void PickingVisitor::visit(Character& ) +void PickingVisitor::visit(Character& n) { - // Not working ; disabled until needed -// // discard if not visible or if not exactly one point given for picking -// if ((!n.visible_ && !force_) || points_.size() != 1) -// return; - -// // apply inverse transform to the point of interest -// glm::vec4 P = glm::inverse(modelview_) * glm::vec4( points_[0], 1.f ); - -// // test bounding box for picking from a single point -// if ( n.bbox().contains( glm::vec3(P)) ) { -// // add this to the nodes picked -// nodes_.push_back( std::pair(&n, glm::vec2(P)) ); -// } + // discard if not visible or if not exactly one point given for picking + if ((!n.visible_ && !force_) || points_.size() != 1) + return; + + // apply inverse transform to the point of interest + glm::vec4 P = glm::inverse(modelview_) * glm::vec4( points_[0], 1.f ); + + // test bounding box for picking from a single point + if ( n.bbox().contains( glm::vec3(P)) ) { + // add this to the nodes picked + nodes_.push_back( std::pair(&n, glm::vec2(P)) ); + } } void PickingVisitor::visit(Scene &n) diff --git a/src/SessionSource.cpp b/src/SessionSource.cpp index 805258d7..c7528232 100644 --- a/src/SessionSource.cpp +++ b/src/SessionSource.cpp @@ -266,9 +266,9 @@ SessionFileSource::SessionFileSource(uint64_t id) : SessionSource(id), path_("") overlays_[View::TRANSITION]->translation_.z = 0.1; overlays_[View::TRANSITION]->visible_ = false; - Symbol *loader = new Symbol(Symbol::DOTS); - loader->scale_ = glm::vec3(2.f, 2.f, 1.f); - loader->translation_.y = -0.8; + Symbol *loader = new Symbol(Symbol::BUSY); + loader->scale_ = glm::vec3(1.7f, 1.7f, 1.f); + loader->translation_.y = -0.7; loader->update_callbacks_.push_back(new InfiniteGlowCallback); overlays_[View::TRANSITION]->attach(loader); diff --git a/src/Shader.cpp b/src/Shader.cpp index f3d02040..0b16acb4 100644 --- a/src/Shader.cpp +++ b/src/Shader.cpp @@ -320,6 +320,16 @@ bool ShadingProgram::setUniform(const std::string& name, glm::mat4 va bool Shader::force_blending_opacity = false; +std::vector< std::tuple > Shader::blendingFunction = { + {5, 6, "Normal"}, + {7, 6, "Screen"}, + {8, 6, "Subtract"}, + {9, 6, "Multiply"}, + {2, 6, "Hard light"}, + {3, 6, "Soft light"}, + {6, 6, "Soft subtract"}, + {10, 6, "Lighten only"} +}; Shader::Shader() : blending(BLEND_OPACITY) { diff --git a/src/Shader.h b/src/Shader.h index 813483ca..27717217 100644 --- a/src/Shader.h +++ b/src/Shader.h @@ -73,7 +73,7 @@ class Shader BLEND_NONE } BlendMode; BlendMode blending; - + static std::vector< std::tuple > blendingFunction; static bool force_blending_opacity; protected: diff --git a/src/Source.cpp b/src/Source.cpp index 1e952c80..5e3ad090 100644 --- a/src/Source.cpp +++ b/src/Source.cpp @@ -228,7 +228,7 @@ Source::Source(uint64_t id) : SourceCore(), id_(id), ready_(false), symbol_(null handles_[View::GEOMETRY][Handles::SCALE]->translation_.z = 0.1; transform_manipulator->attach(handles_[View::GEOMETRY][Handles::SCALE]); handles_[View::GEOMETRY][Handles::EDIT_SHAPE] = new Handles(Handles::EDIT_SHAPE); - handles_[View::GEOMETRY][Handles::EDIT_SHAPE]->color = glm::vec4(COLOR_HIGHLIGHT_SOURCE, 1.f); + handles_[View::GEOMETRY][Handles::EDIT_SHAPE]->color = glm::vec4(COLOR_HIGHLIGHT_SOURCE, 0.6f); handles_[View::GEOMETRY][Handles::EDIT_SHAPE]->translation_.z = 0.1; transform_manipulator->attach(handles_[View::GEOMETRY][Handles::EDIT_SHAPE]); @@ -263,7 +263,7 @@ Source::Source(uint64_t id) : SourceCore(), id_(id), ready_(false), symbol_(null handles_[View::GEOMETRY][Handles::ROUNDING]->translation_.z = 0.1; node_manipulator->attach(handles_[View::GEOMETRY][Handles::ROUNDING]); handles_[View::GEOMETRY][Handles::EDIT_CROP] = new Handles(Handles::EDIT_CROP); - handles_[View::GEOMETRY][Handles::EDIT_CROP]->color = glm::vec4(COLOR_HIGHLIGHT_SOURCE, 1.f); + handles_[View::GEOMETRY][Handles::EDIT_CROP]->color = glm::vec4(COLOR_HIGHLIGHT_SOURCE, 0.6f); handles_[View::GEOMETRY][Handles::EDIT_CROP]->translation_.z = 0.1; node_manipulator->attach(handles_[View::GEOMETRY][Handles::EDIT_CROP]); @@ -301,6 +301,19 @@ Source::Source(uint64_t id) : SourceCore(), id_(id), ready_(false), symbol_(null overlays_[View::LAYER]->visible_ = false; groups_[View::LAYER]->attach(overlays_[View::LAYER]); + // blending change icon + blendmode_ = new Switch; + blendmode_->translation_ = glm::vec3(0.0f, 1.2f, 0.1f); + blendmode_->scale_ = glm::vec3(1.2f, 1.2f, 1.f); + groups_[View::LAYER]->attach(blendmode_); + for (uint B = Symbol::BLEND_NORMAL; B < Symbol::EMPTY; ++B) { + Symbol *blend_icon = new Symbol( (Symbol::Type) B); + blend_icon->color = glm::vec4(COLOR_HIGHLIGHT_SOURCE, 0.6f); + blend_icon->translation_.z = 0.1; + blendmode_->attach(blend_icon); + } + blendmode_->setActive(0); + // default appearance node frames_[View::TEXTURE] = new Switch; frame = new Frame(Frame::SHARP, Frame::THIN, Frame::NONE); // visible @@ -469,9 +482,9 @@ void Source::setMode(Source::Mode m) for (auto o = overlays_.begin(); o != overlays_.end(); ++o) (*o).second->visible_ = (current && !locked_); - // the opacity of the initials changes if current - initial_0_->color.w = current ? 1.0 : 0.7; - initial_1_->color.w = current ? 1.0 : 0.7; + // the opacity of the initials and of blending icon change if current + initial_0_->color.w = initial_1_->color.w = current ? 1.0 : 0.7; + static_cast(blendmode_->activeChild())->color.w = current ? 1.0 : 0.6; // the lock icon locker_->setActive( locked_ ? 0 : 1); @@ -609,21 +622,24 @@ void Source::attach(FrameBuffer *renderbuffer) } + float AR = renderbuffer_->aspectRatio(); + // if a symbol is available if (symbol_) // hack to place the symbols in the corner independently of aspect ratio - symbol_->translation_.x = (renderbuffer_->aspectRatio() - 0.3f) / renderbuffer_->aspectRatio(); + symbol_->translation_.x = (AR - 0.3f) / AR; // hack to place the initials in the corner independently of aspect ratio - initial_0_->translation_.x = 0.2f - renderbuffer_->aspectRatio(); - initial_1_->translation_.x = 0.4f - renderbuffer_->aspectRatio(); + initial_0_->translation_.x = 0.2f - AR; + initial_1_->translation_.x = 0.4f - AR; + blendmode_->translation_.x = - 0.2f - AR ; // scale all icon nodes to match aspect ratio for (int v = View::MIXING; v <= View::TRANSITION; v++) { NodeSet::iterator node; for (node = groups_[(View::Mode) v]->begin(); node != groups_[(View::Mode) v]->end(); ++node) { - (*node)->scale_.x = renderbuffer_->aspectRatio(); + (*node)->scale_.x = AR; } } @@ -879,6 +895,11 @@ void Source::update(float dt) groups_[View::LAYER]->translation_.x = -groups_[View::LAYER]->translation_.z; groups_[View::LAYER]->translation_.y = groups_[View::LAYER]->translation_.x / LAYER_PERSPECTIVE; + // update blending icon + static_cast(blendmode_->activeChild())->color.w = 0.6; + blendmode_->setActive((int) blendingshader_->blending); + static_cast(blendmode_->activeChild())->color.w = mode_ >= Source::CURRENT ? 1.0 : 0.6; + // Update workspace based on depth, and // adjust vertical position of icon depending on workspace if (groups_[View::LAYER]->translation_.x < -LAYER_FOREGROUND) { diff --git a/src/Source.h b/src/Source.h index 84f9c411..2d44023b 100644 --- a/src/Source.h +++ b/src/Source.h @@ -21,7 +21,7 @@ #define ICON_SOURCE_NETWORK 18, 11 #define ICON_SOURCE_PATTERN 5, 3 #define ICON_SOURCE_SESSION 19, 6 -#define ICON_SOURCE_GROUP 10, 6 +#define ICON_SOURCE_GROUP 0, 7 #define ICON_SOURCE_RENDER 19, 1 #define ICON_SOURCE_CLONE 9, 2 #define ICON_SOURCE_GSTREAMER 16, 16 @@ -364,7 +364,7 @@ class Source : public SourceCore std::map frames_; std::map handles_; Handles *lock_, *unlock_; - Switch *locker_, *manipulator_; + Switch *locker_, *manipulator_, *blendmode_; Symbol *symbol_; Character *initial_0_, *initial_1_; diff --git a/src/SourceControlWindow.cpp b/src/SourceControlWindow.cpp index 9d74989c..4aa9c0a8 100644 --- a/src/SourceControlWindow.cpp +++ b/src/SourceControlWindow.cpp @@ -567,194 +567,6 @@ void DrawTimeScale(const char* label, guint64 duration, double width_ratio) } - - -bool EditPlotHistoLines (const char* label, float *histogram_array, float *lines_array, - int values_count, float values_min, float values_max, guint64 begin, guint64 end, - bool edit_histogram, bool *released, TimelinePayload **payload, const ImVec2 size) -{ - bool array_changed = false; - - // get window - ImGuiWindow* window = ImGui::GetCurrentWindow(); - if (window->SkipItems) - return false; - - // capture coordinates before any draw or action - const ImVec2 canvas_pos = ImGui::GetCursorScreenPos(); - ImVec2 mouse_pos_in_canvas = ImVec2(ImGui::GetIO().MousePos.x - canvas_pos.x, ImGui::GetIO().MousePos.y - canvas_pos.y); - - // get id - const ImGuiID id = window->GetID(label); - - // add item - ImVec2 pos = window->DC.CursorPos; - ImRect bbox(pos, pos + size); - ImGui::ItemSize(size); - if (!ImGui::ItemAdd(bbox, id)) - return false; - - *released = false; - - // read user input and activate widget - const bool mouse_press = ImGui::IsMouseDown(ImGuiMouseButton_Left); - bool hovered = ImGui::ItemHoverable(bbox, id); - bool temp_input_is_active = ImGui::TempInputIsActive(id); - if (!temp_input_is_active) - { - const bool focus_requested = ImGui::FocusableItemRegister(window, id); - if (focus_requested || (hovered && mouse_press) ) - { - ImGui::SetActiveID(id, window); - ImGui::SetFocusID(id, window); - ImGui::FocusWindow(window); - } - } - else - return false; - - const ImGuiContext& g = *GImGui; - const ImGuiStyle& style = g.Style; - const float _h_space = style.WindowPadding.x; - ImVec4 bg_color = hovered ? style.Colors[ImGuiCol_FrameBgHovered] : style.Colors[ImGuiCol_FrameBg]; - - // prepare index - double x = (mouse_pos_in_canvas.x - _h_space) / (size.x - 2.f * _h_space); - size_t index = CLAMP( (int) floor(static_cast(values_count) * x), 0, values_count); - char cursor_text[64]; - guint64 time = begin + (index * end) / static_cast(values_count); - - // enter edit if widget is active - if (ImGui::GetActiveID() == id) { - - bg_color = style.Colors[ImGuiCol_FrameBgActive]; - - // keep active area while mouse is pressed - static bool active = false; - static size_t previous_index = UINT32_MAX; - if (mouse_press) - { - float val = mouse_pos_in_canvas.y / bbox.GetHeight(); - val = CLAMP( (val * (values_max-values_min)) + values_min, values_min, values_max); - - if (previous_index == UINT32_MAX) - previous_index = index; - - const size_t left = MIN(previous_index, index); - const size_t right = MAX(previous_index, index); - - if (edit_histogram){ - static float target_value = values_min; - - // toggle value histo - if (!active) { - target_value = histogram_array[index] > 0.f ? 0.f : 1.f; - active = true; - } - - for (size_t i = left; i < right; ++i) - histogram_array[i] = target_value; - } - else { - const float target_value = values_max - val; - - for (size_t i = left; i < right; ++i) - lines_array[i] = target_value; - - } - - previous_index = index; - array_changed = true; - } - // release active widget on mouse release - else { - active = false; - ImGui::ClearActiveID(); - previous_index = UINT32_MAX; - *released = true; - } - - } - - // accept drops on timeline plot-histogram - else if (ImGui::BeginDragDropTarget()) { - const ImGuiPayload *tmp = ImGui::GetDragDropPayload(); - if (tmp && tmp->IsDataType("DND_TIMELINE")) { - TimelinePayload *pl = (TimelinePayload *) tmp->Data; - if (pl->action != TimelinePayload::CUT - && pl->action != TimelinePayload::CUT_ERASE) { - hovered = true; - edit_histogram = true; - } - } - const ImGuiPayload *accepted = ImGui::AcceptDragDropPayload("DND_TIMELINE"); - if (accepted) { - *payload = (TimelinePayload *) accepted->Data; - (*payload)->drop_time = time; - } - ImGui::EndDragDropTarget(); - } - - // back to draw - ImGui::SetCursorScreenPos(canvas_pos); - - // plot histogram (with frame) - ImGui::PushStyleColor(ImGuiCol_FrameBg, bg_color); - ImGui::PushStyleColor(ImGuiCol_PlotHistogram, style.Colors[ImGuiCol_ModalWindowDimBg]); // a dark color - char buf[128]; - snprintf(buf, 128, "##Histo%s", label); - ImGui::PlotHistogram(buf, histogram_array, values_count, 0, NULL, values_min, values_max, size); - ImGui::PopStyleColor(2); - - // back to draw - ImGui::SetCursorScreenPos(canvas_pos); - - // plot (transparent) lines - ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(0,0,0,0)); - snprintf(buf, 128, "##Lines%s", label); - ImGui::PlotLines(buf, lines_array, values_count, 0, NULL, values_min, values_max, size); - ImGui::PopStyleColor(1); - - - // draw the cursor - if (hovered) { - - ImFormatString(cursor_text, IM_ARRAYSIZE(cursor_text), "%s", - GstToolkit::time_to_string(time).c_str()); - - // prepare color and text - const ImU32 cur_color = ImGui::GetColorU32(ImGuiCol_CheckMark); - ImGui::PushStyleColor(ImGuiCol_Text, cur_color); - ImVec2 label_size = ImGui::CalcTextSize(cursor_text, NULL); - - // render cursor depending on action - mouse_pos_in_canvas.x = CLAMP(mouse_pos_in_canvas.x, _h_space, size.x - _h_space); - ImVec2 cursor_pos = canvas_pos; - if (edit_histogram) { - cursor_pos = cursor_pos + ImVec2(mouse_pos_in_canvas.x, 4.f); - window->DrawList->AddLine( cursor_pos, cursor_pos + ImVec2(0.f, size.y - 8.f), cur_color); - } - else { - cursor_pos = cursor_pos + mouse_pos_in_canvas; - window->DrawList->AddCircleFilled( cursor_pos, 3.f, cur_color, 8); - } - - // draw text - cursor_pos.y = canvas_pos.y + size.y - label_size.y - 1.f; - if (mouse_pos_in_canvas.x > label_size.x * 1.5f + 2.f * _h_space) - cursor_pos.x -= label_size.x + _h_space; - else - cursor_pos.x += _h_space + style.WindowPadding.x; - ImGui::RenderTextClipped(cursor_pos, cursor_pos + label_size, cursor_text, NULL, &label_size); - - ImGui::PopStyleColor(1); - } - - return array_changed; -} - - - bool EditTimeline(const char *label, Timeline *tl, bool edit_histogram, @@ -1215,8 +1027,12 @@ void SourceControlWindow::RenderSelection(size_t i) ImGuiToolkit::PushFont(ImGuiToolkit::FONT_MONO); ImGuiToolkit::Icon( (*source)->icon().x, (*source)->icon().y); if ((*source)->playable()) { - ImGui::SameLine(); + ImGui::SameLine(ImGui::GetTextLineHeight(), 0); ImGui::Text(" %s", GstToolkit::time_to_string((*source)->playtime()).c_str() ); + ImGui::SameLine(framesize.x - ImGui::GetTextLineHeightWithSpacing()); + if ( mp->syncToMetronome() > Metronome::SYNC_NONE ) + ImGuiToolkit::Icon( mp->syncToMetronome() > Metronome::SYNC_BEAT ? 7 : 6, 13); + } ImGui::PopFont(); @@ -1307,7 +1123,7 @@ void SourceControlWindow::RenderSelection(size_t i) ImFormatString(text_buf, IM_ARRAYSIZE(text_buf), "Cut at %s", GstToolkit::time_to_string(cutposition, GstToolkit::TIME_STRING_MINIMAL).c_str()); - if ( ImGuiToolkit::ButtonIcon(9, 3, text_buf) ) { + if ( ImGuiToolkit::ButtonIcon(11, 3, text_buf) ) { if ( mp->timeline()->cut(cutposition, false, true) ) { std::ostringstream info; info << SystemToolkit::base_filename( mp->filename() ) << ": Timeline " <icon().x, (*source)->icon().y); if ((*source)->playable()) { - ImGui::SameLine(); + ImGui::SameLine(ImGui::GetTextLineHeight(), 0); ImGui::Text(" %s", GstToolkit::time_to_string((*source)->playtime()).c_str() ); } ImGui::PopFont(); @@ -1547,7 +1363,8 @@ void SourceControlWindow::DrawSource(Source *s, ImVec2 framesize, ImVec2 top_ima ImVec2 slider = framesize * ImVec2(Settings::application.widget.media_player_slider,1.f); // draw pre and post-processed parts if necessary - if (s->imageProcessingEnabled() || + if ( (mediaplayer_active_ && !mediaplayer_active_->timeline()->fadingIsClear())|| + s->imageProcessingEnabled() || s->textureTransformed() || s->icon() == glm::ivec2(ICON_SOURCE_CLONE)) { @@ -1724,8 +1541,8 @@ int SourceControlWindow::SourceButton(Source *s, ImVec2 framesize) draw_list->AddRect(frame_top, frame_top + framesize - ImVec2(1.f, 0.f), frame_color, 0, 0, 3.f); // centered icon in front of dark background if (s->active() && s->playable()) { - draw_list->AddRectFilled(frame_center - ImVec2(H * 0.2f, H * 0.2f), - frame_center + ImVec2(H * 1.1f, H * 1.1f), ImGui::GetColorU32(ImGuiCol_TitleBgCollapsed), 6.f); + draw_list->AddRectFilled(frame_center - ImVec2(H * 0.3f, H * 0.2f), + frame_center + ImVec2(H * 1.1f, H * 1.2f), ImGui::GetColorU32(ImGuiCol_TitleBgCollapsed), 6.f); draw_list->AddText(frame_center, icon_color, s->playing() ? ICON_FA_PAUSE : ICON_FA_PLAY); } } diff --git a/src/TextureView.cpp b/src/TextureView.cpp index c8973de8..48973241 100644 --- a/src/TextureView.cpp +++ b/src/TextureView.cpp @@ -651,7 +651,7 @@ void TextureView::draw() P = Rendering::manager().project(glm::vec3(P, 0.f), scene.root()->transform_, false); // Set window position depending on icons size ImGuiToolkit::PushFont(ImGuiToolkit::FONT_LARGE); - ImGui::SetNextWindowPos(ImVec2(P.x, P.y - 1.5f * ImGui::GetFrameHeight() ), ImGuiCond_Always); + ImGui::SetNextWindowPos(ImVec2(P.x, P.y - 2.f * ImGui::GetFrameHeight() ), ImGuiCond_Always); if (ImGui::Begin("##AppearanceMaskOptions", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoBringToFrontOnFocus )) @@ -668,11 +668,16 @@ void TextureView::draw() int maskmode = edit_source_->maskShader()->mode; ImGui::SetNextItemWidth( ImGui::GetTextLineHeightWithSpacing() * 2.6); - - if (ImGui::BeginCombo("##Mask", MaskShader::mask_icons[maskmode])) { - + if (ImGui::Button( std::string(std::string(MaskShader::mask_icons[maskmode])+" "+ICON_FA_SORT_DOWN ).c_str())) + ImGui::OpenPopup( "Mask_menu_popup" ); + if (ImGui::IsItemHovered()) + ImGuiToolkit::ToolTip(MaskShader::mask_names[maskmode]); + if (ImGui::BeginPopup( "Mask_menu_popup" )) + { + ImGuiToolkit::PushFont(ImGuiToolkit::FONT_DEFAULT); for (int m = MaskShader::NONE; m <= MaskShader::SOURCE; ++m){ - if (ImGui::Selectable( MaskShader::mask_icons[m] )) { + if (ImGui::Selectable( std::string(std::string(MaskShader::mask_icons[m]) + + " " + MaskShader::mask_names[m]).c_str()) ) { // on change of mode if (maskmode != m) { // cancel previous source mask @@ -696,15 +701,17 @@ void TextureView::draw() std::ostringstream oss; oss << edit_source_->name() << ": " << MaskShader::mask_names[maskmode]; Action::manager().store(oss.str()); - // force take control of source for NONE and SOURCE modes - if (maskmode == MaskShader::NONE || maskmode == MaskShader::SOURCE) + // select source depending on mode and tool + if ((maskmode == MaskShader::SHAPE && mask_cursor_shape_) || + (maskmode == MaskShader::PAINT && mask_cursor_paint_)) + Mixer::manager().unsetCurrentSource(); + else Mixer::manager().setCurrentSource(edit_source_); } } - if (ImGui::IsItemHovered()) - ImGuiToolkit::ToolTip(MaskShader::mask_names[m]); } - ImGui::EndCombo(); + ImGui::PopFont(); + ImGui::EndPopup(); } // GUI for selecting source mask @@ -712,7 +719,8 @@ void TextureView::draw() ImGui::SameLine(0, 60); bool on = true; - ImGuiToolkit::ButtonToggle(ICON_FA_MOUSE_POINTER, &on, "Edit texture"); + if (ImGuiToolkit::ButtonToggle(ICON_FA_MOUSE_POINTER, &on, "Edit texture")) + Mixer::manager().setCurrentSource(edit_source_); // List of sources ImGui::SameLine(0, 60); @@ -1010,7 +1018,8 @@ void TextureView::draw() // always active mouse pointer ImGui::SameLine(0, 60); bool on = true; - ImGuiToolkit::ButtonToggle(ICON_FA_MOUSE_POINTER, &on, "Edit texture"); + if (ImGuiToolkit::ButtonToggle(ICON_FA_MOUSE_POINTER, &on, "Edit texture")) + Mixer::manager().setCurrentSource(edit_source_); ImGui::SameLine(0, 60); ImGui::TextDisabled( "No mask" ); } diff --git a/src/Timeline.cpp b/src/Timeline.cpp index 75b6630a..7d5b7a2e 100644 --- a/src/Timeline.cpp +++ b/src/Timeline.cpp @@ -81,6 +81,7 @@ Timeline& Timeline::operator = (const Timeline& b) this->gaps_array_need_update_ = b.gaps_array_need_update_; memcpy( this->gapsArray_, b.gapsArray_, MAX_TIMELINE_ARRAY * sizeof(float)); memcpy( this->fadingArray_, b.fadingArray_, MAX_TIMELINE_ARRAY * sizeof(float)); + this->fading_array_changed_ = true; } return *this; } @@ -164,6 +165,7 @@ void Timeline::update() { updateGapsFromArray(gapsArray_, MAX_TIMELINE_ARRAY); gaps_array_need_update_ = false; + fading_array_changed_ = true; } void Timeline::refresh() @@ -405,13 +407,13 @@ GstClockTime Timeline::timeFromPercent(const float p) const size_t Timeline::fillSectionsArrays( float* const gaps, float* const fading) { size_t arraysize = MAX_TIMELINE_ARRAY; - float* gapsptr = gaps; - float* fadingptr = fading; if (gaps_array_need_update_) fillArrayFromGaps(gapsArray_, MAX_TIMELINE_ARRAY); if (gaps_.size() > 0) { + float* gapsptr = gaps; + float* fadingptr = fading; // indices to define [s e[] sections size_t s = 0, e; @@ -461,11 +463,13 @@ size_t Timeline::fillSectionsArrays( float* const gaps, float* const fading) arraysize += n; } + fading_array_changed_ = true; } else { memcpy( gaps, gapsArray_, MAX_TIMELINE_ARRAY * sizeof(float)); memcpy( fading, fadingArray_, MAX_TIMELINE_ARRAY * sizeof(float)); + fading_array_changed_ = true; } return arraysize; @@ -538,6 +542,21 @@ void Timeline::clearFading() } // clear with static array memcpy(fadingArray_, empty_ones, MAX_TIMELINE_ARRAY * sizeof(float)); + fading_array_allones_ = true; +} + + +bool Timeline::fadingIsClear() +{ + if (fading_array_changed_) { + int i = 0; + while (i < MAX_TIMELINE_ARRAY && fadingArray_[i] > 0.999f) + ++i; + fading_array_allones_ = i == MAX_TIMELINE_ARRAY; + fading_array_changed_ = false; + } + + return fading_array_allones_; } void Timeline::smoothFading(uint N, TimeInterval interval) @@ -576,6 +595,7 @@ void Timeline::smoothFading(uint N, TimeInterval interval) } // copy back to array memcpy(fadingArray_, tmparray, MAX_TIMELINE_ARRAY * sizeof(float)); + fading_array_changed_ = true; } } // in absence of interval given, loop over all sections @@ -596,7 +616,7 @@ void Timeline::autoFading(const GstClockTime duration, FadingCurve curve) N = duration / (timing_.end / MAX_TIMELINE_ARRAY); // clear with static array - memcpy(fadingArray_, empty_zeros, MAX_TIMELINE_ARRAY * sizeof(float)); + clearFading(); // get sections (inverse of gaps) TimeIntervalSet sec = sections(); @@ -638,6 +658,7 @@ void Timeline::autoFading(const GstClockTime duration, FadingCurve curve) else fadingArray_[i] = x; } + fading_array_changed_ = true; } } @@ -689,7 +710,7 @@ void Timeline::fadeOut(const GstClockTime from, const GstClockTime duration, Fad fadingArray_[i] = 0.f; // fadingArray_[i] *= val; } - + fading_array_changed_ = true; } void Timeline::fadeIn(const GstClockTime to, const GstClockTime duration, FadingCurve curve) @@ -739,7 +760,7 @@ void Timeline::fadeIn(const GstClockTime to, const GstClockTime duration, Fading fadingArray_[i] = 0.f; // fadingArray_[i] *= val; } - + fading_array_changed_ = true; } void Timeline::fadeInOutRange(const GstClockTime t, const GstClockTime duration, bool in_and_out, FadingCurve curve) @@ -809,8 +830,8 @@ void Timeline::fadeInOutRange(const GstClockTime t, const GstClockTime duration, } else // curve == FADING_SHARP fadingArray_[k] = in_and_out; - } - + } + fading_array_changed_ = true; } diff --git a/src/Timeline.h b/src/Timeline.h index 4a5f0743..9383f4f4 100644 --- a/src/Timeline.h +++ b/src/Timeline.h @@ -148,6 +148,7 @@ class Timeline size_t fadingIndexAt(const GstClockTime t) const; inline float *fadingArray() { return fadingArray_; } void clearFading(); + bool fadingIsClear(); // Edit typedef enum { @@ -184,6 +185,7 @@ class Timeline void fillArrayFromGaps(float *array, size_t array_size); float fadingArray_[MAX_TIMELINE_ARRAY]; + bool fading_array_changed_, fading_array_allones_; }; diff --git a/src/UpdateCallback.cpp b/src/UpdateCallback.cpp index ea9bdb73..66e481f7 100644 --- a/src/UpdateCallback.cpp +++ b/src/UpdateCallback.cpp @@ -144,5 +144,6 @@ void InfiniteGlowCallback::update(Node *n, float dt) n->scale_.x = initial_scale_.x + amplitude_ * sin(M_PI * time_); n->scale_.y = initial_scale_.y + amplitude_ * sin(M_PI * time_); + n->rotation_.z = 2.f * time_; } diff --git a/src/UpdateCallback.h b/src/UpdateCallback.h index a4673c93..90a01089 100644 --- a/src/UpdateCallback.h +++ b/src/UpdateCallback.h @@ -76,7 +76,7 @@ class InfiniteGlowCallback : public UpdateCallback glm::vec3 initial_scale_; public: - InfiniteGlowCallback(float amplitude = 0.5f); + InfiniteGlowCallback(float amplitude = 0.1f); void update(Node *n, float dt); }; diff --git a/src/defines.h b/src/defines.h index c2200d78..518555ba 100644 --- a/src/defines.h +++ b/src/defines.h @@ -235,7 +235,7 @@ #define MENU_INPUTS ICON_FA_HAND_PAPER " Input mapping " #define TOOLTIP_INPUTS "Inputs mapping " #define SHORTCUT_INPUTS CTRL_MOD "I" -#define MENU_SHADEREDITOR ICON_FA_CODE " Shader Editor " +#define MENU_SHADEREDITOR ICON_FA_CODE " Shader Editor " #define TOOLTIP_SHADEREDITOR "Shader Editor " #define SHORTCUT_SHADEREDITOR CTRL_MOD "E" #define TOOLTIP_FULLSCREEN "Fullscreen "