Introduce img_preview_buffer
authorAndreas Eversberg <jolly@eversberg.eu>
Sat, 23 May 2015 13:39:40 +0000 (15:39 +0200)
committerAndreas Eversberg <jolly@eversberg.eu>
Sat, 20 Jun 2015 04:39:31 +0000 (06:39 +0200)
This buffer is an overlay image, the img_grey_buffer is not touched.
The 'rendered' button will load the rendered image, if exists.
The 'preview' button just allocates a copy of the grey image. Later it
will be used to render to this buffer on the fly.

gui/buttons/b_col.c
gui/buttons/b_preview.c
gui/buttons/col.bmp
gui/buttons/preview.bmp
gui/image.c
gui/image.h
gui/menu.c
gui/toolbar.c

index 14c236e..a64bf32 100644 (file)
@@ -26,73 +26,80 @@ const guint8 img_col[] =
   "\246\213\204\246\213\204\244\213\204\244\213\200\244\213\200\243\211"
   "}\240\207|\237\206{\237\206{\236\204x\230~r\222yn\201so<pxdQ(l5\0`2\0"
   "v=\0h.\0T(\0:\33\0""0\24\0""2\25\0O5\13.bj)t\207\27o\205\23n\205\35v"
-  "\217\34w\216\32r\214\27n\233\25h\235\21`\227\0\0\244\211\202\244\211"
+  "\217\34w\216\32r\214\27n\233\25h\235\21`\227\"\12\244\211\202\244\211"
   "\202\244\212~\243\211}\243\205}\237\206\177\241\207y\242\205v\237\202"
-  "w\227\177u\223zo\216slfpp:\\T\\+\0\214;\0\274Y\20\270X\22\262N\22|7\0"
-  "0\24\0.\22\0""2\25\0,\21\0""8\34\0FB\30\36_f\36v\214\35x\217\40{\222"
-  "$|\222%}\223(}\2200{\204\40""1\244\206\202\243\205\201\243\205}\245\214"
-  "u\262\225\\\247\211o\241\204u\243\205o\235\204q\222yn\216phiqq%p\203"
-  "3B,h,\0\267V!\301`+\275Y\35\262M\2^*\0""0\24\0.\22\0""2\25\0.\23\0""0"
-  "\25\0:\35\0BM3$p\200\"z\220\35x\217\33v\215\35{\223#{\221.\200\2140\12"
-  "\224\253U\222\255S\204\2719\251\321\13\276\252\0\310\256\0\325\257\27"
-  "\246\213`\227yq\220rjgoo%t\207\24hzBB,\237T\35\302a,\304a0\222A\0t9\0"
-  "V(\0<\33\0N%\0D\40\0""4\27\0""6\30\0""2\26\0>\"\0/QB\40x\216\32u\214"
-  "\26q\210\27v\215\33y\215\40z\212t\"h\322\0\\\304\0\\\272\0\217\240\0"
-  "\230\210\0\224\204\0\240\217\0\256\227\0\302\244\0\233\2115$s\212\23"
-  "o\211\24RZyE\27\256V\40\277_+\306`.\256A\6l3\0z9\0v8\0\214B\0^.\0^,\0"
-  "P&\0@\36\0<\40\0H)\0!ju\33r\205\25s\207\31w\213\33y\215\36\177\210\40"
-  "\"T\262\0S\260\0n\234\0\244\232\0\224\204\0\224\204\0\224\204\0\226\206"
-  "\0\236\215\0\236\215\0\224\226\0\17dsYN+\216L\34fI&\242R\"\305c-\317"
-  "`)\276Q\26\234B\0\242L\0\210C\0\216\77\0x8\0^,\0^.\0X+\0D#\0>B(\25m\177"
-  "\23q\211\32z\210\35}\213\40~\206*\"R\256\0X\242\0\217\230\0\242\221\0"
-  "\224\204\0\226\206\0\230\210\0\234\213\0\232\212\0\220\201\0\200r\0|"
-  "i\0\270P\"\264B\12\2037\15\236O$\276f6\306b,\316_(\314b\"\256N\0\271"
-  "O\17\267O\11\222>\0`/\0b0\0R)\0V-\0Z5\0'`a\26q\204\25p\207\31y\207\32"
-  "\201\210inN\246\0d\236\0\244\236\0\236\215\0\234\213\0\240\217\0\250"
-  "\226\0\244\223\0\224\204\0xh\0n]\0\316J\20\315\77#\3118\27\3115\7\273"
-  "T+\273`/\274S\24\271X\27\316d$\320e*\312](\264D\0n1\0P&\0H\"\0F#\0Z*"
-  "\0T1\0-OC\27fy\23n\205\27r\211\30s\212\40\"=\210\0T\216\0\222\220\0\240"
-  "\217\0\246\224\0\240\217\0\230\210\0\210z\0xk\0rf\0\246f\0\3146\36\321"
-  "@#\304>\32\3238\17\325\77\27\314B\22\267B\11vL\"\251W\25\312`\40\300"
-  "Q\32\2549\0d-\0R'\0>\35\0""4\27\0>\35\0<\36\0+I>\25ey\26n\204\26q\210"
-  "\32z\210efY~\0y\204\0\244\226\0\270\245\0\264\241\0\244\223\0\226\206"
-  "\0\214}\0~q\0ra\0\274P\0\303@\35\274A(\264B(\3025\24\3251\21\3359\23"
-  "\3104\6\230>\26\231\77\11\300S\22\274K\24\264C\14^*\0N%\0""6\30\0,\21"
-  "\0""8\32\0""4\30\0$RN\22k~\23l\205\26t\210\33{\211\"\12\210\200\0\244"
-  "\223\0\266\243\0\260\235\0\266\243\0\266\243\0\256\234\0\226\206\0\200"
-  "r\0p_\0\274Q\2\274&\10\200\6\0\267\37\23\275E1\3274\31\3452\25\337>\23"
-  "\325D\21\315I\17\312S\30\300Q\32\265D\15""6\31\0J#\0""6\30\0<\31\0H$"
-  "\0H)\0\26^n\16i\200\22p\204\26t\210\34|\212ef\230\210\0\240\217\0\264"
-  "\241\0\254\232\0\254\232\0\266\243\0\256\234\0\242\221\0\230\210\0\200"
-  "o\0\250S\0\274)\2\234\4\0\222\7\0\2671\37\3263\36\345\77\31\342I\32\332"
-  "M\26\326Q\26\320M\32\306Q\30\260>\0""0\25\0""6\27\0.\22\0R)\0^1\0*>."
-  "\15e{\15h\177\21l\203\30s\206\31|\207\0\0\260\235\0\250\226\0\264\245"
-  "\0\260\235\0\256\234\0\254\232\0\252\230\0\236\215\0\230\210\0\252\230"
-  "\0\256\217\0\305W\25\306'\10\252\20\0\266\35\4\3263\30\343G\35\341P\27"
-  "\330S\30\323K\25\305N\23\267D\13l0\0D\40\0:\31\0""2\25\0N'\0W<\11\31"
-  "Y]\10f~\16i\200\21l\203\30x\206\33v\211\0\0\254\232\0\260\235\0\264\241"
-  "\0\260\235\0\242\221\0\254\232\0\240\223\0\206\201\0\204|\0\254\232\0"
-  "\260\235\0\302\216\0\312b\34\311X'\315L\37\324F\32\325M\27\323O\25\312"
-  "L\24\274G\16\257>\7\212:\0d/\0f0\0h,\0V&\0\204;\0\220G\6""5K8\15bu\16"
-  "i\200\22p\204\26t\210\33{\211\0\0\266\243\0\256\234\0\262\237\0\254\232"
-  "\0\252\230\0\222\211\0p\204\0V\214\10k\202\0\242\225\0\264\241\0\262"
-  "\233\0\272\210\0\301T\13\277L\31\301K\27\277O\27\276M\26\265D\15\253"
-  "=\7\260\77\2\236;\0\254=\0|2\0n,\0\200<\0\237L\3\251M\11\235T\23:TI\15"
-  "e{\24o\202\30x\206\32z\210\0\0\266\243\0\270\245\0\262\237\0\254\232"
-  "\0\242\221\0\204\202\0V\200\16\302\266\0\236\244\4\210\220\0\260\235"
-  "\0\264\241\0\250\222\0\234r\0\252;\4\255:\15\255>\15\252<\6\240K\0xA"
-  "\0z+\0x*\0X\35\0""4\27\0N(\0\202:\0\244Y\10\243\202\17\245\202\11\225"
-  "r\37+eM\21p{\33v\201\31y\207\0\0\264\241\0\266\243\0\264\241\0\256\234"
-  "\0\230\210\0\244\223\0z\230\0\267\271\7\263\265\3G|\16\222\211\0\264"
-  "\241\0\254\232\0\220}\0zd\0lJ\0tL\0~h\0\202q\0vd\0@'\0=-\13\16HL\23I"
-  "M/;\37dR\0Y\222\0M\224\0N\226\0N\226\0A\222\0\24\202#\31}r\32|\210\0"
-  "\0\270\245\0\266\243\0\266\243\0\264\241\0\232\212\0\236\215\0\230\217"
-  "\0g\231\5x\240\0\222\215\0\262\243\0\264\241\0\264\241\0\226\206\0~q"
-  "\0~q\0\210z\0~q\0~q\0ja\0M`\0\20`X\6`p\7aq\17cL<z\0L\232\0M\244\0P\252"
-  "\0P\252\0N\246\0Q\244\0\33\205>\34w\212\0\0\272\246\0\270\245\0\266\243"
-  "\0\264\241\0\240\217\0\230\210\0\250\226\0\204\202\0\224\210\0\264\241"
-  "\0\262\237\0\264\241\0\266\243\0\254\232\0\236\215\0\220\201\0\210z\0"
-  "\210z\0\202t\0~\200\0c\214\0@\226\0\36\227\1(\234\4S\272\0U\264\0M\244"
-  "\0T\262\0T\262\0S\260\0T\262\0S\250\0\24\202+\32z\210\0\0"};
+  "waw\232$J\204\245\0\0\245\0\0\245\0\0\245\0\0\245\0\0\245\0\0\245\0\0"
+  "\245\0\0\245\0\0\245\0\0\245\0\0\245\0\0\"E|MVgFB\30\36_f\36v\214\35"
+  "x\217\40{\222$|\222%}\223(}\2200{\204xb\244\206\202\243\205\201\243\205"
+  "}\245\214u\262\225\\\247\211o\241\204u\243\205o\235\204q$J\203\204\246"
+  "\316\357()\357()\357()\357()\357()\357()\357()\357()\357()\357()\357"
+  "()\357()\214\252\326\"F|:\35\0BM3$p\200\"z\220\35x\217\33v\215\35{\223"
+  "#{\221.\200\214de\224\253U\222\255S\204\2719\251\321\13\276\252\0\310"
+  "\256\0\325\257\27\246\213`\227yq!I\204\214\252\326\316\0\0\316\0\0\316"
+  "\0\0\316\0\0\316\0\0\316\0\0\316\0\0\316\0\0\316\0\0\316\0\0\316\0\0"
+  "\316\0\0\224\256\326!I\2042\26\0>\"\0/QB\40x\216\32u\214\26q\210\27v"
+  "\215\33y\215\40z\212\40\0h\322\0\\\304\0\\\272\0\217\240\0\230\210\0"
+  "\224\204\0\240\217\0\256\227\0\302\244\0!I\204\214\252\326\377\377\377"
+  "\377\377\377\347\353\347\347\353\347\347\353\347\347\353\347\347\353"
+  "\347\347\353\347\347\353\347\347\353\347\367\367\367\377\377\377\224"
+  "\256\326!I\204@\36\0<\40\0H)\0!ju\33r\205\25s\207\31w\213\33y\215\36"
+  "\177\210\40""1T\262\0S\260\0n\234\0\244\232\0\224\204\0\224\204\0\224"
+  "\204\0\226\206\0\236\215\0!I\204\214\246\326\377\377\377\377\373\377"
+  "\347\347\347\347\347\347\347\347\347\347\347\347\347\347\347\347\347"
+  "\347\347\347\347\347\347\347\367\367\367\377\377\377\214\256\326!I\204"
+  "^.\0X+\0D#\0>B(\25m\177\23q\211\32z\210\35}\213\40~\206itR\256\0X\242"
+  "\0\217\230\0\242\221\0\224\204\0\226\206\0\230\210\0\234\213\0\232\212"
+  "\0!I\204\204\246\316\377\377\377\377\377\377\367\363\357\367\363\357"
+  "\367\363\357\367\363\357\367\363\357\367\363\357\367\363\357\367\363"
+  "\357\377\373\377\377\377\377\214\252\326!I\204b0\0R)\0V-\0Z5\0'`a\26"
+  "q\204\25p\207\31y\207\32\201\210apN\246\0d\236\0\244\236\0\236\215\0"
+  "\234\213\0\240\217\0\250\226\0\244\223\0\224\204\0!I\204\204\242\316"
+  "\377\377\377\377\373\377\336\337\336\336\337\336\336\337\336\336\337"
+  "\336\336\337\336\336\337\336\336\337\336\336\337\336\367\363\367\377"
+  "\377\377\214\252\326!I\204H\"\0F#\0Z*\0T1\0-OC\27fy\23n\205\27r\211\30"
+  "s\212\40\0=\210\0T\216\0\222\220\0\240\217\0\246\224\0\240\217\0\230"
+  "\210\0\210z\0xk\0!I\204{\242\316\265\307\347\367\367\377\367\373\377"
+  "\367\373\377\367\373\377\367\373\377\367\373\377\367\373\377\367\373"
+  "\377\367\373\377\367\367\377\265\313\347\204\246\316!I\204>\35\0""4\27"
+  "\0>\35\0<\36\0+I>\25ey\26n\204\26q\210\32z\210neY~\0y\204\0\244\226\0"
+  "\270\245\0\264\241\0\244\223\0\226\206\0\214}\0~q\0!I\204{\236\316Z\206"
+  "\275Jm\224R]ZRURRURRURRURRURRURZ]ZBe\214Jy\265\204\242\316!I\2046\30"
+  "\0,\21\0""8\32\0""4\30\0$RN\22k~\23l\205\26t\210\33{\211xb\210\200\0"
+  "\244\223\0\266\243\0\260\235\0\266\243\0\266\243\0\256\234\0\226\206"
+  "\0\200r\0!I\204s\232\306Z\206\275R]Z\265\262\255\316\317\316\316\313"
+  "\316\326\323\326\336\337\336\357\353\357\377\373\377\316\317\316Z]cB"
+  "q\255{\236\316!I\2046\30\0<\31\0H$\0H)\0\26^n\16i\200\22p\204\26t\210"
+  "\34|\212\0\0\230\210\0\240\217\0\264\241\0\254\232\0\254\232\0\266\243"
+  "\0\256\234\0\242\221\0\230\210\0!I\204k\226\306R\202\275RUR\316\317\316"
+  "kqsRURcec\357\353\357\377\373\377\367\363\367\347\343\347RURBq\255s\232"
+  "\306!I\204.\22\0R)\0^1\0*>.\15e{\15h\177\21l\203\30s\206\31|\207\0\0"
+  "\260\235\0\250\226\0\264\245\0\260\235\0\256\234\0\254\232\0\252\230"
+  "\0\236\215\0\230\210\0!I\204k\222\306R}\275RUR\326\323\326ZacZ}\255R"
+  "UR\367\367\367\367\363\367\336\333\336\316\317\316RURBu\265k\226\306"
+  "!I\2042\25\0N'\0W<\11\31Y]\10f~\16i\200\21l\203\30x\206\33v\211\0\0\254"
+  "\232\0\260\235\0\264\241\0\260\235\0\242\221\0\254\232\0\240\223\0\206"
+  "\201\0\204|\0!I\204c\212\275J}\265RUR\336\333\336cacZ}\255RUR\357\357"
+  "\357\336\333\336\306\303\306\306\303\306RURJu\265k\216\306!I\204V&\0"
+  "\204;\0\220G\6""5K8\15bu\16i\200\22p\204\26t\210\33{\211\0\0\266\243"
+  "\0\256\234\0\262\237\0\254\232\0\252\230\0\222\211\0p\204\0V\214\10k"
+  "\202\0!I\204R\202\265R}\265RUR\357\353\357susRURcec\336\337\336\306\303"
+  "\306\255\256\255\275\276\275RURJu\265c\212\275!I\204\200<\0\237L\3\251"
+  "M\11\235T\23:TI\15e{\24o\202\30x\206\32z\210\0\0\266\243\0\270\245\0"
+  "\262\237\0\254\232\0\242\221\0\204\202\0V\200\16\302\266\0\236\244\4"
+  "w\213\2161Y\224R}\265RUR\367\363\367\377\377\377\367\367\367\357\353"
+  "\357\326\327\326\306\307\306\306\307\306\306\303\306RURZ\206\275R}\265"
+  "3<N\202:\0\244Y\10\243\202\17\245\202\11\225r\37+eM\21p{\33v\201\31y"
+  "\207\0\0\264\241\0\266\243\0\264\241\0\256\234\0\230\210\0\244\223\0"
+  "z\230\0\267\271\7\263\265\3V\206\"x\207l!I\204RYZRURRURRURRURRURRURR"
+  "URRURRYZ!I\204\33In0=\"dR\0Y\222\0M\224\0N\226\0N\226\0A\222\0\24\202"
+  "#\31}r\32|\210\0\0\270\245\0\266\243\0\266\243\0\264\241\0\232\212\0"
+  "\236\215\0\230\217\0g\231\5x\240\0\222\215\0\262\243\0\264\241\0\264"
+  "\241\0\226\206\0~q\0~q\0\210z\0~q\0~q\0ja\0M`\0\20`X\6`p\7aq\17cL<z\0"
+  "L\232\0M\244\0P\252\0P\252\0N\246\0Q\244\0\33\205>\34w\212\0\0\272\246"
+  "\0\270\245\0\266\243\0\264\241\0\240\217\0\230\210\0\250\226\0\204\202"
+  "\0\224\210\0\264\241\0\262\237\0\264\241\0\266\243\0\254\232\0\236\215"
+  "\0\220\201\0\210z\0\210z\0\202t\0~\200\0c\214\0@\226\0\36\227\1(\234"
+  "\4S\272\0U\264\0M\244\0T\262\0T\262\0S\260\0T\262\0S\250\0\24\202+\32"
+  "z\210\0\0"};
 
 
index 4f9ca74..dd05f12 100644 (file)
@@ -23,65 +23,76 @@ const guint8 img_preview[] =
   /* height (19) */
   "\0\0\0\23"
   /* pixel_data: */
-  "\326_[\326_[\326_[\326_[\326_[\326^Y\325ZV\325YT\325YT\323TP\321LH\320"
-  "FA\315;6\2702-\233*&}\"\36x\40\35\210%!u\37\34h\34\31S\26\24I\24\22K"
-  "\24\22u\37\34\245-(\2702-\255/*\252.)\2702-\2702-\2620+\256/+\250-)\235"
-  "*&\0\0\326^Y\326^Y\326_[\326^Y\325YT\325YT\325ZV\324VQ\323SN\321LH\320"
-  "HC\315=8\30350\240+'m\35\32\216&#\2764/\2722-\256/+\206$!I\24\22F\23"
-  "\21K\24\22E\22\21S\26\24\201#\40\233*&\2702-\2702-\2764/\3004/\3004/"
-  "\3004/\3004/\40""1\325ZV\325YT\325YT\326_[\331id\326^Y\323TP\324VQ\323"
-  "SN\320FA\315;6\30661\2620+}\"\36s\37\34\2722-\31271\2764/\253.*m\35\32"
-  "I\24\22F\23\21K\24\22F\23\21I\24\22V\27\25\220'#\2620+\2764/\2702-\266"
-  "1-\2764/\2764/\306610\12\334ws\335xt\335{x\345\233\230\335xt\336\200"
-  "}\340\210\205\326^Y\320HC\315=8\3024/\2702-\245-(\201#\40\2600+\3137"
-  "2\31483\226)%\203#\40i\34\32S\26\24e\33\30[\30\26P\25\23Q\26\24K\24\22"
-  "[\30\26\220'#\2722-\2651,\256/+\2651,\2702-\2753.t\"\340\210\205\334"
-  "ws\332mi\327a\\\321KF\320FA\323SN\327a\\\333sp\323SN\2661-\253.*\210"
-  "%!\226)%\2702-\31061\31372\240+'{!\36\206$!\203#\40\226)%q\37\34n\36"
-  "\33f\34\31Y\30\26Y\30\26h\34\31\252.)\2620+\2600+\2661-\2702-\3004/\40"
-  "\"\327a\\\326_[\323SN\327a\\\320FA\320FA\320FA\321ID\323QL\323QL\325"
-  "YT\235*&\226)%\245-(\226)%\2600+\31483\31483\2661-\232*%\245-(\226)%"
-  "\222'#\206$!n\36\33q\37\34m\35\32^\31\27\201#\40\252.)\256/+\2722-\276"
-  "4/\3004/*\"\326^Y\323SN\325YT\324VQ\320FA\321ID\321KF\323QL\321LH\317"
-  "A<\3024/\2702-\2651,\243,(\210%!\253.*\31483\31483\31483\31483\253.*"
-  "\2620+\2600+\222'#s\37\34u\37\34i\34\32m\35\32y!\36\240+'\256/+\255/"
-  "*\2702-\3004/in\323SN\323QL\327d`\323QL\323QL\323SN\326_[\325ZV\320F"
-  "A\2661-\250-)\2631,\252.)\240+'\232*%\2722-\31061\2702-\2753.\315;6\315"
-  "=8\31061\245-({!\36f\34\31`\32\27`\32\27m\35\32q\37\34\215&\"\245-(\252"
-  ".)\2600+\2620+\40\"\30350\315=8\323QL\323SN\325ZV\323SN\321KF\31483\270"
-  "2-\2620+\3004/\240+'\253.*\245-(\243,(\252.)\252.)\245-(\233*&\2661-"
-  "\31372\2702-\226)%q\37\34h\34\31X\30\25P\25\23X\30\25X\30\25\206$!\242"
-  ",'\253.*\256/+\2722-ef\3024/\315=8\326^Y\333rn\332mi\325ZV\321ID\315"
-  "=8\3004/\255/*\2620+\245-(\245-(\245-(\232*%\233*&\245-(\232*%\226)%"
-  "\226)%\2702-\256/+\245-(m\35\32e\33\30Q\26\24E\22\21S\26\24P\25\23\216"
-  "&#\245-(\252.)\2620+\2753.\"\12\315=8\325ZV\332mi\330gc\332mi\332mi\330"
-  "ea\321ID\3024/\252.)\2631,\210%!S\26\24\200#\37\253.*\242,'\243,(\253"
-  ".*\256/+\2620+\2753.\2702-\245-(Q\26\24`\32\27Q\26\24S\26\24`\32\27h"
-  "\34\31\232*%\245-(\253.*\2620+\2764/ef\321KF\323SN\332mi\327d`\327d`"
-  "\332mi\330ea\324VQ\321KF\3004/\256/+\210%!Y\30\26Y\30\26\225($\240+'"
-  "\2600+\2702-\2722-\2764/\2702-\2702-\233*&I\24\22P\25\23F\23\21i\34\32"
-  "u\37\34y!\36\240+'\243,(\250-)\2620+\2753.\0\0\330gc\326_[\333pl\330"
-  "gc\330ea\327d`\327a\\\323QL\321KF\327a\\\325YT\2764/\215&\"m\35\32{!"
-  "\36\240+'\2702-\3004/\3004/\2661-\2651,\245-(y!\36[\30\26Q\26\24K\24"
-  "\22f\34\31\200#\37\225($\240+'\245-(\250-)\2702-\2661-\0\0\327d`\330"
-  "gc\332mi\330gc\324VQ\327d`\325YT\316>9\31483\327d`\330gc\326_[\31483"
-  "\3004/\2661-\2620+\2702-\2722-\2651,\252.)\233*&\215&\"u\37\34x\40\35"
-  "s\37\34h\34\31\213&\"\233*&\210%!\232*%\245-(\253.*\2620+\2753.\0\0\332"
-  "mi\330ea\331jf\327d`\327a\\\321KF\315;6\315=8\31483\325ZV\332mi\330e"
-  "a\323TP\2702-\2620+\2600+\2651,\2620+\245-(\232*%\235*&\225($\232*%\200"
-  "#\37u\37\34\213&\"\245-(\252.)\256/+\226)%\240+'\253.*\2702-\2722-\0"
-  "\0\332mi\333rn\331jf\327d`\324VQ\316>9\30661\340\206\203\331id\322PK"
-  "\330gc\332mi\325ZV\31483\226)%\226)%\233*&\226)%\245-(\216&#y!\36x\40"
-  "\35^\31\27P\25\23h\34\31\210%!\2651,\321KF\321KF\31483\245-(\253.*\265"
-  "1,\2702-\0\0\332mi\332mi\332mi\330ea\321KF\325ZV\323SN\340\210\205\337"
-  "\202~\2764/\321KF\332mi\327d`\315=8\2620+\225($\226)%\2702-\3004/\262"
-  "0+`\32\27h\34\31{!\36\200#\37s\37\34\232*%\317A<\316@;\317C>\317C>\315"
-  ";6\2661-\2722-\2753.\0\0\333rn\332mi\332mi\332mi\321LH\323QL\323SN\322"
-  "PK\325ZV\322PK\332mi\332mi\332mi\321ID\3004/\3004/\31483\3004/\3004/"
-  "\252.)\242,'\226)%\226)%\226)%\226)%\2661-\320FA\323QL\325YT\325YT\323"
-  "SN\323SN\2764/\2702-\0\0\333sp\333rn\332mi\332mi\323SN\321KF\326_[\316"
-  ">9\321KF\332mi\331jf\332mi\332mi\327d`\323QL\317A<\31483\31483\30661"
-  "\315;6\316>9\316>9\31372\315=8\331id\327d`\323QL\327a\\\327a\\\326_["
-  "\327a\\\324VQ\2661-\2722-\0\0"};
+  "\246\213\204\246\213\204\244\213\204\244\213\200\244\213\200\243\211"
+  "}\240\207|\237\206{\237\206{\236\204x\230~r\222yn\201so<pxdQ(l5\0`2\0"
+  "v=\0h.\0T(\0:\33\0""0\24\0""2\25\0O5\13.bj)t\207\27o\205\23n\205\35v"
+  "\217\34w\216\32r\214\27n\233\25h\235\21`\227\0\0\244\211\202\244\211"
+  "\202\244\212~\243\211}\243\205}\237\206\177\241\207y\242\205v\237\202"
+  "w\227\177u\223zo\216slfpp:\\T\\+\0\214;\0\274Y\20\270X\22\262N\22|7\0"
+  "0\24\0.\22\0""2\25\0,\21\0""8\34\0FB\30\36_f\36v\214\35x\217\40{\222"
+  "$|\222%}\223(}\2200{\204\40""1\244\206\202\243\205\201\243\205}\245\214"
+  "u\262\225\\\247\211o\241\204u\243\205o\235\204q\222yn\216phiqq%p\203"
+  "3B,h,\0\267V!\301`+\275Y\35\262M\2^*\0""0\24\0.\22\0""2\25\0.\23\0""0"
+  "\25\0:\35\0BM3$p\200\"z\220\35x\217\33v\215\35{\223#{\221.\200\2140\12"
+  "\224\253U\222\255S\204\2719\251\321\13\276\252\0\310\256\0\325\257\27"
+  "\246\213`\227yq\220rjgoo%t\207\24hzBB,\237T\35\302a,\304a0\222A\0t9\0"
+  "V(\0<\33\0N%\0D\40\0""4\27\0""6\30\0""2\26\0>\"\0/QB\40x\216\32u\214"
+  "\26q\210\27v\215\33y\215\40z\212t\"h\322\0\\\304\0\\\272\0\217\240\0"
+  "\230\210\0\224\204\0\240\217\0\256\227\0\302\244\0\233\2115$s\212\23"
+  "o\211\24RZyE\27\256V\40\277_+\306`.\256A\6l3\0z9\0v8\0\214B\0^.\0^,\0"
+  "P&\0@\36\0<\40\0H)\0!ju\33r\205\25s\207\31w\213\33y\215\36\177\210\40"
+  "\"T\262\0S\260\0n\234\0\244\232\0\224\204\0\224\204\0\224\204\0\226\206"
+  "\0\236\215\0\236\215\0\224\226\0\17dsYN+\216L\34fI&\242R\"\305c-\317"
+  "`)\276Q\26\234B\0\242L\0\210C\0\216\77\0x8\0^,\0^.\0X+\0D#\0>B(\25m\177"
+  "\23q\211\32z\210\35}\213\40~\206*\"R\256\0X\242\0\217\230\0\242\221\0"
+  "\224\204\0\226\206\0\230\210\0\234\213\0\232\212\0\220\201\0\200r\0|"
+  "i\0\270P\"\264B\12\2037\15\236O$\276f6\306b,\316_(\314b\"\256N\0\271"
+  "O\17\267O\11\222>\0`/\0b0\0R)\0V-\0Z5\0'`a\26q\204\25p\207\31y\207\32"
+  "\201\210inN\246\0d\236\0\244\236\0\236\215\0\234\213\0\240\217\0\250"
+  "\226\0\244\223\0\224\204\0xh\0n]\0\316J\20\315\77#\3118\27\3115\7\273"
+  "T+\273`/\274S\24\271X\27\316d$\320e*\312](\264D\0n1\0P&\0H\"\0F#\0Z*"
+  "\0T1\0-OC\27fy\23n\205\27r\211\30s\212\40\"=\210\0T\216\0\222\220\0\240"
+  "\217\0\246\224\0\240\217\0\230\210\0\210z\0xk\0rf\0\246f\0\3146\36\321"
+  "@#\304>\32\3238\17\325\77\27\314B\22\267B\11vL\"\251W\25\312`\40\300"
+  "Q\32\2549\0d-\0R'\0>\35\0""4\27\0>\35\0<\36\0+I>\25ey\26n\204\26q\210"
+  "\32z\210efY~\0y\204\0\244\226\0\270\245\0\264\241\0\244\223\0\226\206"
+  "\0\214}\0~q\0ra\0\274P\0\303@\35\274A(\264B(\3025\24\3251\21\3359\23"
+  "\3104\6\230>\26\231\77\11\300S\22\274K\24\264C\14^*\0N%\0""6\30\0,\21"
+  "\0""8\32\0""4\30\0$RN\22k~\23l\205\26t\210\33{\211\"\12\210\200\0\244"
+  "\223\0\266\243\0\260\235\0\266\243\0\266\243\0\256\234\0\226\206\0\200"
+  "r\0p_\0\274Q\2\274&\10\200\6\0\267\37\23\275E1\3274\31\3452\25\337>\23"
+  "\325D\21\315I\17\312S\30\300Q\32\265D\15""6\31\0J#\0""6\30\0<\31\0H$"
+  "\0H)\0\26^n\16i\200\22p\204\26t\210\34|\212ef\230\210\0\240\217\0\264"
+  "\241\0\254\232\0\254\232\0\266\243\0\256\234\0\242\221\0\230\210\0\200"
+  "o\0\250S\0\274)\2\234\4\0\222\7\0\2671\37\3263\36\345\77\31\342I\32\332"
+  "M\26\326Q\26\320M\32\306Q\30\260>\0""0\25\0""6\27\0.\22\0R)\0^1\0*>."
+  "\15e{\15h\177\21l\203\30s\206\31|\207\0\0\260\235\0\250\226\0\264\245"
+  "\0\260\235\0\256\234\0\254\232\0\252\230\0\236\215\0\230\210\0\252\230"
+  "\0\256\217\0\305W\25\306'\10\252\20\0\266\35\4\3263\30\343G\35\341P\27"
+  "\330S\30\323K\25\305N\23\267D\13l0\0D\40\0:\31\0""2\25\0N'\0W<\11\31"
+  "Y]\10f~\16i\200\21l\203\30x\206\33v\211\0\0\254\232\0\260\235\0\264\241"
+  "\0\260\235\0\242\221\0\254\232\0\240\223\0\206\201\0\204|\0\254\232\0"
+  "\260\235\0\302\216\0\312b\34\311X'\315L\37\324F\32\325M\27\323O\25\312"
+  "L\24\274G\16\257>\7\212:\0d/\0f0\0h,\0V&\0\204;\0\220G\6""5K8\15bu\16"
+  "i\200\22p\204\26t\210\33{\211\0\0\266\243\0\256\234\0\262\237\0\254\232"
+  "\0\252\230\0\222\211\0p\204\0V\214\10k\202\0\242\225\0\264\241\0\262"
+  "\233\0\272\210\0\301T\13\277L\31\301K\27\277O\27\276M\26\265D\15\253"
+  "=\7\260\77\2\236;\0\254=\0|2\0n,\0\200<\0\237L\3\251M\11\235T\23:TI\15"
+  "e{\24o\202\30x\206\32z\210\0\0\266\243\0\270\245\0\262\237\0\254\232"
+  "\0\242\221\0\204\202\0V\200\16\302\266\0\236\244\4\210\220\0\260\235"
+  "\0\264\241\0\250\222\0\234r\0\252;\4\255:\15\255>\15\252<\6\240K\0xA"
+  "\0z+\0x*\0X\35\0""4\27\0N(\0\202:\0\244Y\10\243\202\17\245\202\11\225"
+  "r\37+eM\21p{\33v\201\31y\207\0\0\264\241\0\266\243\0\264\241\0\256\234"
+  "\0\230\210\0\244\223\0z\230\0\267\271\7\263\265\3G|\16\222\211\0\264"
+  "\241\0\254\232\0\220}\0zd\0lJ\0tL\0~h\0\202q\0vd\0@'\0=-\13\16HL\23I"
+  "M/;\37dR\0Y\222\0M\224\0N\226\0N\226\0A\222\0\24\202#\31}r\32|\210\0"
+  "\0\270\245\0\266\243\0\266\243\0\264\241\0\232\212\0\236\215\0\230\217"
+  "\0g\231\5x\240\0\222\215\0\262\243\0\264\241\0\264\241\0\226\206\0~q"
+  "\0~q\0\210z\0~q\0~q\0ja\0M`\0\20`X\6`p\7aq\17cL<z\0L\232\0M\244\0P\252"
+  "\0P\252\0N\246\0Q\244\0\33\205>\34w\212\0\0\272\246\0\270\245\0\266\243"
+  "\0\264\241\0\240\217\0\230\210\0\250\226\0\204\202\0\224\210\0\264\241"
+  "\0\262\237\0\264\241\0\266\243\0\254\232\0\236\215\0\220\201\0\210z\0"
+  "\210z\0\202t\0~\200\0c\214\0@\226\0\36\227\1(\234\4S\272\0U\264\0M\244"
+  "\0T\262\0T\262\0S\260\0T\262\0S\250\0\24\202+\32z\210\0\0"};
 
 
index b1eaa96..a0f3338 100644 (file)
Binary files a/gui/buttons/col.bmp and b/gui/buttons/col.bmp differ
index 5bf4672..b1eaa96 100644 (file)
Binary files a/gui/buttons/preview.bmp and b/gui/buttons/preview.bmp differ
index 49f7ec8..afd572e 100644 (file)
@@ -18,7 +18,7 @@ GdkPixbuf *img_pixbuf = NULL;
 int img_width, img_height;
 int copy_width, copy_height;
 char img_name[256];
-unsigned short *img_grey_buffer = NULL;
+unsigned short *img_grey_buffer = NULL, *img_preview_buffer = NULL;
 unsigned char *img_mark_buffer = NULL, *img_mark_buffer_undo[UNDO_MAX], *img_mark_buffer_copy;
 int button_down_x_undo[UNDO_MAX], button_down_y_undo[UNDO_MAX];
 int undo_current, undo_num;
@@ -29,40 +29,25 @@ extern int button_down_x, button_down_y;
 /* load image and create pixbuf */
 void create_image(const char *filename, int resize)
 {
-       static char imgfile[256];
-
        destroy_image();
 
        anything_modified = 0;
 
        strcpy(img_name, filename);
-       if (rendered) {
-               const char *p, *q;
-               p = filename;
-               while((q = strchr(p, DIR_SEPERATOR)))
-               p = q + 1;
-               strcpy(imgfile, filename);
-               imgfile[p - filename] = '\0';
-               strcat(imgfile, "colorized_");
-               strcat(imgfile, p);
-       } else
-               strcpy(imgfile, filename);
-       img_grey_buffer = load_img(&img_width, &img_height, imgfile, 0);
+       img_grey_buffer = load_img(&img_width, &img_height, filename, 0);
        if (!img_grey_buffer) {
-               img_grey_buffer = NULL;
-               if (!rendered)
-                       printerror("Failed to load grey image '%s'", imgfile);
-               else {
-                       img_width = 16;
-                       img_height = 16;
-                       goto no_mark;
-               }
+               printerror("Failed to load grey image '%s'", filename);
                return;
        }
+       if (preview)
+               create_preview();
+       else if (rendered)
+               create_rendered(filename);
        img_mark_buffer = malloc(img_width*img_height);
        if (!img_mark_buffer) {
                free(img_grey_buffer);
                img_grey_buffer = NULL;
+               destroy_preview();
                return;
        }
        memset(img_mark_buffer, 0, img_width*img_height);
@@ -75,11 +60,62 @@ void create_image(const char *filename, int resize)
                        frame_list[timeline_selected].marked = 0;
        }
 
-no_mark:
        /* create pixbuf */
        create_or_reset_pixbuf(resize);
 }
 
+void create_preview()
+{
+       size_t size = img_width*img_height*3*sizeof(*img_preview_buffer);
+
+       destroy_preview();
+
+       /* no grey image, so no preview */
+       if (!img_grey_buffer) {
+               return;
+       }
+
+       img_preview_buffer = malloc(size);
+       if (!img_preview_buffer) {
+               return;
+       }
+
+       memcpy(img_preview_buffer, img_grey_buffer, size);
+}
+
+void create_rendered(const char *filename)
+{
+       static char imgfile[256];
+       const char *p, *q;
+       int width, height;
+
+       destroy_preview();
+
+       /* no grey image, so no preview */
+       if (!img_grey_buffer) {
+               return;
+       }
+
+       p = filename;
+       while((q = strchr(p, DIR_SEPERATOR)))
+       p = q + 1;
+       strcpy(imgfile, filename);
+       imgfile[p - filename] = '\0';
+       strcat(imgfile, "colorized_");
+       strcat(imgfile, p);
+
+       img_preview_buffer = load_img(&width, &height, imgfile, 0);
+       if (!img_preview_buffer) {
+               printerror("Failed to load rendered image '%s'", imgfile);
+               return;
+       }
+       if (width != img_width || height != img_height) {
+               printerror("Failed to load: Rendered image '%s' has different size", imgfile);
+               destroy_preview();
+               return;
+       }
+}
+
 void create_or_reset_pixbuf(int resize)
 {
        int w, h, dw = 0, dh = 0;
@@ -161,6 +197,7 @@ void destroy_image(void)
 
        free(img_grey_buffer);
        img_grey_buffer = NULL;
+       destroy_preview();
        free(img_mark_buffer);
        img_mark_buffer = NULL;
        for (i = 0; i < UNDO_MAX; i++) {
@@ -171,15 +208,20 @@ void destroy_image(void)
        }
 }
 
+void destroy_preview(void)
+{
+       free(img_preview_buffer);
+       img_preview_buffer = NULL;
+}
+
 /* draw (area) of pixbuf */
 void draw_image(int x, int y, int w, int h)
 {
        GdkDrawable *draw = gtk_widget_get_window(img_drawing_area);
        int window_width, window_height, x_offset, y_offset;
        gdk_drawable_get_size (draw, &window_width, &window_height);
-       double _r, _g, _b, _y, _u, _v, u_palette, v_palette, pat, alpha;
+       double _r, _g, _b, pat, alpha;
        int cr, cg, cb;
-       int _c, preview_asis = 0;
 
        if (w < 0)
                w = window_width;
@@ -266,51 +308,16 @@ void draw_image(int x, int y, int w, int h)
        y -= y_offset;
 
        if (img_grey_buffer) {
-               if (preview) {
-                       rgb2yuv_pixle(mark_palette[mark_selected].r / 255.0F, mark_palette[mark_selected].g / 255.0F, mark_palette[mark_selected].b / 255.0F, &_y, &u_palette, &v_palette);
-                       /* check for white color (no change) */
-                       if (mark_palette[mark_selected].r == 255 && mark_palette[mark_selected].g == 255 && mark_palette[mark_selected].r == 255)
-                               preview_asis = 1;
-               }
                /* compose image (segment) line by line */
                for (i = 0; i < h; i++) {
                        for (j = 0; j < w; j++) {
-                               if (preview && !rendered && !flowview) {
-                                       /* apply selected color from palette to all pixles */
-                                       _r = img_grey_buffer[((j+x)*16/img_scale_x+img_width*((i+y)*16/img_scale_y))*3] / 65535.0F;
-                                       _g = img_grey_buffer[((j+x)*16/img_scale_x+img_width*((i+y)*16/img_scale_y))*3+1] / 65535.0F;
-                                       _b = img_grey_buffer[((j+x)*16/img_scale_x+img_width*((i+y)*16/img_scale_y))*3+2] / 65535.0F;
-                                       rgb2yuv_pixle(_r, _g, _b, &_y, &_u, &_v);
-                                       _y = (_y - 0.5) * mark_palette[mark_selected].contrast + 0.5;
-                                       _y += mark_palette[mark_selected].bright;
-                                       if (_y < 0)
-                                               _y = 0;
-                                       if (_y > 1)
-                                               _y = 1;
-                                       if (preview_asis)
-                                               yuv2rgb_pixle(_y, _u, _v, &_r, &_g, &_b);
-                                       else
-                                               yuv2rgb_pixle(_y, u_palette, v_palette, &_r, &_g, &_b);
-                                       _c = _r * 255.0F;
-                                       if (_c < 0)
-                                               _c = 0;
-                                       else if (_c > 255)
-                                               _c = 255;
-                                       compose[j*3] = _c;
-                                               _c = _g * 255.0F;
-                                       if (_c < 0)
-                                               _c = 0;
-                                       else if (_c > 255)
-                                               _c = 255;
-                                       compose[j*3+1] = _c;
-                                               _c = _b * 255.0F;
-                                       if (_c < 0)
-                                               _c = 0;
-                                       else if (_c > 255)
-                                               _c = 255;
-                                       compose[j*3+2] = _c;
-
+                               if (img_preview_buffer) {
+                                       /* show preview buffer */
+                                       compose[j*3] = img_preview_buffer[((j+x)*16/img_scale_x+img_width*((i+y)*16/img_scale_y))*3] >> 8;
+                                       compose[j*3+1] = img_preview_buffer[((j+x)*16/img_scale_x+img_width*((i+y)*16/img_scale_y))*3+1] >> 8;
+                                       compose[j*3+2] = img_preview_buffer[((j+x)*16/img_scale_x+img_width*((i+y)*16/img_scale_y))*3+2] >> 8;
                                } else {
+                                       /* show grey buffer */
                                        compose[j*3] = img_grey_buffer[((j+x)*16/img_scale_x+img_width*((i+y)*16/img_scale_y))*3] >> 8;
                                        compose[j*3+1] = img_grey_buffer[((j+x)*16/img_scale_x+img_width*((i+y)*16/img_scale_y))*3+1] >> 8;
                                        compose[j*3+2] = img_grey_buffer[((j+x)*16/img_scale_x+img_width*((i+y)*16/img_scale_y))*3+2] >> 8;
index c66b2d9..df25c59 100644 (file)
@@ -1,14 +1,17 @@
 extern GdkPixbuf *img_pixbuf;
 extern int img_width, img_height;
 extern char img_name[];
-extern unsigned short *img_grey_buffer;
+extern unsigned short *img_grey_buffer, *img_preview_buffer;
 extern unsigned char *img_mark_buffer;
 extern int img_scale_x, img_scale_y;
 extern int anything_modified;
 
 void create_image(const char *filename, int resize);
+void create_preview();
+void create_rendered(const char *filename);
 void create_or_reset_pixbuf(int resize);
 void destroy_image(void);
+void destroy_preview(void);
 void draw_image(int x, int y, int w, int h);
 void paint_brush(int x, int y, int size, int paint);
 void erase_mark(int index);
index b370a67..7642d70 100644 (file)
@@ -243,10 +243,6 @@ static void show_preview_event(gpointer priv)
 
 void colorize_event(gpointer priv)
 {
-       if (rendered) {
-               printerror("Disable colorized view first.");
-               return;
-       }
 #ifdef WITH_OPENCV
        if (flowview) {
                printerror("Disable flow view first.");
index ef02b31..19c5d8e 100644 (file)
@@ -145,8 +145,21 @@ void highlight_button_toggled(GtkButton *button, gpointer index)
 void preview_button_toggled(GtkButton *button, gpointer index)
 {
        preview = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+       if (preview) {
+               create_preview();
+               if (!img_preview_buffer)
+                       preview = 0;
+       } else if (!rendered)
+               destroy_preview();
+       set_button_toggel_by_label(TOGGLE_LABEL_PREVIEW, preview);
        set_menu_toggel_by_label(TOGGLE_LABEL_PREVIEW, preview);
        draw_image(0, 0, -1, -1);
+
+       if (preview && rendered) {
+               rendered = 0;
+               set_button_toggel_by_label(TOGGLE_LABEL_RENDERED, rendered);
+               set_menu_toggel_by_label(TOGGLE_LABEL_RENDERED, rendered);
+       }
 }
 
 void palette_button_clicked(GtkButton *button, gpointer index)
@@ -170,9 +183,21 @@ void view_colorized_button_toggled(GtkButton *button, gpointer index)
                rendered = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
        else
                rendered = 0;
+       if (rendered) {
+               create_rendered(img_name);
+               if (!img_preview_buffer)
+                       rendered = 0;
+       } else if (!preview)
+               destroy_preview();
        gtk_toggle_button_set_active(show_colorized_button, rendered);
        set_menu_toggel_by_label(TOGGLE_LABEL_RENDERED, rendered);
-       timeline_select_and_save(timeline_selected, timeline_selected);
+       draw_image(0, 0, -1, -1);
+
+       if (rendered && preview) {
+               preview = 0;
+               set_button_toggel_by_label(TOGGLE_LABEL_PREVIEW, preview);
+               set_menu_toggel_by_label(TOGGLE_LABEL_PREVIEW, preview);
+       }
 }
 
 #ifdef WITH_OPENCV