Nicolas Cellier uploaded a new version of MorphicExtras to project The Trunk:
http://source.squeak.org/trunk/MorphicExtras-nice.135.mcz ==================== Summary ==================== Name: MorphicExtras-nice.135 Author: nice Time: 12 December 2013, 1:43:36.621 am UUID: bf7f9115-7daf-40b9-ae28-b4ae2a540a76 Ancestors: MorphicExtras-nice.134 Fix PaintBoxMorph prototype icons. Remove historical bits - now that we can reconstruct, history is not necessary. It belongs to Monticello ancestry. =============== Diff against MorphicExtras-nice.134 =============== Item was added: + ----- Method: PaintBoxMorph class>>ellipseIcon (in category 'resources') ----- + ellipseIcon + ^self imageLibrary at: #ellipseIcon ifAbsentPut: [(Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: + 'iVBORw0KGgoAAAANSUhEUgAAABsAAAAVCAMAAACAAGUXAAADAFBMVEX///8AAAD///9/f3//AAAA/wAAAP8A/////wAAAAAfHx8/Pz9fX1+enp6+vr7e3t4HBwcPDw8XFxcnJycvLy83NzdHR0dPT09XV1dnZ2dvb293d3eGhoaOjo6Wlpampqaurq62trbGxsbOzs7W1tbm5ubu7u729vYAAAAAMgAAZQAAmAAAywAA/wAAADIAMjIAZTIAmDIAyzIA/zIAAGUAMmUAZWUAmGUAy2UA/2UAAJgAMpgAZZgAmJgAy5gA/5gAAMsAMssAZcsAmMsAy8sA/8sAAP8AMv8AZf8AmP8Ay/8A//8yAAAyMgAyZQAymAAyywAy/wAyADIyMjIyZTIymDIyyzIy/zIyAGUyMmUyZWUymGUyy2Uy/2UyAJgyMpgyZZgymJgyy5gy/5gyAMsyMssyZcsymMsyy8sy/8syAP8yMv8yZf8ymP8yy/8y//9lAABlMgBlZQBlmABlywBl/wBlADJlMjJlZTJlmDJlyzJl/zJlAGVlMmVlZWVlmGVly2Vl/2VlAJhlMphlZZhlmJhly5hl/5hlAMtlMstlZctlmMtly8tl/8tlAP9lMv9lZf9lmP9ly/9l//+YAACYMgCYZQCYmACYywCY/wCYADKYMjKYZTKYmDKYyzKY/zKYAGWYMmWYZWWYmGWYy2WY/2WYAJiYMpiYZZiYmJiYy5iY/5iYAMuYMsuYZcuYmMuYy8uY/8uYAP+YMv+YZf+YmP+Yy/+Y///LAADLMgDLZQDLmADLywDL/wDLADLLMjLLZTLLmDLLyzLL/zLLAGXLMmXLZWXLmGXLy2XL/2XLAJjLMpjLZZjLmJjLy5jL/5jLAMvLMsvLZcvLmMvLy8vL/8vLAP/LMv/LZf/LmP/Ly//L////AAD/MgD/ZQD/mAD/ywD//wD/ADL/MjL/ZTL/mDL/yzL//zL/AGX/MmX/ZWX/mGX/y2X//2X/AJj/Mpj/ZZj/mJj/y5j//5j/AMv/Msv/Zcv/mMv/y8v//8sAAAD/Mv//Zf//mP//y//////eTOgfAAABAHRSTlP///////////8A////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AP//////OE00OwAAALJJREFUeF6N0U0OgyAQBWDfFm0ygGLk73rteTzurCpIBIxN+lYTvpmEgYE5ZeeHDPyXRWeFlHLeWttz3g5QWhMgXD8XPcGEVFoN8p15KgdH1oLFPrFSQtGYh2lvqGGrLYitTRgvi1L0q5G+zMqxt9x7mqPl5xyT6g11jkV/F4u12oS5NYFQ7aVyZ0k8ty3G6TlLGQJU+54ZpbEc3AZo7o3jAoCOL6KV73boNOrZbPd/f8wXgWSq2Ol/ETUAAAAASUVORK5CYII=' readStream)) offset: -5@ -4; yourself]! Item was added: + ----- Method: PaintBoxMorph class>>ellipseIconImage (in category 'resources') ----- + ellipseIconImage + ^self imageLibrary at: #ellipseIcon ifAbsentPut: [Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: + 'iVBORw0KGgoAAAANSUhEUgAAABsAAAAVCAMAAACAAGUXAAADAFBMVEX///8AAAD///9/f3//AAAA/wAAAP8A/////wAAAAAfHx8/Pz9fX1+enp6+vr7e3t4HBwcPDw8XFxcnJycvLy83NzdHR0dPT09XV1dnZ2dvb293d3eGhoaOjo6Wlpampqaurq62trbGxsbOzs7W1tbm5ubu7u729vYAAAAAMgAAZQAAmAAAywAA/wAAADIAMjIAZTIAmDIAyzIA/zIAAGUAMmUAZWUAmGUAy2UA/2UAAJgAMpgAZZgAmJgAy5gA/5gAAMsAMssAZcsAmMsAy8sA/8sAAP8AMv8AZf8AmP8Ay/8A//8yAAAyMgAyZQAymAAyywAy/wAyADIyMjIyZTIymDIyyzIy/zIyAGUyMmUyZWUymGUyy2Uy/2UyAJgyMpgyZZgymJgyy5gy/5gyAMsyMssyZcsymMsyy8sy/8syAP8yMv8yZf8ymP8yy/8y//9lAABlMgBlZQBlmABlywBl/wBlADJlMjJlZTJlmDJlyzJl/zJlAGVlMmVlZWVlmGVly2Vl/2VlAJhlMphlZZhlmJhly5hl/5hlAMtlMstlZctlmMtly8tl/8tlAP9lMv9lZf9lmP9ly/9l//+YAACYMgCYZQCYmACYywCY/wCYADKYMjKYZTKYmDKYyzKY/zKYAGWYMmWYZWWYmGWYy2WY/2WYAJiYMpiYZZiYmJiYy5iY/5iYAMuYMsuYZcuYmMuYy8uY/8uYAP+YMv+YZf+YmP+Yy/+Y///LAADLMgDLZQDLmADLywDL/wDLADLLMjLLZTLLmDLLyzLL/zLLAGXLMmXLZWXLmGXLy2XL/2XLAJjLMpjLZZjLmJjLy5jL/5jLAMvLMsvLZcvLmMvLy8vL/8vLAP/LMv/LZf/LmP/Ly//L////AAD/MgD/ZQD/mAD/ywD//wD/ADL/MjL/ZTL/mDL/yzL//zL/AGX/MmX/ZWX/mGX/y2X//2X/AJj/Mpj/ZZj/mJj/y5j//5j/AMv/Msv/Zcv/mMv/y8v//8sAAAD/Mv//Zf//mP//y//////eTOgfAAABAHRSTlP///////////8A////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AP//////OE00OwAAALJJREFUeF6N0U0OgyAQBWDfFm0ygGLk73rteTzurCpIBIxN+lYTvpmEgYE5ZeeHDPyXRWeFlHLeWttz3g5QWhMgXD8XPcGEVFoN8p15KgdH1oLFPrFSQtGYh2lvqGGrLYitTRgvi1L0q5G+zMqxt9x7mqPl5xyT6g11jkV/F4u12oS5NYFQ7aVyZ0k8ty3G6TlLGQJU+54ZpbEc3AZo7o3jAoCOL6KV73boNOrZbPd/f8wXgWSq2Ol/ETUAAAAASUVORK5CYII=' readStream)]! Item was added: + ----- Method: PaintBoxMorph class>>eraseIcon (in category 'resources') ----- + eraseIcon + ^self imageLibrary at: #eraseIcon ifAbsentPut: [(Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: + 'iVBORw0KGgoAAAANSUhEUgAAAC8AAAAjCAMAAAAzO6PlAAADAFBMVEUAAAAAAAD//+V/f3//AAAA/wAAAP8A/////wD/AP8fHx8/Pz9fX1+enp6+vr7e3t4HBwcPDw8XFxcnJycvLy83NzdHR0dPT09XV1dnZ2dvb293d3eGhoaOjo6Wlpampqaurq62trbGxsbOzs7W1tbm5ubu7u729vYAAAAAMgAAZQAAmAAAywAA/wAAADIAMjIAZTIAmDIAyzIA/zIAAGUAMmUAZWUAmGUAy2UA/2UAAJgAMpgAZZgAmJgAy5gA/5gAAMsAMssAZcsAmMsAy8sA/8sAAP8AMv8AZf8AmP8Ay/8A//8yAAAyMgAyZQAymAAyywAy/wAyADIyMjIyZTIymDIyyzIy/zIyAGUyMmUyZWUymGUyy2Uy/2UyAJgyMpgyZZgymJgyy5gy/5gyAMsyMssyZcsymMsyy8sy/8syAP8yMv8yZf8ymP8yy/8y//9lAABlMgBlZQBlmABlywBl/wBlADJlMjJlZTJlmDJlyzJl/zJlAGVlMmVlZWVlmGVly2Vl/2VlAJhlMphlZZhlmJhly5hl/5hlAMtlMstlZctlmMtly8tl/8tlAP9lMv9lZf9lmP9ly/9l//+YAACYMgCYZQCYmACYywCY/wCYADKYMjKYZTKYmDKYyzKY/zKYAGWYMmWYZWWYmGWYy2WY/2WYAJiYMpiYZZiYmJiYy5iY/5iYAMuYMsuYZcuYmMuYy8uY/8uYAP+YMv+YZf+YmP+Yy/+Y///LAADLMgDLZQDLmADLywDL/wDLADLLMjLLZTLLmDLLyzLL/zLLAGXLMmXLZWXLmGXLy2XL/2XLAJjLMpjLZZjLmJjLy5jL/5jLAMvLMsvLZcvLmMvLy8vL/8vLAP/LMv/LZf/LmP/Ly//L////AAD/MgD/ZQD/mAD/ywD//wD/ADL/MjL/ZTL/mDL/yzL//zL/AGX/MmX/ZWX/mGX/y2X//2X/AJj/Mpj/ZZj/mJj/y5j//5j/AMv/Msv/Zcv/mMv/y8v//8v/AP//Mv//Zf//mP//y////+Vs9r+lAAABAHRSTlMA////////////////////////////////////////////////////AP//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////2hiZ4AAAATlJREFUeF7l1DFuhDAQBVA0bST7AFmJzsfci9Cl4xSWVgodVHsDJJBWWMJ2AW4yGRsWJYWxt0qRoaF4Y/4YQ/GXBY7qRZ7f8eTuNW5NNgevjcnmShnTXanN5PFRdcaV750FOB8CNz4aAwjXt9TQTz5auqFIiV1CpMiej5TIACR2tUYSgfsOa1Nv4YFw8L3FWqViXGuEn3wcqG5DNLxe0f3iN6opPqtff5dT4HTZGBfeC7QbVyqsPkRnFd73GnHbTRV0dFLiwfd3EHaPPsSzeE6e99QguAtZhsmdcf610gOklC1jrOsmc3ZsiK/LwgX4BvlxuZQcz04ZcfLUIFgjZVVV9fmZ96svi9Z3zlhZt0wkvhG+8Xlua58l/Q16TbxpPhudwQt+8DXvF8L1/CA989w/GtfEl+L/11Hf/SVoHyShmoYAAAAASUVORK5CYII=' readStream)) offset: -16@ -34; yourself]! Item was added: + ----- Method: PaintBoxMorph class>>eraseIconImage (in category 'resources') ----- + eraseIconImage + ^self imageLibrary at: #eraseIcon ifAbsentPut: [Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: + 'iVBORw0KGgoAAAANSUhEUgAAAC8AAAAjCAMAAAAzO6PlAAADAFBMVEUAAAAAAAD//+V/f3//AAAA/wAAAP8A/////wD/AP8fHx8/Pz9fX1+enp6+vr7e3t4HBwcPDw8XFxcnJycvLy83NzdHR0dPT09XV1dnZ2dvb293d3eGhoaOjo6Wlpampqaurq62trbGxsbOzs7W1tbm5ubu7u729vYAAAAAMgAAZQAAmAAAywAA/wAAADIAMjIAZTIAmDIAyzIA/zIAAGUAMmUAZWUAmGUAy2UA/2UAAJgAMpgAZZgAmJgAy5gA/5gAAMsAMssAZcsAmMsAy8sA/8sAAP8AMv8AZf8AmP8Ay/8A//8yAAAyMgAyZQAymAAyywAy/wAyADIyMjIyZTIymDIyyzIy/zIyAGUyMmUyZWUymGUyy2Uy/2UyAJgyMpgyZZgymJgyy5gy/5gyAMsyMssyZcsymMsyy8sy/8syAP8yMv8yZf8ymP8yy/8y//9lAABlMgBlZQBlmABlywBl/wBlADJlMjJlZTJlmDJlyzJl/zJlAGVlMmVlZWVlmGVly2Vl/2VlAJhlMphlZZhlmJhly5hl/5hlAMtlMstlZctlmMtly8tl/8tlAP9lMv9lZf9lmP9ly/9l//+YAACYMgCYZQCYmACYywCY/wCYADKYMjKYZTKYmDKYyzKY/zKYAGWYMmWYZWWYmGWYy2WY/2WYAJiYMpiYZZiYmJiYy5iY/5iYAMuYMsuYZcuYmMuYy8uY/8uYAP+YMv+YZf+YmP+Yy/+Y///LAADLMgDLZQDLmADLywDL/wDLADLLMjLLZTLLmDLLyzLL/zLLAGXLMmXLZWXLmGXLy2XL/2XLAJjLMpjLZZjLmJjLy5jL/5jLAMvLMsvLZcvLmMvLy8vL/8vLAP/LMv/LZf/LmP/Ly//L////AAD/MgD/ZQD/mAD/ywD//wD/ADL/MjL/ZTL/mDL/yzL//zL/AGX/MmX/ZWX/mGX/y2X//2X/AJj/Mpj/ZZj/mJj/y5j//5j/AMv/Msv/Zcv/mMv/y8v//8v/AP//Mv//Zf//mP//y////+Vs9r+lAAABAHRSTlMA////////////////////////////////////////////////////AP//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////2hiZ4AAAATlJREFUeF7l1DFuhDAQBVA0bST7AFmJzsfci9Cl4xSWVgodVHsDJJBWWMJ2AW4yGRsWJYWxt0qRoaF4Y/4YQ/GXBY7qRZ7f8eTuNW5NNgevjcnmShnTXanN5PFRdcaV750FOB8CNz4aAwjXt9TQTz5auqFIiV1CpMiej5TIACR2tUYSgfsOa1Nv4YFw8L3FWqViXGuEn3wcqG5DNLxe0f3iN6opPqtff5dT4HTZGBfeC7QbVyqsPkRnFd73GnHbTRV0dFLiwfd3EHaPPsSzeE6e99QguAtZhsmdcf610gOklC1jrOsmc3ZsiK/LwgX4BvlxuZQcz04ZcfLUIFgjZVVV9fmZ96svi9Z3zlhZt0wkvhG+8Xlua58l/Q16TbxpPhudwQt+8DXvF8L1/CA989w/GtfEl+L/11Hf/SVoHyShmoYAAAAASUVORK5CYII=' readStream)]! Item was added: + ----- Method: PaintBoxMorph class>>eyedropperIcon (in category 'resources') ----- + eyedropperIcon + ^self imageLibrary at: #eyedropperIcon ifAbsentPut: [(Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: + 'iVBORw0KGgoAAAANSUhEUgAAACYAAAAkCAMAAADSK7iXAAADAFBMVEX///8AAAD///9/f3//AAAA/wAAAP8A/////wAAAAAfHx8/Pz9fX1+enp6+vr7e3t4HBwcPDw8XFxcnJycvLy83NzdHR0dPT09XV1dnZ2dvb293d3eGhoaOjo6Wlpampqaurq62trbGxsbOzs7W1tbm5ubu7u729vYAAAAAMgAAZQAAmAAAywAA/wAAADIAMjIAZTIAmDIAyzIA/zIAAGUAMmUAZWUAmGUAy2UA/2UAAJgAMpgAZZgAmJgAy5gA/5gAAMsAMssAZcsAmMsAy8sA/8sAAP8AMv8AZf8AmP8Ay/8A//8yAAAyMgAyZQAymAAyywAy/wAyADIyMjIyZTIymDIyyzIy/zIyAGUyMmUyZWUymGUyy2Uy/2UyAJgyMpgyZZgymJgyy5gy/5gyAMsyMssyZcsymMsyy8sy/8syAP8yMv8yZf8ymP8yy/8y//9lAABlMgBlZQBlmABlywBl/wBlADJlMjJlZTJlmDJlyzJl/zJlAGVlMmVlZWVlmGVly2Vl/2VlAJhlMphlZZhlmJhly5hl/5hlAMtlMstlZctlmMtly8tl/8tlAP9lMv9lZf9lmP9ly/9l//+YAACYMgCYZQCYmACYywCY/wCYADKYMjKYZTKYmDKYyzKY/zKYAGWYMmWYZWWYmGWYy2WY/2WYAJiYMpiYZZiYmJiYy5iY/5iYAMuYMsuYZcuYmMuYy8uY/8uYAP+YMv+YZf+YmP+Yy/+Y///LAADLMgDLZQDLmADLywDL/wDLADLLMjLLZTLLmDLLyzLL/zLLAGXLMmXLZWXLmGXLy2XL/2XLAJjLMpjLZZjLmJjLy5jL/5jLAMvLMsvLZcvLmMvLy8vL/8vLAP/LMv/LZf/LmP/Ly//L////AAD/MgD/ZQD/mAD/ywD//wD/ADL/MjL/ZTL/mDL/yzL//zL/AGX/MmX/ZWX/mGX/y2X//2X/AJj/Mpj/ZZj/mJj/y5j//5j/AMv/Msv/Zcv/mMv/y8v//8sAAAD/Mv//Zf//mP//y//////eTOgfAAABAHRSTlP///////////8A////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AP//////OE00OwAAAR5JREFUeF6t1DGygjAQBmCHVkYroplhFBjzwmHouAidF8ALZOzSeYF4g1Smeu8CtlRJR5vqJejTV0CWwq2/2QnL/ruwdk4t7CfYj5IXmKnOaMkhdjO+5DHMlDF93xvZ4BD71oNyrAmx7ql4VQbYSzXlFFNK6f9qgslOaq/0U02wi2tjetPJYzWoqbdxZaQcWpWBn7Vfcfeqtxpn2ToquB/Enxpl2VdED7g5Vy81xpwi91Od1m81wnLqVJtYe64DLKeUXFsErKXvdcU1sL2riBKxXQJLnrtPFNsYyELhFUJAZJy6CxQDySr8uBAGAph7lcRATjM/riQF4rxfExEvUyD1rCACbcDjwA4t2sE3hKUYPDXsUTMuEpt3uD7LoPoFh1uzvVTXHQoAAAAASUVORK5CYII=' readStream)) offset: -12@ -35; yourself]! Item was added: + ----- Method: PaintBoxMorph class>>eyedropperIconImage (in category 'resources') ----- + eyedropperIconImage + ^self imageLibrary at: #eyedropperIcon ifAbsentPut: [Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: + 'iVBORw0KGgoAAAANSUhEUgAAACYAAAAkCAMAAADSK7iXAAADAFBMVEX///8AAAD///9/f3//AAAA/wAAAP8A/////wAAAAAfHx8/Pz9fX1+enp6+vr7e3t4HBwcPDw8XFxcnJycvLy83NzdHR0dPT09XV1dnZ2dvb293d3eGhoaOjo6Wlpampqaurq62trbGxsbOzs7W1tbm5ubu7u729vYAAAAAMgAAZQAAmAAAywAA/wAAADIAMjIAZTIAmDIAyzIA/zIAAGUAMmUAZWUAmGUAy2UA/2UAAJgAMpgAZZgAmJgAy5gA/5gAAMsAMssAZcsAmMsAy8sA/8sAAP8AMv8AZf8AmP8Ay/8A//8yAAAyMgAyZQAymAAyywAy/wAyADIyMjIyZTIymDIyyzIy/zIyAGUyMmUyZWUymGUyy2Uy/2UyAJgyMpgyZZgymJgyy5gy/5gyAMsyMssyZcsymMsyy8sy/8syAP8yMv8yZf8ymP8yy/8y//9lAABlMgBlZQBlmABlywBl/wBlADJlMjJlZTJlmDJlyzJl/zJlAGVlMmVlZWVlmGVly2Vl/2VlAJhlMphlZZhlmJhly5hl/5hlAMtlMstlZctlmMtly8tl/8tlAP9lMv9lZf9lmP9ly/9l//+YAACYMgCYZQCYmACYywCY/wCYADKYMjKYZTKYmDKYyzKY/zKYAGWYMmWYZWWYmGWYy2WY/2WYAJiYMpiYZZiYmJiYy5iY/5iYAMuYMsuYZcuYmMuYy8uY/8uYAP+YMv+YZf+YmP+Yy/+Y///LAADLMgDLZQDLmADLywDL/wDLADLLMjLLZTLLmDLLyzLL/zLLAGXLMmXLZWXLmGXLy2XL/2XLAJjLMpjLZZjLmJjLy5jL/5jLAMvLMsvLZcvLmMvLy8vL/8vLAP/LMv/LZf/LmP/Ly//L////AAD/MgD/ZQD/mAD/ywD//wD/ADL/MjL/ZTL/mDL/yzL//zL/AGX/MmX/ZWX/mGX/y2X//2X/AJj/Mpj/ZZj/mJj/y5j//5j/AMv/Msv/Zcv/mMv/y8v//8sAAAD/Mv//Zf//mP//y//////eTOgfAAABAHRSTlP///////////8A////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AP//////OE00OwAAAR5JREFUeF6t1DGygjAQBmCHVkYroplhFBjzwmHouAidF8ALZOzSeYF4g1Smeu8CtlRJR5vqJejTV0CWwq2/2QnL/ruwdk4t7CfYj5IXmKnOaMkhdjO+5DHMlDF93xvZ4BD71oNyrAmx7ql4VQbYSzXlFFNK6f9qgslOaq/0U02wi2tjetPJYzWoqbdxZaQcWpWBn7Vfcfeqtxpn2ToquB/Enxpl2VdED7g5Vy81xpwi91Od1m81wnLqVJtYe64DLKeUXFsErKXvdcU1sL2riBKxXQJLnrtPFNsYyELhFUJAZJy6CxQDySr8uBAGAph7lcRATjM/riQF4rxfExEvUyD1rCACbcDjwA4t2sE3hKUYPDXsUTMuEpt3uD7LoPoFh1uzvVTXHQoAAAAASUVORK5CYII=' readStream)]! Item was added: + ----- Method: PaintBoxMorph class>>fillIcon (in category 'resources') ----- + fillIcon + ^self imageLibrary at: #fillIcon ifAbsentPut: [(Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: + 'iVBORw0KGgoAAAANSUhEUgAAACEAAAAxCAMAAABj7DDGAAADAFBMVEX///8AAAD///9/f3//AAAA/wAAAP8A/////wAAAAAfHx8/Pz9fX1+enp6+vr7e3t4HBwcPDw8XFxcnJycvLy83NzdHR0dPT09XV1dnZ2dvb293d3eGhoaOjo6Wlpampqaurq62trbGxsbOzs7W1tbm5ubu7u729vYAAAAAMgAAZQAAmAAAywAA/wAAADIAMjIAZTIAmDIAyzIA/zIAAGUAMmUAZWUAmGUAy2UA/2UAAJgAMpgAZZgAmJgAy5gA/5gAAMsAMssAZcsAmMsAy8sA/8sAAP8AMv8AZf8AmP8Ay/8A//8yAAAyMgAyZQAymAAyywAy/wAyADIyMjIyZTIymDIyyzIy/zIyAGUyMmUyZWUymGUyy2Uy/2UyAJgyMpgyZZgymJgyy5gy/5gyAMsyMssyZcsymMsyy8sy/8syAP8yMv8yZf8ymP8yy/8y//9lAABlMgBlZQBlmABlywBl/wBlADJlMjJlZTJlmDJlyzJl/zJlAGVlMmVlZWVlmGVly2Vl/2VlAJhlMphlZZhlmJhly5hl/5hlAMtlMstlZctlmMtly8tl/8tlAP9lMv9lZf9lmP9ly/9l//+YAACYMgCYZQCYmACYywCY/wCYADKYMjKYZTKYmDKYyzKY/zKYAGWYMmWYZWWYmGWYy2WY/2WYAJiYMpiYZZiYmJiYy5iY/5iYAMuYMsuYZcuYmMuYy8uY/8uYAP+YMv+YZf+YmP+Yy/+Y///LAADLMgDLZQDLmADLywDL/wDLADLLMjLLZTLLmDLLyzLL/zLLAGXLMmXLZWXLmGXLy2XL/2XLAJjLMpjLZZjLmJjLy5jL/5jLAMvLMsvLZcvLmMvLy8vL/8vLAP/LMv/LZf/LmP/Ly//L////AAD/MgD/ZQD/mAD/ywD//wD/ADL/MjL/ZTL/mDL/yzL//zL/AGX/MmX/ZWX/mGX/y2X//2X/AJj/Mpj/ZZj/mJj/y5j//5j/AMv/Msv/Zcv/mMv/y8v//8sAAAD/Mv//Zf//mP//y//////eTOgfAAABAHRSTlP///////////8A////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AP//////OE00OwAAAglJREFUeF6tlN2aoyAMhsfTitIZJSugCX/67PXO5Xq0AdpOZ7a2J8ORJC/Jlwh52/cX623/VcL5mDwdE9R7RB+3SAeE87jsO2InpXtIkFuuFimJyNEPouvxZiFGUgrOfSPcV2QDuPnY9zH13R1xLYFYbM9SMMgUg/siuksB5IOUqwwbmhBD6N2NcKH6OXTis1zyZBjw5K6Ej9XPzhiTTFJqsAwQ3hHE/j4E9ksm1nmCmQGkSnQx9DF4HyKrWNcU49YJAMTZ2kowizkJu7dVphDc1llQwhotukIgHwDtt7UECD15mYlWazHZQkytUuPQIheaYhEoOyOUAjGByAQqBhgZZ8lqKAuUi5nYCqAgE2JUAzOM1ArRznIWkI3qQvDnULbKUi4AaTEChjFbShY7jGWj2uHEgDFhMQZUiayK0mWsG1BN085Ga88U1KBT7cckBKsGdW6as8gVcgx1BQphtck9+2h4jZp7IzSUvPr2b23uqckABwHuTlHZ2q/7gUQ+QiGaFmoCBXh3C/nmpDRU4lQTtAK/3VPPDX+vxN/czLbVP+46pTWem4sQBsD+/15iuBDNxL9jefjmrjE0TPj43V6IDy0OXjZW4iTwcDqcMgBIx/Mj90PTk/mRY0D3dAaNTWOfT6k/jXoxx+bHIe4n3Vnsr7KMLwj1Wsf7cx2fdT1X+vlyav8GcbD+Ab0bxRv8puClAAAAAElFTkSuQmCC' readStream)) offset: -10@ -44; yourself]! Item was added: + ----- Method: PaintBoxMorph class>>fillIconImage (in category 'resources') ----- + fillIconImage + ^self imageLibrary at: #fillIcon ifAbsentPut: [Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: + 'iVBORw0KGgoAAAANSUhEUgAAACEAAAAxCAMAAABj7DDGAAADAFBMVEX///8AAAD///9/f3//AAAA/wAAAP8A/////wAAAAAfHx8/Pz9fX1+enp6+vr7e3t4HBwcPDw8XFxcnJycvLy83NzdHR0dPT09XV1dnZ2dvb293d3eGhoaOjo6Wlpampqaurq62trbGxsbOzs7W1tbm5ubu7u729vYAAAAAMgAAZQAAmAAAywAA/wAAADIAMjIAZTIAmDIAyzIA/zIAAGUAMmUAZWUAmGUAy2UA/2UAAJgAMpgAZZgAmJgAy5gA/5gAAMsAMssAZcsAmMsAy8sA/8sAAP8AMv8AZf8AmP8Ay/8A//8yAAAyMgAyZQAymAAyywAy/wAyADIyMjIyZTIymDIyyzIy/zIyAGUyMmUyZWUymGUyy2Uy/2UyAJgyMpgyZZgymJgyy5gy/5gyAMsyMssyZcsymMsyy8sy/8syAP8yMv8yZf8ymP8yy/8y//9lAABlMgBlZQBlmABlywBl/wBlADJlMjJlZTJlmDJlyzJl/zJlAGVlMmVlZWVlmGVly2Vl/2VlAJhlMphlZZhlmJhly5hl/5hlAMtlMstlZctlmMtly8tl/8tlAP9lMv9lZf9lmP9ly/9l//+YAACYMgCYZQCYmACYywCY/wCYADKYMjKYZTKYmDKYyzKY/zKYAGWYMmWYZWWYmGWYy2WY/2WYAJiYMpiYZZiYmJiYy5iY/5iYAMuYMsuYZcuYmMuYy8uY/8uYAP+YMv+YZf+YmP+Yy/+Y///LAADLMgDLZQDLmADLywDL/wDLADLLMjLLZTLLmDLLyzLL/zLLAGXLMmXLZWXLmGXLy2XL/2XLAJjLMpjLZZjLmJjLy5jL/5jLAMvLMsvLZcvLmMvLy8vL/8vLAP/LMv/LZf/LmP/Ly//L////AAD/MgD/ZQD/mAD/ywD//wD/ADL/MjL/ZTL/mDL/yzL//zL/AGX/MmX/ZWX/mGX/y2X//2X/AJj/Mpj/ZZj/mJj/y5j//5j/AMv/Msv/Zcv/mMv/y8v//8sAAAD/Mv//Zf//mP//y//////eTOgfAAABAHRSTlP///////////8A////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AP//////OE00OwAAAglJREFUeF6tlN2aoyAMhsfTitIZJSugCX/67PXO5Xq0AdpOZ7a2J8ORJC/Jlwh52/cX623/VcL5mDwdE9R7RB+3SAeE87jsO2InpXtIkFuuFimJyNEPouvxZiFGUgrOfSPcV2QDuPnY9zH13R1xLYFYbM9SMMgUg/siuksB5IOUqwwbmhBD6N2NcKH6OXTis1zyZBjw5K6Ej9XPzhiTTFJqsAwQ3hHE/j4E9ksm1nmCmQGkSnQx9DF4HyKrWNcU49YJAMTZ2kowizkJu7dVphDc1llQwhotukIgHwDtt7UECD15mYlWazHZQkytUuPQIheaYhEoOyOUAjGByAQqBhgZZ8lqKAuUi5nYCqAgE2JUAzOM1ArRznIWkI3qQvDnULbKUi4AaTEChjFbShY7jGWj2uHEgDFhMQZUiayK0mWsG1BN085Ga88U1KBT7cckBKsGdW6as8gVcgx1BQphtck9+2h4jZp7IzSUvPr2b23uqckABwHuTlHZ2q/7gUQ+QiGaFmoCBXh3C/nmpDRU4lQTtAK/3VPPDX+vxN/czLbVP+46pTWem4sQBsD+/15iuBDNxL9jefjmrjE0TPj43V6IDy0OXjZW4iTwcDqcMgBIx/Mj90PTk/mRY0D3dAaNTWOfT6k/jXoxx+bHIe4n3Vnsr7KMLwj1Wsf7cx2fdT1X+vlyav8GcbD+Ab0bxRv8puClAAAAAElFTkSuQmCC' readStream)]! Item was removed: - ----- Method: PaintBoxMorph class>>fixUpPrototype (in category 'class initialization') ----- - fixUpPrototype - "PaintBoxMorph fixUpPrototype" - self error: 'who uses this?'. - Prototype eventHandler: nil! Item was changed: ----- Method: PaintBoxMorph class>>initialize (in category 'class initialization') ----- initialize "PaintBoxMorph initialize" + self prototype eventHandler: nil. + self prototype focusMorph: nil. + self prototype stampHolder clear. "clear stamps" + self prototype delete. "break link to world, if any" - Prototype eventHandler: nil. - Prototype focusMorph: nil. - Prototype stampHolder clear. "clear stamps" - Prototype delete. "break link to world, if any" AllOnImage := AllOffImage := AllPressedImage := nil. OriginalBounds := nil. ! Item was added: + ----- Method: PaintBoxMorph class>>lineIcon (in category 'resources') ----- + lineIcon + ^self imageLibrary at: #lineIcon ifAbsentPut: [(Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: + 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAVCAMAAAB1/u6nAAADAFBMVEX///8AAAD///9/f3//AAAA/wAAAP8A/////wAAAAAfHx8/Pz9fX1+enp6+vr7e3t4HBwcPDw8XFxcnJycvLy83NzdHR0dPT09XV1dnZ2dvb293d3eGhoaOjo6Wlpampqaurq62trbGxsbOzs7W1tbm5ubu7u729vYAAAAAMgAAZQAAmAAAywAA/wAAADIAMjIAZTIAmDIAyzIA/zIAAGUAMmUAZWUAmGUAy2UA/2UAAJgAMpgAZZgAmJgAy5gA/5gAAMsAMssAZcsAmMsAy8sA/8sAAP8AMv8AZf8AmP8Ay/8A//8yAAAyMgAyZQAymAAyywAy/wAyADIyMjIyZTIymDIyyzIy/zIyAGUyMmUyZWUymGUyy2Uy/2UyAJgyMpgyZZgymJgyy5gy/5gyAMsyMssyZcsymMsyy8sy/8syAP8yMv8yZf8ymP8yy/8y//9lAABlMgBlZQBlmABlywBl/wBlADJlMjJlZTJlmDJlyzJl/zJlAGVlMmVlZWVlmGVly2Vl/2VlAJhlMphlZZhlmJhly5hl/5hlAMtlMstlZctlmMtly8tl/8tlAP9lMv9lZf9lmP9ly/9l//+YAACYMgCYZQCYmACYywCY/wCYADKYMjKYZTKYmDKYyzKY/zKYAGWYMmWYZWWYmGWYy2WY/2WYAJiYMpiYZZiYmJiYy5iY/5iYAMuYMsuYZcuYmMuYy8uY/8uYAP+YMv+YZf+YmP+Yy/+Y///LAADLMgDLZQDLmADLywDL/wDLADLLMjLLZTLLmDLLyzLL/zLLAGXLMmXLZWXLmGXLy2XL/2XLAJjLMpjLZZjLmJjLy5jL/5jLAMvLMsvLZcvLmMvLy8vL/8vLAP/LMv/LZf/LmP/Ly//L////AAD/MgD/ZQD/mAD/ywD//wD/ADL/MjL/ZTL/mDL/yzL//zL/AGX/MmX/ZWX/mGX/y2X//2X/AJj/Mpj/ZZj/mJj/y5j//5j/AMv/Msv/Zcv/mMv/y8v//8sAAAD/Mv//Zf//mP//y//////eTOgfAAABAHRSTlP///////////8A////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AP//////OE00OwAAAF5JREFUeF6V0LEOgDAIBNB2dmmiSRPhq/ncTlbRSuEGvfGFELjUGkpqn3mviGktgLty5EsD03aqZ531zFnV8aMz50LgnTE7sdGbpd9gdXB991rmhV2DogHFCu77H4cc4R6SttzoBIUAAAAASUVORK5CYII=' readStream)) offset: -5@ -17; yourself]! Item was added: + ----- Method: PaintBoxMorph class>>lineIconImage (in category 'resources') ----- + lineIconImage + ^self imageLibrary at: #lineIcon ifAbsentPut: [Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: + 'iVBORw0KGgoAAAANSUhEUgAAABYAAAAVCAMAAAB1/u6nAAADAFBMVEX///8AAAD///9/f3//AAAA/wAAAP8A/////wAAAAAfHx8/Pz9fX1+enp6+vr7e3t4HBwcPDw8XFxcnJycvLy83NzdHR0dPT09XV1dnZ2dvb293d3eGhoaOjo6Wlpampqaurq62trbGxsbOzs7W1tbm5ubu7u729vYAAAAAMgAAZQAAmAAAywAA/wAAADIAMjIAZTIAmDIAyzIA/zIAAGUAMmUAZWUAmGUAy2UA/2UAAJgAMpgAZZgAmJgAy5gA/5gAAMsAMssAZcsAmMsAy8sA/8sAAP8AMv8AZf8AmP8Ay/8A//8yAAAyMgAyZQAymAAyywAy/wAyADIyMjIyZTIymDIyyzIy/zIyAGUyMmUyZWUymGUyy2Uy/2UyAJgyMpgyZZgymJgyy5gy/5gyAMsyMssyZcsymMsyy8sy/8syAP8yMv8yZf8ymP8yy/8y//9lAABlMgBlZQBlmABlywBl/wBlADJlMjJlZTJlmDJlyzJl/zJlAGVlMmVlZWVlmGVly2Vl/2VlAJhlMphlZZhlmJhly5hl/5hlAMtlMstlZctlmMtly8tl/8tlAP9lMv9lZf9lmP9ly/9l//+YAACYMgCYZQCYmACYywCY/wCYADKYMjKYZTKYmDKYyzKY/zKYAGWYMmWYZWWYmGWYy2WY/2WYAJiYMpiYZZiYmJiYy5iY/5iYAMuYMsuYZcuYmMuYy8uY/8uYAP+YMv+YZf+YmP+Yy/+Y///LAADLMgDLZQDLmADLywDL/wDLADLLMjLLZTLLmDLLyzLL/zLLAGXLMmXLZWXLmGXLy2XL/2XLAJjLMpjLZZjLmJjLy5jL/5jLAMvLMsvLZcvLmMvLy8vL/8vLAP/LMv/LZf/LmP/Ly//L////AAD/MgD/ZQD/mAD/ywD//wD/ADL/MjL/ZTL/mDL/yzL//zL/AGX/MmX/ZWX/mGX/y2X//2X/AJj/Mpj/ZZj/mJj/y5j//5j/AMv/Msv/Zcv/mMv/y8v//8sAAAD/Mv//Zf//mP//y//////eTOgfAAABAHRSTlP///////////8A////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AP//////OE00OwAAAF5JREFUeF6V0LEOgDAIBNB2dmmiSRPhq/ncTlbRSuEGvfGFELjUGkpqn3mviGktgLty5EsD03aqZ531zFnV8aMz50LgnTE7sdGbpd9gdXB991rmhV2DogHFCu77H4cc4R6SttzoBIUAAAAASUVORK5CYII=' readStream)]! Item was changed: ----- Method: PaintBoxMorph class>>new (in category 'instance creation') ----- new | pb | + pb := self prototype veryDeepCopy. - pb := Prototype veryDeepCopy. "Assume that the PaintBox does not contain any scripted Players!!" pb stampHolder normalize. "Get the stamps to show" "Get my own copies of the brushes so I can modify them" #(brush1: brush2: brush3: brush4: brush5: brush6:) do: [:sel | | dualUse formCanvas rect button | button := pb submorphNamed: sel. button offImage: button offImage deepCopy. dualUse := button onImage == button pressedImage. "sometimes shared" button onImage: button onImage deepCopy. dualUse ifTrue: [button pressedImage: button onImage] ifFalse: [button pressedImage: button pressedImage deepCopy]. "force color maps for later mapping" button offImage. button onImage. button pressedImage. formCanvas := button onImage getCanvas. formCanvas := formCanvas copyOrigin: 0@0 clipRect: (rect := 0@0 extent: button onImage extent). (#(brush1: brush3:) includes: sel) ifTrue: [ rect := rect origin corner: rect corner - (2@2)]. (#brush2: == sel) ifTrue: [ rect := rect origin corner: rect corner - (2@4)]. formCanvas frameAndFillRectangle: rect fillColor: Color transparent borderWidth: 2 borderColor: (Color r: 0.599 g: 0.8 b: 1.0). ]. pb showColor. pb fixUpRecentColors. pb addLabels. ^ pb! Item was added: + ----- Method: PaintBoxMorph class>>paintIcon (in category 'resources') ----- + paintIcon + ^self imageLibrary at: #paintIcon ifAbsentPut: [(Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: + 'iVBORw0KGgoAAAANSUhEUgAAACwAAAAnCAMAAABDnVrwAAADAFBMVEX///8AAAD///9/f3//AAAA/wAAAP8A/////wAAAAAfHx8/Pz9fX1+enp6+vr7e3t4HBwcPDw8XFxcnJycvLy83NzdHR0dPT09XV1dnZ2dvb293d3eGhoaOjo6Wlpampqaurq62trbGxsbOzs7W1tbm5ubu7u729vYAAAAAMgAAZQAAmAAAywAA/wAAADIAMjIAZTIAmDIAyzIA/zIAAGUAMmUAZWUAmGUAy2UA/2UAAJgAMpgAZZgAmJgAy5gA/5gAAMsAMssAZcsAmMsAy8sA/8sAAP8AMv8AZf8AmP8Ay/8A//8yAAAyMgAyZQAymAAyywAy/wAyADIyMjIyZTIymDIyyzIy/zIyAGUyMmUyZWUymGUyy2Uy/2UyAJgyMpgyZZgymJgyy5gy/5gyAMsyMssyZcsymMsyy8sy/8syAP8yMv8yZf8ymP8yy/8y//9lAABlMgBlZQBlmABlywBl/wBlADJlMjJlZTJlmDJlyzJl/zJlAGVlMmVlZWVlmGVly2Vl/2VlAJhlMphlZZhlmJhly5hl/5hlAMtlMstlZctlmMtly8tl/8tlAP9lMv9lZf9lmP9ly/9l//+YAACYMgCYZQCYmACYywCY/wCYADKYMjKYZTKYmDKYyzKY/zKYAGWYMmWYZWWYmGWYy2WY/2WYAJiYMpiYZZiYmJiYy5iY/5iYAMuYMsuYZcuYmMuYy8uY/8uYAP+YMv+YZf+YmP+Yy/+Y///LAADLMgDLZQDLmADLywDL/wDLADLLMjLLZTLLmDLLyzLL/zLLAGXLMmXLZWXLmGXLy2XL/2XLAJjLMpjLZZjLmJjLy5jL/5jLAMvLMsvLZcvLmMvLy8vL/8vLAP/LMv/LZf/LmP/Ly//L////AAD/MgD/ZQD/mAD/ywD//wD/ADL/MjL/ZTL/mDL/yzL//zL/AGX/MmX/ZWX/mGX/y2X//2X/AJj/Mpj/ZZj/mJj/y5j//5j/AMv/Msv/Zcv/mMv/y8v//8sAAAD/Mv//Zf//mP//y//////eTOgfAAABAHRSTlP///////////8A////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AP//////OE00OwAAATNJREFUeF7d1KFywzAMBuCN9griLLnF7Rxs5DcJcZDZYKmRQ8pSVBZsFFS2ZwgK6mMUJU9QNMXLunV3sTwwMuHvdDrZ+h8er+H1f7EpaTA2WhcmEFfaWl2UQXiyXWeKKgC3YG03jDYAb7WBvv04Xs44Bmu7EWyPz1xN9vJhMWy+WwS7RdysH7duaTBwH/Dczg7QOMex/hz4jH8kZ4fbwF5czQMPPf5Ft7P96ruMmXvle7uEaVTcLc2H11FEyp99F/AKLOGge/wGnY1jzlvsYPPNc+osIQly3XmmklSCJYI85X68kUpJKMEJT5g/N/I4AalUTWW8ZkjIpEKArU9vJ8X8idRcM07EbCkSXw3jHKza13uZYVl3EICnMaR68Qdj0+wOx+NrpqA3DUjR5jeR+3c4oN4B/GzJ0c+GFaAAAAAASUVORK5CYII=' readStream)) offset: 0@0; yourself]! Item was added: + ----- Method: PaintBoxMorph class>>paintIconImage (in category 'resources') ----- + paintIconImage + ^self imageLibrary at: #paintIcon ifAbsentPut: [Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: + 'iVBORw0KGgoAAAANSUhEUgAAACwAAAAnCAMAAABDnVrwAAADAFBMVEX///8AAAD///9/f3//AAAA/wAAAP8A/////wAAAAAfHx8/Pz9fX1+enp6+vr7e3t4HBwcPDw8XFxcnJycvLy83NzdHR0dPT09XV1dnZ2dvb293d3eGhoaOjo6Wlpampqaurq62trbGxsbOzs7W1tbm5ubu7u729vYAAAAAMgAAZQAAmAAAywAA/wAAADIAMjIAZTIAmDIAyzIA/zIAAGUAMmUAZWUAmGUAy2UA/2UAAJgAMpgAZZgAmJgAy5gA/5gAAMsAMssAZcsAmMsAy8sA/8sAAP8AMv8AZf8AmP8Ay/8A//8yAAAyMgAyZQAymAAyywAy/wAyADIyMjIyZTIymDIyyzIy/zIyAGUyMmUyZWUymGUyy2Uy/2UyAJgyMpgyZZgymJgyy5gy/5gyAMsyMssyZcsymMsyy8sy/8syAP8yMv8yZf8ymP8yy/8y//9lAABlMgBlZQBlmABlywBl/wBlADJlMjJlZTJlmDJlyzJl/zJlAGVlMmVlZWVlmGVly2Vl/2VlAJhlMphlZZhlmJhly5hl/5hlAMtlMstlZctlmMtly8tl/8tlAP9lMv9lZf9lmP9ly/9l//+YAACYMgCYZQCYmACYywCY/wCYADKYMjKYZTKYmDKYyzKY/zKYAGWYMmWYZWWYmGWYy2WY/2WYAJiYMpiYZZiYmJiYy5iY/5iYAMuYMsuYZcuYmMuYy8uY/8uYAP+YMv+YZf+YmP+Yy/+Y///LAADLMgDLZQDLmADLywDL/wDLADLLMjLLZTLLmDLLyzLL/zLLAGXLMmXLZWXLmGXLy2XL/2XLAJjLMpjLZZjLmJjLy5jL/5jLAMvLMsvLZcvLmMvLy8vL/8vLAP/LMv/LZf/LmP/Ly//L////AAD/MgD/ZQD/mAD/ywD//wD/ADL/MjL/ZTL/mDL/yzL//zL/AGX/MmX/ZWX/mGX/y2X//2X/AJj/Mpj/ZZj/mJj/y5j//5j/AMv/Msv/Zcv/mMv/y8v//8sAAAD/Mv//Zf//mP//y//////eTOgfAAABAHRSTlP///////////8A////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AP//////OE00OwAAATNJREFUeF7d1KFywzAMBuCN9griLLnF7Rxs5DcJcZDZYKmRQ8pSVBZsFFS2ZwgK6mMUJU9QNMXLunV3sTwwMuHvdDrZ+h8er+H1f7EpaTA2WhcmEFfaWl2UQXiyXWeKKgC3YG03jDYAb7WBvv04Xs44Bmu7EWyPz1xN9vJhMWy+WwS7RdysH7duaTBwH/Dczg7QOMex/hz4jH8kZ4fbwF5czQMPPf5Ft7P96ruMmXvle7uEaVTcLc2H11FEyp99F/AKLOGge/wGnY1jzlvsYPPNc+osIQly3XmmklSCJYI85X68kUpJKMEJT5g/N/I4AalUTWW8ZkjIpEKArU9vJ8X8idRcM07EbCkSXw3jHKza13uZYVl3EICnMaR68Qdj0+wOx+NrpqA3DUjR5jeR+3c4oN4B/GzJ0c+GFaAAAAAASUVORK5CYII=' readStream)]! Item was added: + ----- Method: PaintBoxMorph class>>polygonIcon (in category 'resources') ----- + polygonIcon + ^self imageLibrary at: #polygonIcon ifAbsentPut: [(Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: + 'iVBORw0KGgoAAAANSUhEUgAAABsAAAAVCAMAAACAAGUXAAADAFBMVEX///8AAAD///9/f3//AAAA/wAAAP8A/////wAAAAAfHx8/Pz9fX1+enp6+vr7e3t4HBwcPDw8XFxcnJycvLy83NzdHR0dPT09XV1dnZ2dvb293d3eGhoaOjo6Wlpampqaurq62trbGxsbOzs7W1tbm5ubu7u729vYAAAAAMgAAZQAAmAAAywAA/wAAADIAMjIAZTIAmDIAyzIA/zIAAGUAMmUAZWUAmGUAy2UA/2UAAJgAMpgAZZgAmJgAy5gA/5gAAMsAMssAZcsAmMsAy8sA/8sAAP8AMv8AZf8AmP8Ay/8A//8yAAAyMgAyZQAymAAyywAy/wAyADIyMjIyZTIymDIyyzIy/zIyAGUyMmUyZWUymGUyy2Uy/2UyAJgyMpgyZZgymJgyy5gy/5gyAMsyMssyZcsymMsyy8sy/8syAP8yMv8yZf8ymP8yy/8y//9lAABlMgBlZQBlmABlywBl/wBlADJlMjJlZTJlmDJlyzJl/zJlAGVlMmVlZWVlmGVly2Vl/2VlAJhlMphlZZhlmJhly5hl/5hlAMtlMstlZctlmMtly8tl/8tlAP9lMv9lZf9lmP9ly/9l//+YAACYMgCYZQCYmACYywCY/wCYADKYMjKYZTKYmDKYyzKY/zKYAGWYMmWYZWWYmGWYy2WY/2WYAJiYMpiYZZiYmJiYy5iY/5iYAMuYMsuYZcuYmMuYy8uY/8uYAP+YMv+YZf+YmP+Yy/+Y///LAADLMgDLZQDLmADLywDL/wDLADLLMjLLZTLLmDLLyzLL/zLLAGXLMmXLZWXLmGXLy2XL/2XLAJjLMpjLZZjLmJjLy5jL/5jLAMvLMsvLZcvLmMvLy8vL/8vLAP/LMv/LZf/LmP/Ly//L////AAD/MgD/ZQD/mAD/ywD//wD/ADL/MjL/ZTL/mDL/yzL//zL/AGX/MmX/ZWX/mGX/y2X//2X/AJj/Mpj/ZZj/mJj/y5j//5j/AMv/Msv/Zcv/mMv/y8v//8sAAAD/Mv//Zf//mP//y//////eTOgfAAABAHRSTlP///////////8A////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AP//////OE00OwAAAI9JREFUeF6dkU0OhCAMhWXrOAmo0IxM5lIeQs/jcbvyp7appOPCBwuSj34vgQpxz4JGKnzOFsq/ufkNsad0sWATeCf5FqxOfBvc68qGIAxdKJgHYT1LT5YVa1hqOEXKc5qx1OgTqdEnUqsPR5LyXKvZh6Q8V8c8ZAlJpW97Rx8o7XZW7JfgWLQBkmJ48+9mVvybrBthz+e6AAAAAElFTkSuQmCC' readStream)) offset: -5@ -4; yourself]! Item was added: + ----- Method: PaintBoxMorph class>>polygonIconImage (in category 'resources') ----- + polygonIconImage + ^self imageLibrary at: #polygonIcon ifAbsentPut: [Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: + 'iVBORw0KGgoAAAANSUhEUgAAABsAAAAVCAMAAACAAGUXAAADAFBMVEX///8AAAD///9/f3//AAAA/wAAAP8A/////wAAAAAfHx8/Pz9fX1+enp6+vr7e3t4HBwcPDw8XFxcnJycvLy83NzdHR0dPT09XV1dnZ2dvb293d3eGhoaOjo6Wlpampqaurq62trbGxsbOzs7W1tbm5ubu7u729vYAAAAAMgAAZQAAmAAAywAA/wAAADIAMjIAZTIAmDIAyzIA/zIAAGUAMmUAZWUAmGUAy2UA/2UAAJgAMpgAZZgAmJgAy5gA/5gAAMsAMssAZcsAmMsAy8sA/8sAAP8AMv8AZf8AmP8Ay/8A//8yAAAyMgAyZQAymAAyywAy/wAyADIyMjIyZTIymDIyyzIy/zIyAGUyMmUyZWUymGUyy2Uy/2UyAJgyMpgyZZgymJgyy5gy/5gyAMsyMssyZcsymMsyy8sy/8syAP8yMv8yZf8ymP8yy/8y//9lAABlMgBlZQBlmABlywBl/wBlADJlMjJlZTJlmDJlyzJl/zJlAGVlMmVlZWVlmGVly2Vl/2VlAJhlMphlZZhlmJhly5hl/5hlAMtlMstlZctlmMtly8tl/8tlAP9lMv9lZf9lmP9ly/9l//+YAACYMgCYZQCYmACYywCY/wCYADKYMjKYZTKYmDKYyzKY/zKYAGWYMmWYZWWYmGWYy2WY/2WYAJiYMpiYZZiYmJiYy5iY/5iYAMuYMsuYZcuYmMuYy8uY/8uYAP+YMv+YZf+YmP+Yy/+Y///LAADLMgDLZQDLmADLywDL/wDLADLLMjLLZTLLmDLLyzLL/zLLAGXLMmXLZWXLmGXLy2XL/2XLAJjLMpjLZZjLmJjLy5jL/5jLAMvLMsvLZcvLmMvLy8vL/8vLAP/LMv/LZf/LmP/Ly//L////AAD/MgD/ZQD/mAD/ywD//wD/ADL/MjL/ZTL/mDL/yzL//zL/AGX/MmX/ZWX/mGX/y2X//2X/AJj/Mpj/ZZj/mJj/y5j//5j/AMv/Msv/Zcv/mMv/y8v//8sAAAD/Mv//Zf//mP//y//////eTOgfAAABAHRSTlP///////////8A////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AP//////OE00OwAAAI9JREFUeF6dkU0OhCAMhWXrOAmo0IxM5lIeQs/jcbvyp7appOPCBwuSj34vgQpxz4JGKnzOFsq/ufkNsad0sWATeCf5FqxOfBvc68qGIAxdKJgHYT1LT5YVa1hqOEXKc5qx1OgTqdEnUqsPR5LyXKvZh6Q8V8c8ZAlJpW97Rx8o7XZW7JfgWLQBkmJ48+9mVvybrBthz+e6AAAAAElFTkSuQmCC' readStream)]! Item was changed: + ----- Method: PaintBoxMorph class>>prototype (in category 'instance creation') ----- - ----- Method: PaintBoxMorph class>>prototype (in category 'resources') ----- prototype "Later we will be a subclass of Model, and it will have a general version of this" ^ Prototype ifNil: [Prototype := self newPrototype]! Item was added: + ----- Method: PaintBoxMorph class>>rectIcon (in category 'resources') ----- + rectIcon + ^self imageLibrary at: #rectIcon ifAbsentPut: [(Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: + 'iVBORw0KGgoAAAANSUhEUgAAABUAAAAUCAMAAABVlYYBAAADAFBMVEX///8AAAD///9/f3//AAAA/wAAAP8A/////wAAAAAfHx8/Pz9fX1+enp6+vr7e3t4HBwcPDw8XFxcnJycvLy83NzdHR0dPT09XV1dnZ2dvb293d3eGhoaOjo6Wlpampqaurq62trbGxsbOzs7W1tbm5ubu7u729vYAAAAAMgAAZQAAmAAAywAA/wAAADIAMjIAZTIAmDIAyzIA/zIAAGUAMmUAZWUAmGUAy2UA/2UAAJgAMpgAZZgAmJgAy5gA/5gAAMsAMssAZcsAmMsAy8sA/8sAAP8AMv8AZf8AmP8Ay/8A//8yAAAyMgAyZQAymAAyywAy/wAyADIyMjIyZTIymDIyyzIy/zIyAGUyMmUyZWUymGUyy2Uy/2UyAJgyMpgyZZgymJgyy5gy/5gyAMsyMssyZcsymMsyy8sy/8syAP8yMv8yZf8ymP8yy/8y//9lAABlMgBlZQBlmABlywBl/wBlADJlMjJlZTJlmDJlyzJl/zJlAGVlMmVlZWVlmGVly2Vl/2VlAJhlMphlZZhlmJhly5hl/5hlAMtlMstlZctlmMtly8tl/8tlAP9lMv9lZf9lmP9ly/9l//+YAACYMgCYZQCYmACYywCY/wCYADKYMjKYZTKYmDKYyzKY/zKYAGWYMmWYZWWYmGWYy2WY/2WYAJiYMpiYZZiYmJiYy5iY/5iYAMuYMsuYZcuYmMuYy8uY/8uYAP+YMv+YZf+YmP+Yy/+Y///LAADLMgDLZQDLmADLywDL/wDLADLLMjLLZTLLmDLLyzLL/zLLAGXLMmXLZWXLmGXLy2XL/2XLAJjLMpjLZZjLmJjLy5jL/5jLAMvLMsvLZcvLmMvLy8vL/8vLAP/LMv/LZf/LmP/Ly//L////AAD/MgD/ZQD/mAD/ywD//wD/ADL/MjL/ZTL/mDL/yzL//zL/AGX/MmX/ZWX/mGX/y2X//2X/AJj/Mpj/ZZj/mJj/y5j//5j/AMv/Msv/Zcv/mMv/y8v//8sAAAD/Mv//Zf//mP//y//////eTOgfAAABAHRSTlP///////////8A////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AP//////OE00OwAAAG5JREFUeF6VkNEKgCAMRfV1L7mMRhZ9tJ+7p+ZyZCCIRxhyuNyH65gL99mQTqeSlwMwoLLG4KslpL08PWgWIn9Eswg9G8bZbZCNE9lub7+hm80IKdk4F5j1gq0j32pJVtFtdB4Sm1+aYq5Z/jNjH9oIHun4V1LxAAAAAElFTkSuQmCC' readStream)) offset: -6@ -17; yourself]! Item was added: + ----- Method: PaintBoxMorph class>>rectIconImage (in category 'resources') ----- + rectIconImage + ^self imageLibrary at: #rectIcon ifAbsentPut: [Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: + 'iVBORw0KGgoAAAANSUhEUgAAABUAAAAUCAMAAABVlYYBAAADAFBMVEX///8AAAD///9/f3//AAAA/wAAAP8A/////wAAAAAfHx8/Pz9fX1+enp6+vr7e3t4HBwcPDw8XFxcnJycvLy83NzdHR0dPT09XV1dnZ2dvb293d3eGhoaOjo6Wlpampqaurq62trbGxsbOzs7W1tbm5ubu7u729vYAAAAAMgAAZQAAmAAAywAA/wAAADIAMjIAZTIAmDIAyzIA/zIAAGUAMmUAZWUAmGUAy2UA/2UAAJgAMpgAZZgAmJgAy5gA/5gAAMsAMssAZcsAmMsAy8sA/8sAAP8AMv8AZf8AmP8Ay/8A//8yAAAyMgAyZQAymAAyywAy/wAyADIyMjIyZTIymDIyyzIy/zIyAGUyMmUyZWUymGUyy2Uy/2UyAJgyMpgyZZgymJgyy5gy/5gyAMsyMssyZcsymMsyy8sy/8syAP8yMv8yZf8ymP8yy/8y//9lAABlMgBlZQBlmABlywBl/wBlADJlMjJlZTJlmDJlyzJl/zJlAGVlMmVlZWVlmGVly2Vl/2VlAJhlMphlZZhlmJhly5hl/5hlAMtlMstlZctlmMtly8tl/8tlAP9lMv9lZf9lmP9ly/9l//+YAACYMgCYZQCYmACYywCY/wCYADKYMjKYZTKYmDKYyzKY/zKYAGWYMmWYZWWYmGWYy2WY/2WYAJiYMpiYZZiYmJiYy5iY/5iYAMuYMsuYZcuYmMuYy8uY/8uYAP+YMv+YZf+YmP+Yy/+Y///LAADLMgDLZQDLmADLywDL/wDLADLLMjLLZTLLmDLLyzLL/zLLAGXLMmXLZWXLmGXLy2XL/2XLAJjLMpjLZZjLmJjLy5jL/5jLAMvLMsvLZcvLmMvLy8vL/8vLAP/LMv/LZf/LmP/Ly//L////AAD/MgD/ZQD/mAD/ywD//wD/ADL/MjL/ZTL/mDL/yzL//zL/AGX/MmX/ZWX/mGX/y2X//2X/AJj/Mpj/ZZj/mJj/y5j//5j/AMv/Msv/Zcv/mMv/y8v//8sAAAD/Mv//Zf//mP//y//////eTOgfAAABAHRSTlP///////////8A////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AP//////OE00OwAAAG5JREFUeF6VkNEKgCAMRfV1L7mMRhZ9tJ+7p+ZyZCCIRxhyuNyH65gL99mQTqeSlwMwoLLG4KslpL08PWgWIn9Eswg9G8bZbZCNE9lub7+hm80IKdk4F5j1gq0j32pJVtFtdB4Sm1+aYq5Z/jNjH9oIHun4V1LxAAAAAElFTkSuQmCC' readStream)]! Item was added: + ----- Method: PaintBoxMorph class>>starIcon (in category 'resources') ----- + starIcon + ^self imageLibrary at: #starIcon ifAbsentPut: [(Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: + 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAUCAMAAACgaw2xAAADAFBMVEX///8AAAD///9/f3//AAAA/wAAAP8A/////wAAAAAfHx8/Pz9fX1+enp6+vr7e3t4HBwcPDw8XFxcnJycvLy83NzdHR0dPT09XV1dnZ2dvb293d3eGhoaOjo6Wlpampqaurq62trbGxsbOzs7W1tbm5ubu7u729vYAAAAAMgAAZQAAmAAAywAA/wAAADIAMjIAZTIAmDIAyzIA/zIAAGUAMmUAZWUAmGUAy2UA/2UAAJgAMpgAZZgAmJgAy5gA/5gAAMsAMssAZcsAmMsAy8sA/8sAAP8AMv8AZf8AmP8Ay/8A//8yAAAyMgAyZQAymAAyywAy/wAyADIyMjIyZTIymDIyyzIy/zIyAGUyMmUyZWUymGUyy2Uy/2UyAJgyMpgyZZgymJgyy5gy/5gyAMsyMssyZcsymMsyy8sy/8syAP8yMv8yZf8ymP8yy/8y//9lAABlMgBlZQBlmABlywBl/wBlADJlMjJlZTJlmDJlyzJl/zJlAGVlMmVlZWVlmGVly2Vl/2VlAJhlMphlZZhlmJhly5hl/5hlAMtlMstlZctlmMtly8tl/8tlAP9lMv9lZf9lmP9ly/9l//+YAACYMgCYZQCYmACYywCY/wCYADKYMjKYZTKYmDKYyzKY/zKYAGWYMmWYZWWYmGWYy2WY/2WYAJiYMpiYZZiYmJiYy5iY/5iYAMuYMsuYZcuYmMuYy8uY/8uYAP+YMv+YZf+YmP+Yy/+Y///LAADLMgDLZQDLmADLywDL/wDLADLLMjLLZTLLmDLLyzLL/zLLAGXLMmXLZWXLmGXLy2XL/2XLAJjLMpjLZZjLmJjLy5jL/5jLAMvLMsvLZcvLmMvLy8vL/8vLAP/LMv/LZf/LmP/Ly//L////AAD/MgD/ZQD/mAD/ywD//wD/ADL/MjL/ZTL/mDL/yzL//zL/AGX/MmX/ZWX/mGX/y2X//2X/AJj/Mpj/ZZj/mJj/y5j//5j/AMv/Msv/Zcv/mMv/y8v//8sAAAD/Mv//Zf//mP//y//////eTOgfAAABAHRSTlP///////////8A////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AP//////OE00OwAAAKlJREFUeF51kTsSwyAMRNkWU8gQrOEzuV5yHh+XKsIEE2aIqkVPQlpQpaxDTSc3g7MfGHEJIsEtAdiNFnW2EGmpxNFydaQU2QMs00Fu45AaeJWyA/YhMjlRBDTw1kR5LBoA331Y2Dufj5rvBv1NMtdZw7nH1kSCmZ4k4OgVzwkYhCaOr0d1P1NOrGmTCi7zDA1UE+7aaQBISu4wFU2A9u8MQ3rxUX9/8Cc+919bKkV5meQAAAAASUVORK5CYII=' readStream)) offset: -2@ -5; yourself]! Item was added: + ----- Method: PaintBoxMorph class>>starIconImage (in category 'resources') ----- + starIconImage + ^self imageLibrary at: #starIcon ifAbsentPut: [Form fromBinaryStream: (Base64MimeConverter mimeDecodeToBytes: + 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAUCAMAAACgaw2xAAADAFBMVEX///8AAAD///9/f3//AAAA/wAAAP8A/////wAAAAAfHx8/Pz9fX1+enp6+vr7e3t4HBwcPDw8XFxcnJycvLy83NzdHR0dPT09XV1dnZ2dvb293d3eGhoaOjo6Wlpampqaurq62trbGxsbOzs7W1tbm5ubu7u729vYAAAAAMgAAZQAAmAAAywAA/wAAADIAMjIAZTIAmDIAyzIA/zIAAGUAMmUAZWUAmGUAy2UA/2UAAJgAMpgAZZgAmJgAy5gA/5gAAMsAMssAZcsAmMsAy8sA/8sAAP8AMv8AZf8AmP8Ay/8A//8yAAAyMgAyZQAymAAyywAy/wAyADIyMjIyZTIymDIyyzIy/zIyAGUyMmUyZWUymGUyy2Uy/2UyAJgyMpgyZZgymJgyy5gy/5gyAMsyMssyZcsymMsyy8sy/8syAP8yMv8yZf8ymP8yy/8y//9lAABlMgBlZQBlmABlywBl/wBlADJlMjJlZTJlmDJlyzJl/zJlAGVlMmVlZWVlmGVly2Vl/2VlAJhlMphlZZhlmJhly5hl/5hlAMtlMstlZctlmMtly8tl/8tlAP9lMv9lZf9lmP9ly/9l//+YAACYMgCYZQCYmACYywCY/wCYADKYMjKYZTKYmDKYyzKY/zKYAGWYMmWYZWWYmGWYy2WY/2WYAJiYMpiYZZiYmJiYy5iY/5iYAMuYMsuYZcuYmMuYy8uY/8uYAP+YMv+YZf+YmP+Yy/+Y///LAADLMgDLZQDLmADLywDL/wDLADLLMjLLZTLLmDLLyzLL/zLLAGXLMmXLZWXLmGXLy2XL/2XLAJjLMpjLZZjLmJjLy5jL/5jLAMvLMsvLZcvLmMvLy8vL/8vLAP/LMv/LZf/LmP/Ly//L////AAD/MgD/ZQD/mAD/ywD//wD/ADL/MjL/ZTL/mDL/yzL//zL/AGX/MmX/ZWX/mGX/y2X//2X/AJj/Mpj/ZZj/mJj/y5j//5j/AMv/Msv/Zcv/mMv/y8v//8sAAAD/Mv//Zf//mP//y//////eTOgfAAABAHRSTlP///////////8A////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AP//////OE00OwAAAKlJREFUeF51kTsSwyAMRNkWU8gQrOEzuV5yHh+XKsIEE2aIqkVPQlpQpaxDTSc3g7MfGHEJIsEtAdiNFnW2EGmpxNFydaQU2QMs00Fu45AaeJWyA/YhMjlRBDTw1kR5LBoA331Y2Dufj5rvBv1NMtdZw7nH1kSCmZ4k4OgVzwkYhCaOr0d1P1NOrGmTCi7zDA1UE+7aaQBISu4wFU2A9u8MQ3rxUX9/8Cc+919bKkV5meQAAAAASUVORK5CYII=' readStream)]! Item was changed: ----- Method: PaintBoxMorph>>addShapeButtonsOffImage:onImage: (in category 'initialization') ----- addShapeButtonsOffImage: offImage onImage: onImage + | shapes posSpec iconSpec | - | shapes posSpec | posSpec := #( (17 17 17 17 17) "offset X" (0 22 44 66 88) "offset Y" (30 30 30 30 30) "width" (21 21 21 21 21) "height"). shapes := self submorphNamed: 'shapes'. + iconSpec := #(lineIcon rectIcon ellipseIcon polygonIcon starIcon). + #(line: rect: ellipse: polygon: star:) keysAndValuesDo: [:index :name | - #(line: rect: ellipse: poylgon: star:) keysAndValuesDo: [:index :name | | button rect | (self submorphNamed: name) ifNil: [rect := ((posSpec at: 1) at: index) @ ((posSpec at: 2) at: index) extent: ((posSpec at: 3) at: index) @ ((posSpec at: 4) at: index). (button := ThreePhaseButtonMorph new) onImage: (onImage copy: rect); offImage: (offImage copy: rect); pressedImage: (onImage copy: rect); bounds: (rect translateBy: shapes position); setNamePropertyTo: name; actionSelector: #tool:action:cursor:evt:; + arguments: (Array with: button with: name with: (self class perform: (iconSpec at: index))); - arguments: (Array with: button with: name with: (self makeCursorFrom: (offImage copy: rect))); actWhen: #buttonUp; target: self. shapes addMorph: button.]].! Item was changed: ----- Method: PaintBoxMorph>>addToolsOffImage:onImage: (in category 'initialization') ----- addToolsOffImage: offImage onImage: onImage + | posSpec actionSpec iconSpec | - | posSpec actionSpec | posSpec := #( (13 53 13 53) "offset X" (13 13 61 61) "offset Y" (40 40 40 40) "width" (48 48 44 44) "height"). actionSpec := #(tool:action:cursor:evt: tool:action:cursor:evt: eyedropper:action:cursor:evt: tool:action:cursor:evt:). + iconSpec := #(paintIcon fillIcon eyedropperIcon eraseIcon). #(paint: fill: eyedropper: erase:) keysAndValuesDo: [:index :name | | button rect | (self submorphNamed: name) ifNil: [rect := ((posSpec at: 1) at: index) @ ((posSpec at: 2) at: index) extent: ((posSpec at: 3) at: index) @ ((posSpec at: 4) at: index). (button := ThreePhaseButtonMorph new) onImage: (onImage copy: rect); offImage: (offImage copy: rect); pressedImage: (onImage copy: rect); bounds: (rect translateBy: self position); setNamePropertyTo: name; actionSelector: (actionSpec at: index); + arguments: (Array with: button with: name with: (self class perform: (iconSpec at: index))); - arguments: (Array with: button with: name with: (self makeCursorFrom: (offImage copy: rect))); actWhen: #buttonUp; target: self. self addMorph: button.]]. ! Item was removed: - ----- Method: PaintBoxMorph>>createButtons (in category 'initialization') ----- - createButtons - "Create buttons one at a time and let the user place them over the background. Later can move them again by turning on AuthorModeOwner in ThreePhaseButtonMorph. - self createButtons. " - - #(erase: eyedropper: fill: paint: rect: ellipse: polygon: line: star: pickup: "pickup: pickup: pickup:" stamp: "stamp: stamp: stamp:" undo: keep: toss: prevStamp: nextStamp:) do: [:sel | - | rect button | - (self submorphNamed: sel) ifNil: - [self inform: 'Rectangle for ',sel. - rect := Rectangle fromUser. - button := ThreePhaseButtonMorph new. - button onImage: nil; bounds: rect. - self addMorph: button. - button actionSelector: #tool:action:cursor:evt:; arguments: (Array with: button with: sel with: nil). - button actWhen: #buttonUp; target: self]]. - #(brush1: brush2: brush3: brush4: brush5: brush6: ) doWithIndex: [:sel :ind | - | rect button nib | - (self submorphNamed: sel) ifNil: - [self inform: 'Rectangle for ',sel. - rect := Rectangle fromUser. - button := ThreePhaseButtonMorph new. - button onImage: nil; bounds: rect. - self addMorph: button. - nib := Form dotOfSize: (#(1 2 3 6 11 26) at: ind). - button actionSelector: #brush:action:nib:evt:; - arguments: (Array with: button with: sel with: nib). - button actWhen: #buttonUp; target: self]]. - "stamp: Stamps are held in a ScrollingToolHolder. Pickups and stamps and brushes are id-ed by the button == with item from a list." - - - ! Item was changed: ----- Method: PaintBoxMorph>>fixupButtons (in category 'initialization') ----- fixupButtons + self flag: #toRemove! - | changes answer | - changes := Dictionary new. - changes - at: #brush:action:nib: put: #brush:action:nib:evt:; - at: #tool:action:cursor: put: #tool:action:cursor:evt:; - at: #pickup:action:cursor: put: #pickup:action:cursor:evt:; - at: #keep:with: put: #keep:with:evt:; - at: #undo:with: put: #undo:with:evt:; - at: #scrollStamps:action: put: #scrollStamps:action:evt:; - at: #toss:with: put: #toss:with:evt:; - at: #eyedropper:action:cursor: put: #eyedropper:action:cursor:evt:; - at: #clear:with: put: #clear:with:evt:. - answer := WriteStream on: String new. - self allMorphsDo: - [:each | | newSelector | - (each isKindOf: ThreePhaseButtonMorph) - ifTrue: - [answer nextPutAll: each actionSelector. - (changes includesKey: each actionSelector) - ifTrue: - [each actionSelector: (newSelector := changes at: each actionSelector). - answer nextPutAll: ' <-- ' , newSelector]. - answer cr]]. - ^answer contents - "StringHolder new - contents: answer contents; - openLabel: 'button fixups'"! Item was removed: - ----- Method: PaintBoxMorph>>init3 (in category 'initialization') ----- - init3 - "Just a record of how we loaded in the latest paintbox button images" - - | bb pic16Bit aa blt thin | - self loadoffImage: 'etoy_default.gif'. - self allMorphsDo: - [:button | - (button isKindOf: ThreePhaseButtonMorph) - ifTrue: [button offImage: nil] - ifFalse: [button position: button position + (100 @ 0)]]. - (bb := self submorphNamed: #keep:) position: bb position + (100 @ 0). - (bb := self submorphNamed: #toss:) position: bb position + (100 @ 0). - (bb := self submorphNamed: #undo:) position: bb position + (100 @ 0). - "Transparent is (Color r: 1.0 g: 0 b: 1.0)" - self moveButtons. - self loadOnImage: 'etoy_in.gif'. - AllOnImage := nil. - 'save space'. - self loadPressedImage: 'etoy_in.gif'. - AllPressedImage := nil. - 'save space'. - self loadCursors. - - "position the stamp buttons" - stampHolder stampButtons owner last delete. - stampHolder pickupButtons last delete. - stampHolder stampButtons: (stampHolder stampButtons copyFrom: 1 to: 3). - stampHolder pickupButtons: (stampHolder pickupButtons copyFrom: 1 to: 3). - stampHolder pickupButtons do: - [:button | - | rect | - "PopUpMenu notify: 'Rectangle for ',sel." - - rect := Rectangle fromUser. - button bounds: rect "image is nil"]. - "| rect lay |" - stampHolder clear. - stampHolder stampButtons do: - [:button | - | lay rect | - button - offImage: nil; - pressedImage: nil. - lay := button owner. - "PopUpMenu notify: 'Rectangle for ',sel." - rect := Rectangle fromUser. - button image: (Form fromDisplay: (rect insetBy: 2)). - lay borderWidth: 2. - lay bounds: rect "image is nil"]. - "| pic16Bit blt aa on |" - pic16Bit := GIFReadWriter formFromFileNamed: 'etoy_in.gif'. "really 8" - aa := Form extent: OriginalBounds extent depth: 8. - blt := BitBlt toForm: aa. - blt - sourceForm: pic16Bit; - combinationRule: Form over; - sourceRect: OriginalBounds; - destOrigin: 0 @ 0; - copyBits. - "Collect all the images for the buttons in the on state" - stampHolder pickupButtons do: - [:button | | on | - on := ColorForm extent: button extent depth: 8. - on colors: pic16Bit colors. - on - copy: (0 @ 0 extent: button extent) - from: button topLeft - self topLeft - in: aa - rule: Form over. - button - image: on; - pressedImage: on; - offImage: nil]. - self invalidRect: bounds. - ((self submorphNamed: #erase:) arguments third) offset: 12 @ 35. - ((self submorphNamed: #eyedropper:) arguments third) offset: 0 @ 0. - ((self submorphNamed: #fill:) arguments third) offset: 10 @ 44. - ((self submorphNamed: #paint:) arguments third) offset: 3 @ 3. "unused" - ((self submorphNamed: #rect:) arguments third) offset: 6 @ 17. - ((self submorphNamed: #ellipse:) arguments third) offset: 5 @ 4. - ((self submorphNamed: #polygon:) arguments third) offset: 5 @ 4. - ((self submorphNamed: #line:) arguments third) offset: 5 @ 17. - ((self submorphNamed: #star:) arguments third) offset: 2 @ 5. - thumbnail delete. - thumbnail := nil. - (submorphs select: [:e | e class == RectangleMorph]) first - bounds: Rectangle fromUser. - ((submorphs select: [:e | e class == RectangleMorph]) first) - borderWidth: 1; - borderColor: Color black. - "| thin |" - submorphs do: [:ss | ss class == ImageMorph ifTrue: [thin := ss "first"]]. - colorMemoryThin := thin! Item was removed: - ----- Method: PaintBoxMorph>>init4 (in category 'initialization') ----- - init4 - "Just a record of how Ted loaded in the paintbox button images, Feb 98" - | bb im pp newImage pic24Bit picNewBit blt | - - "self loadoffImage: 'roundedPalette3.bmp'." - pic24Bit := GIFReadWriter formFromServerFile: 'updates/137roundedPalette3.bmp'. - picNewBit := Form extent: pic24Bit extent depth: 16. - pic24Bit displayOn: picNewBit. - OriginalBounds := picNewBit boundingBox. - AllOffImage := Form extent: OriginalBounds extent depth: 16. - blt := BitBlt toForm: AllOffImage. - blt sourceForm: picNewBit; combinationRule: Form over; - sourceRect: OriginalBounds; destOrigin: 0 @ 0; copyBits. - - AllOffImage mapColor: Color transparent to: Color black. - self image: AllOffImage. - self invalidRect: bounds. - - self submorphsDo: [:button | button position: button position + (10 @ 10)]. - (im := submorphs at: 28) class == ImageMorph ifTrue: [ - im position: im position + (2 @ 0)]. "color picker" - "exercise it once" - - (bb := self submorphNamed: #keep:) position: bb position + (0 @ 25). - (bb := self submorphNamed: #toss:) position: bb position + (0 @ 25). - (bb := self submorphNamed: #undo:) position: bb position + (0 @ -25). - (bb := self submorphNamed: #clear:) position: bb position + (0 @ -25). - (bb := self submorphNamed: #undo:) position: bb position + (0 @ -69). - (bb := self submorphNamed: #clear:) position: bb position + (0 @ -69). - self submorphsDo: [:button | - button class == AlignmentMorph ifTrue: [ - button position: button position + (0 @ 25)]. - (button printString includesSubString: 'stamp:') ifTrue: [ - button position: button position + (0 @ 25)]]. - (bb := self submorphNamed: #prevStamp:) position: bb position + (0 @ 25). - (bb := self submorphNamed: #nextStamp:) position: bb position + (0 @ 25). - - bb := self submorphNamed: #keep:. - newImage := bb pressedImage copy: (0 @ 4 corner: (bb pressedImage boundingBox extent)). - bb onImage: newImage. bb pressedImage: newImage. bb extent: newImage extent. - bb position: bb position + (4 @ 1). - - pp := (bb := self submorphNamed: #toss:) pressedImage. - newImage := pp copy: (0 @ 4 corner: (bb pressedImage extent - (3 @ 0))). - bb onImage: newImage. bb pressedImage: newImage. - bb extent: newImage extent. - bb position: bb position + (3 @ 1). - - pp := (bb := self submorphNamed: #undo:) pressedImage. - newImage := pp copy: (0 @ 0 corner: (bb pressedImage extent - (3 @ 5))). - bb onImage: newImage. bb pressedImage: newImage. - bb extent: newImage extent. - bb position: bb position + (3 @ -1). - - pp := (bb := self submorphNamed: #clear:) pressedImage. - newImage := pp copy: (0 @ 0 corner: (bb pressedImage extent - (0 @ 5))). - bb onImage: newImage. bb pressedImage: newImage. - bb extent: newImage extent. - bb position: bb position + (3 @ -1). - - pic24Bit := GIFReadWriter formFromServerFile: 'updates/137pencil.bmp'. - picNewBit := Form extent: pic24Bit extent depth: 16. - pic24Bit displayOn: picNewBit. - newImage := picNewBit as8BitColorForm. - newImage transparentColor: (Color r: 0 g: 0 b: 0). - (bb := self submorphNamed: #erase:) pressedImage: newImage; onImage: newImage; - extent: newImage extent. - - bb position: bb position + (-11 @ -1). - ! Item was removed: - ----- Method: PaintBoxMorph>>loadColorChooser (in category 'initialization') ----- - loadColorChooser - "Load Forms for ColorMemoryMorph." - - | doc closedForm openForm | - (Smalltalk hasClassNamed: #UpdateStreamDownloader) ifFalse: [ Installer new merge: #updateStream ]. - doc := (Smalltalk classNamed: #UpdateStreamDownloader) default objectStrmFromUpdates: 'colorPalClosed.obj'. - closedForm := doc fileInObjectAndCode mapColor: Color transparent to: Color black. - doc := (Smalltalk classNamed: #UpdateStreamDownloader) default objectStrmFromUpdates: 'colorPalOpen.obj'. - openForm := doc fileInObjectAndCode mapColor: Color transparent to: Color black. - - colorMemoryThin image: closedForm. - colorMemoryThin position: self position + (0@140). - - colorMemory delete. "delete old one" - colorMemory := PaintBoxColorPicker new image: openForm. - ! Item was removed: - ----- Method: PaintBoxMorph>>loadCursors (in category 'initialization') ----- - loadCursors - "Display the form containing the cursors. Transparent is (Color r: 1.0 g: 0 b: 1.0). Grab the forms one at a time, and they are stored away. - self loadCursors. " - - | transp map | - transp := Color r: 1.0 g: 0 b: 1.0. - map := Color indexedColors copy. "just in case" - 1 to: 256 do: [:ind | (map at: ind) = transp ifTrue: - [map at: ind put: Color transparent]]. - - #(erase: eyedropper: fill: paint: rect: ellipse: polygon: line: star: ) do: [:sel | | button cursor | - self inform: 'Rectangle for ',sel. - cursor := ColorForm fromUser. - cursor colors: map. "share it" - button := self submorphNamed: sel. - button arguments at: 3 put: cursor]. - ! Item was removed: - ----- Method: PaintBoxMorph>>loadOnImage: (in category 'initialization') ----- - loadOnImage: fileName - "Read in and convert the image for the paintBox with the buttons - on. A .bmp 24-bit image. For each button, cut that chunk out and save it." - " self loadOnImage: 'NoSh:=on.bmp'. - AllOnImage := nil. 'save space'. " - - | pic16Bit blt aa type | - type := 'gif'. " gif or bmp " - type = 'gif' ifTrue: [ - pic16Bit "really 8" := GIFReadWriter formFromFileNamed: fileName. - pic16Bit display. - aa := AllOnImage := Form extent: OriginalBounds extent depth: 8. - blt := BitBlt toForm: aa. - blt sourceForm: pic16Bit; combinationRule: Form over; - sourceRect: OriginalBounds; destOrigin: 0@0; copyBits. - ]. - type = 'bmp' ifTrue: [ - pic16Bit := (Form fromBMPFileNamed: fileName) asFormOfDepth: 16. - pic16Bit display. - aa := AllOnImage := Form extent: OriginalBounds extent depth: 16. - blt := BitBlt toForm: aa. - blt sourceForm: pic16Bit; combinationRule: Form over; - sourceRect: OriginalBounds; destOrigin: 0@0; copyBits. - aa mapColor: Color transparent to: Color black. - ]. - "Collect all the images for the buttons in the on state" - self allMorphsDo: [:button | | on | - (button isKindOf: ThreePhaseButtonMorph) ifTrue: [ - type = 'gif' ifTrue: [on := ColorForm extent: button extent depth: 8. - on colors: pic16Bit colors] - ifFalse: [on := Form extent: button extent depth: 16]. - on copy: (0@0 extent: button extent) - from: (button topLeft - self topLeft) in: aa rule: Form over. - button onImage: on]]. - self invalidRect: bounds. - - ! Item was removed: - ----- Method: PaintBoxMorph>>loadPressedImage: (in category 'initialization') ----- - loadPressedImage: fileName - "Read in and convert the image for the paintBox with the buttons - on. A .bmp 24-bit image. For each button, cut that chunk out and save it." - " self loadPressedImage: 'NoSh:=on.bmp'. - AllPressedImage := nil. 'save space'. " - - | pic16Bit blt aa type | - type := 'gif'. " gif or bmp " - type = 'gif' ifTrue: [ - pic16Bit "really 8" := GIFReadWriter formFromFileNamed: fileName. - pic16Bit display. - aa := AllPressedImage := Form extent: OriginalBounds extent depth: 8. - blt := BitBlt toForm: aa. - blt sourceForm: pic16Bit; combinationRule: Form over; - sourceRect: OriginalBounds; destOrigin: 0@0; copyBits. - ]. - type = 'bmp' ifTrue: [ - pic16Bit := (Form fromBMPFileNamed: fileName) asFormOfDepth: 16. - pic16Bit display. - aa := AllPressedImage := Form extent: OriginalBounds extent depth: 16. - blt := BitBlt toForm: aa. - blt sourceForm: pic16Bit; combinationRule: Form over; - sourceRect: OriginalBounds; destOrigin: 0@0; copyBits. - aa mapColor: Color transparent to: Color black. - ]. - "Collect all the images for the buttons in the on state" - self allMorphsDo: [:button | | on | - (button isKindOf: ThreePhaseButtonMorph) ifTrue: [ - type = 'gif' ifTrue: [on := ColorForm extent: button extent depth: 8. - on colors: pic16Bit colors] - ifFalse: [on := Form extent: button extent depth: 16]. - on copy: (0@0 extent: button extent) - from: (button topLeft - self topLeft) in: aa rule: Form over. - button pressedImage: on]]. - self invalidRect: bounds. - - ! Item was removed: - ----- Method: PaintBoxMorph>>loadoffImage: (in category 'initialization') ----- - loadoffImage: fileName - "Read in and convert the background image for the paintBox. All - buttons off. A .bmp 24-bit image." - " Prototype loadoffImage: 'roundedPalette3.bmp' " - - | pic16Bit blt type getBounds | - type := 'bmp'. " gif or bmp " - getBounds := 'fromPic'. "fromUser = draw out rect of paintbox on image" - "fromOB = just read in new bits, keep same size and place as last time." - "fromPic = picture is just the PaintBox, use its bounds" - type = 'gif' ifTrue: [ - pic16Bit "really 8" := GIFReadWriter formFromFileNamed: fileName. - getBounds = 'fromUser' ifTrue: ["Just first time, collect the bounds" - pic16Bit display. - OriginalBounds := Rectangle fromUser]. - getBounds = 'fromPic' ifTrue: [OriginalBounds := pic16Bit boundingBox]. - ]. - "Use OriginalBounds as it was last time" - type = 'bmp' ifTrue: [ - pic16Bit := (Form fromBMPFileNamed: fileName) asFormOfDepth: 16. - getBounds = 'fromUser' ifTrue: ["Just first time, collect the bounds" - pic16Bit display. - OriginalBounds := Rectangle fromUser]. - "Use OriginalBounds as it was last time" - (getBounds = 'fromPic') ifTrue: [OriginalBounds := pic16Bit boundingBox]. - AllOffImage := Form extent: OriginalBounds extent depth: 16. - ]. - - type = 'gif' ifTrue: [ - AllOffImage := ColorForm extent: OriginalBounds extent depth: 8. - AllOffImage colors: pic16Bit colors]. - - blt := BitBlt toForm: AllOffImage. - blt sourceForm: pic16Bit; combinationRule: Form over; - sourceRect: OriginalBounds; destOrigin: 0@0; copyBits. - - type = 'bmp' ifTrue: [AllOffImage mapColor: Color transparent to: Color black]. - self image: AllOffImage. - self invalidRect: bounds. - - ! Item was removed: - ----- Method: PaintBoxMorph>>makeCursorFrom: (in category 'initialization') ----- - makeCursorFrom: aForm - | cursor map index colorToReplace | - cursor := aForm as8BitColorForm. - map := Color indexedColors. - index := cursor pixelValueAt: 2@2. - colorToReplace := map at: index. - cursor colors: (map collect: [:color | (color diff: colorToReplace) < 0.25 - ifTrue: [Color transparent] - ifFalse: [color]]). - ^cursor - - - ! Item was removed: - ----- Method: PaintBoxMorph>>moveButtons (in category 'initialization') ----- - moveButtons - "Move buttons one at a time and let the user place them over the background. Later can move them again by turning on AuthorModeOwner in ThreePhaseButtonMorph. - self createButtons. " - - #(erase: eyedropper: fill: paint: rect: ellipse: polygon: line: star: "pickup: pickup: pickup: pickup:" "stamp: stamp: stamp: stamp:" undo: keep: toss: prevStamp: nextStamp: - brush1: brush2: brush3: brush4: brush5: brush6: ) do: [:sel | - | rect button | - self inform: 'Rectangle for ',sel. - rect := Rectangle fromUser. - button := self submorphNamed: sel. - button bounds: rect. "image is nil"]. - "stamp: Stamps are held in a ScrollingToolHolder. Pickups and stamps and brushes are id-ed by the button == with item from a list." - ! |
Free forum by Nabble | Edit this page |