<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE TIP SYSTEM "http://www.tcl.tk/cgi-bin/tct/tip/tipxml.dtd">
<!-- Converted at Sat May 18 09:10:50 GMT 2013 -->
<!-- TIP AutoGenerator - written by Donal K. Fellows -->

<TIP number='51'>
<header><title>Native Menubutton on Macintosh</title><author address="mailto:matben@privat.utfors.se">Mats Bengtsson</author><status type='project' state='withdrawn' tclversion="8.5" vote='prior'>$Revision: 1.4 $</status><history></history><created day='4' month='aug' year='2001' /></header>
<abstract>This is a replacement for the menubutton on the Macintosh with a native implementation which is compliant with the Appearance Manager in Mac OS 8 and later.</abstract>
<body><section title="Rationale">
<para>The present (in 8.3.3 and earlier) menubutton on the Macintosh is implemented using Tk drawing to draw something similar to the native menubutton on Mac how it looks on Pre Mac OS 8.0 systems, and therefore fails to give the correct appearance on Mac OS 8.0 systems and later. This TIP presents a step to increase the native appearance on the Macintosh (similar to <tipref type="text" tip="25"/>.)</para>
<image src="51compare" caption="Comparison of Native (to left) and Standard Menu Buttons." />
</section>
<section title="Reference Implementation">
<para>The proposed change is now implemented as a loadable extension (in C) on Macintosh, and can be downloaded [<url ref="http://hem.fyristorg.com/matben/download/MacMenuButton.sit"/>]. This implementation differs from the other buttons in Mac Tk (button, radiobutton, checkbutton), which use a mixture of native Apple drawing code and Tk drawing code, since it uses only native Apple code for drawing. This extension requires Tcl/Tk 8.3.2p1 or later due to the changed stub loading mechanism. The new implementation is not a complete replacement since it lacks the <emph style="italic">-bitmap</emph> and <emph style="italic">-image</emph> options, and a few other things, see below.</para>
<para>The changes necessary are:</para>
<itemize><item.i><para>Replace the <emph style="italic">tkMacMenubutton.c</emph> file with the new one.</para></item.i><item.i><para>Add a MENU resource item, which is included in the shared library, but needs to be added to the core.</para></item.i><item.i><para>Modifications to <emph style="italic">tkMacFont.c</emph> (see appendix). Put declaration so it can be used from any file. Possibly also add the new function to the stub table since it can be practical for other extension writers.</para></item.i><item.i><para>Need to check for the presence of the Appearance manager:</para><verbatim><vline encoding='base64'>aWYgKFRrTWFjSGF2ZUFwcGVhcmFuY2UoKSkg</vline><vline encoding='base64'>ICAgdXNlIG5hdGl2ZSAobmV3KSBtZW51YnV0dG9uIA==</vline><vline encoding='base64'>ZWxzZSA=</vline><vline encoding='base64'>ICAgdXNlIHByZXNlbnQgbWVudWJ1dHRvbg==</vline></verbatim></item.i></itemize>
<para>All functionality from the documentation that is applicable is implemented in the extension, with some exceptions:</para>
<itemize><item.i><para>The <emph style="italic">-image</emph> and <emph style="italic">-bitmap</emph> options are not supported, yet.</para></item.i><item.i><para>There is no button pressed (SELECTED) flag so it highlights when the mouse enters, just as a reminder that it must be fixed. (see appendix)</para></item.i><item.i><para>Don&apos;t know which color to pick for the three pixels in each corner. It is now the <emph style="italic">-background</emph> color, but the ordinary button uses <emph style="italic">-highlightbackground</emph>?</para></item.i><item.i><para>The position of the popup menu should be changed in order to conform better with standard Mac appearance..</para></item.i><item.i><para>Something needs to be done so that we can get Mac native font stuffs from a <emph style="italic">Tk_Font</emph> object; I&apos;ve included a crude hack in the appendix.</para></item.i><item.i><para>It is compliant to the Appearance Manager which means that foreground and background colors are set via themes and not from command switches.</para></item.i><item.i><para>Minor differences to comply with the Appearance Manager.</para></item.i></itemize>
<para>All these deviations are consistent with the look-and-feel of Mac OS 8.0 and on. Existing scripts using menubutton are compatible with the new menubutton.</para>
<para>Open questions: </para>
<itemize><item.i><para>Option to use for the color of the corner pixels.</para></item.i><item.i><para>If (and how) a SELECTED flag should be added to <emph style="italic">tkMenuButton.h</emph>, and code to support it in <emph style="italic">tkMenuButton.c</emph>.</para></item.i><item.i><para>Implementation of the <emph style="italic">-bitmap</emph> and <emph style="italic">-image</emph> options.</para></item.i><item.i><para>A <emph style="italic">-compound</emph> option as described in TIP #11.</para></item.i></itemize>
</section>
<section title="Copyright">
<para>This document has been placed in the public domain.</para>
</section>
<section title="Appendix">
<itemize><item.i><para>Addition to <emph style="italic">tkMenuButton.h</emph>:</para><verbatim><vline encoding='base64'>I2RlZmluZSBTRUxFQ1RFRAkJOA==</vline></verbatim><para>Other modifications to tkMenuButton.c must be made to support this flag.</para></item.i><item.i><para>Addition to <emph style="italic">tkMacFont.c</emph> (possibly add to exported functions):</para><verbatim><vline encoding='base64'>Lyo=</vline><vline encoding='base64'>ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0=</vline><vline encoding='base64'>ICo=</vline><vline encoding='base64'>ICogR2V0TWFjRm9udEF0dHJpYnV0ZXMgLS0g</vline><vline encoding='base64'>ICo=</vline><vline encoding='base64'>ICogICAgICBUYWtlcyBhIFRrX0ZvbnQgYW5kIGdldHMgdGhlIE1hYyBmb250IGF0dHJpYnV0ZXMgZmFjZU51bSwgc2l6ZSwgYW5kIHN0eWxlLg==</vline><vline encoding='base64'>ICogICAgICBOb3RlIHRoYXQgdGhlIE1hYyBmb250IHNpemUgaXMgaW4gcGl4ZWxzIHdoaWxlIHRoZSBUa19Gb250IHNpemUgaXM=</vline><vline encoding='base64'>ICogICAgICBpbiBwb2ludHMuIE5vIG5lZWQgdG8gZG8gYW55IFVURi04IHRyYW5zbGF0aW9ucyBzaW5jZSB0aGlzIGlz</vline><vline encoding='base64'>ICogICAgICBpbXBsaWNpdCBpbiBHZXRGYW1pbHlPckFsaWFzTnVtKCku</vline><vline encoding='base64'>ICogICAgICBUaGUgY29kZSBoZXJlIGlzIGVzc2VudGlhbGx5IGEgbW9kaWZpZWQgVGtwR2V0Rm9udEZyb21BdHRyaWJ1dGVzKCkgYW5k</vline><vline encoding='base64'>ICogICAgICBJbml0Rm9udCgpLCBib3RoIGZyb20gdGtNYWNGb250LmMu</vline><vline encoding='base64'>ICo=</vline><vline encoding='base64'>ICogUmVzdWx0czo=</vline><vline encoding='base64'>ICogICAgICBTZXRzIHRoZSBNYWMgZm9udCBhdHRyaWJ1dGVzLg==</vline><vline encoding='base64'>ICo=</vline><vline encoding='base64'>ICogU2lkZSBlZmZlY3RzOg==</vline><vline encoding='base64'>ICogICAgICBOb25lLg==</vline><vline encoding='base64'>ICo=</vline><vline encoding='base64'>ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0=</vline><vline encoding='base64'>ICov</vline><vline encoding='base64'>dm9pZA==</vline><vline encoding='base64'>R2V0TWFjRm9udEF0dHJpYnV0ZXMo</vline><vline encoding='base64'>ICAgICAgICBUa19XaW5kb3cgdGt3aW4sICAgICAgICAvKiBUayB3aW5kb3cuIChpbikgKi8=</vline><vline encoding='base64'>ICAgICAgICBUa19Gb250IHRrRm9udCwgICAgICAgICAvKiBUayBmb250LiAoaW4pICov</vline><vline encoding='base64'>ICAgICAgICBzaG9ydCAqZmFjZU51bVB0ciwgICAgICAvKiBNYWMgZm9udCBmYWNlIGlkLiAob3V0KSAqLw==</vline><vline encoding='base64'>ICAgICAgICBzaG9ydCAqbWFjU2l6ZVB0ciwgICAgICAvKiBNYWMgZm9udCBzaXplIGluIHBpeGVscy4gKG91dCkgKi8=</vline><vline encoding='base64'>ICAgICAgICBTdHlsZSAqc3R5bGVQdHIpICAgICAgICAvKiBNYWMgZm9udCBzdHlsZSBzcGVjaWZpZXIuIChvdXQpICov</vline><vline encoding='base64'>ew==</vline><vline encoding='base64'>ICAgIGludCBpLCBqOw==</vline><vline encoding='base64'>ICAgIGNoYXIgKmZhY2VOYW1lLCAqZmFsbGJhY2s7</vline><vline encoding='base64'>ICAgIGNoYXIgKioqZmFsbGJhY2tzOw==</vline><vline encoding='base64'>ICAgIE1hY0ZvbnQgKmZvbnRQdHI7</vline><vline encoding='base64'>ICAgIGNvbnN0IFRrRm9udEF0dHJpYnV0ZXMgKmZhUHRyOw==</vline><vline encoding='base64'>ICAgIGludCBzaXplOyAgICAgICAgICAgLyogU2l6ZSBpbiBwb2ludHMuICov</vline><vline encoding='base64'>ICAgICAgICA=</vline><vline encoding='base64'>ICAgIC8q</vline><vline encoding='base64'>ICAgICAqIFRoaXMgaXMganVzdCBhIG1hY3JvIHRvIGFjY2VzcyB0aGUgYXR0cmlidXRlIHN0cnVjdCBtZW1iZXIu</vline><vline encoding='base64'>ICAgICAqLw==</vline><vline encoding='base64'>ICAgICA=</vline><vline encoding='base64'>ICAgIGZhUHRyID0gR2V0Rm9udEF0dHJpYnV0ZXModGtGb250KTs=</vline><vline encoding='base64'></vline><vline encoding='base64'>ICAgIC8q</vline><vline encoding='base64'>ICAgICAqIEFsZ29yaXRobSB0byBnZXQgdGhlIGNsb3Nlc3QgZm9udCB0byB0aGUgb25lIHJlcXVlc3RlZC4=</vline><vline encoding='base64'>ICAgICAq</vline><vline encoding='base64'>ICAgICAqIHRyeSBmb250bmFtZQ==</vline><vline encoding='base64'>ICAgICAqIHRyeSBhbGwgYWxpYXNlcyBmb3IgZm9udG5hbWU=</vline><vline encoding='base64'>ICAgICAqIGZvcmVhY2ggZmFsbGJhY2sgZm9yIGZvbnRuYW1l</vline><vline encoding='base64'>ICAgICAqICAgICAgdHJ5IHRoZSBmYWxsYmFjaw==</vline><vline encoding='base64'>ICAgICAqICAgICAgdHJ5IGFsbCBhbGlhc2VzIGZvciB0aGUgZmFsbGJhY2s=</vline><vline encoding='base64'>ICAgICAqLw==</vline><vline encoding='base64'>ICAgICA=</vline><vline encoding='base64'>ICAgICpmYWNlTnVtUHRyID0gMDs=</vline><vline encoding='base64'>ICAgIGZhY2VOYW1lID0gZmFQdHItPmZhbWlseTs=</vline><vline encoding='base64'>ICAgIGlmIChmYWNlTmFtZSAhPSBOVUxMKSB7</vline><vline encoding='base64'>ICAgICAgICBpZiAoR2V0RmFtaWx5T3JBbGlhc051bShmYWNlTmFtZSwgZmFjZU51bVB0cikgIT0gMCkgew==</vline><vline encoding='base64'>ICAgICAgICAgICAgZ290byBmb3VuZDs=</vline><vline encoding='base64'>ICAgICAgICB9</vline><vline encoding='base64'>ICAgICAgICBmYWxsYmFja3MgPSBUa0ZvbnRHZXRGYWxsYmFja3MoKTs=</vline><vline encoding='base64'>ICAgICAgICBmb3IgKGkgPSAwOyBmYWxsYmFja3NbaV0gIT0gTlVMTDsgaSsrKSB7</vline><vline encoding='base64'>ICAgICAgICAgICAgZm9yIChqID0gMDsgKGZhbGxiYWNrID0gZmFsbGJhY2tzW2ldW2pdKSAhPSBOVUxMOyBqKyspIHs=</vline><vline encoding='base64'>ICAgICAgICAgICAgICAgIGlmIChzdHJjYXNlY21wKGZhY2VOYW1lLCBmYWxsYmFjaykgPT0gMCkgew==</vline><vline encoding='base64'>ICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyAoZmFsbGJhY2sgPSBmYWxsYmFja3NbaV1bal0pICE9IE5VTEw7IGorKykgew==</vline><vline encoding='base64'>ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEdldEZhbWlseU9yQWxpYXNOdW0oZmFsbGJhY2ssIGZhY2VOdW1QdHIpKSB7</vline><vline encoding='base64'>ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZm91bmQ7</vline><vline encoding='base64'>ICAgICAgICAgICAgICAgICAgICAgICAgfQ==</vline><vline encoding='base64'>ICAgICAgICAgICAgICAgICAgICB9</vline><vline encoding='base64'>ICAgICAgICAgICAgICAgIH0=</vline><vline encoding='base64'>ICAgICAgICAgICAgICAgIGJyZWFrOw==</vline><vline encoding='base64'>ICAgICAgICAgICAgfQ==</vline><vline encoding='base64'>ICAgICAgICB9</vline><vline encoding='base64'>ICAgIH0=</vline><vline encoding='base64'>ICAgIA==</vline><vline encoding='base64'>ICAgIGZvdW5kOiAgICA=</vline><vline encoding='base64'>ICAgICpzdHlsZVB0ciA9IDA7</vline><vline encoding='base64'>ICAgIGlmIChmYVB0ci0+d2VpZ2h0ICE9IFRLX0ZXX05PUk1BTCkgew==</vline><vline encoding='base64'>ICAgICAgICAqc3R5bGVQdHIgfD0gYm9sZDs=</vline><vline encoding='base64'>ICAgIH0=</vline><vline encoding='base64'>ICAgIGlmIChmYVB0ci0+c2xhbnQgIT0gVEtfRlNfUk9NQU4pIHs=</vline><vline encoding='base64'>ICAgICAgICAqc3R5bGVQdHIgfD0gaXRhbGljOw==</vline><vline encoding='base64'>ICAgIH0=</vline><vline encoding='base64'>ICAgIGlmIChmYVB0ci0+dW5kZXJsaW5lKSB7</vline><vline encoding='base64'>ICAgICAgICAqc3R5bGVQdHIgfD0gdW5kZXJsaW5lOw==</vline><vline encoding='base64'>ICAgIH0=</vline><vline encoding='base64'>ICAgIGlmIChmYVB0ci0+c2l6ZSA9PSAwKSB7</vline><vline encoding='base64'>ICAgICAgICBzaXplID0gLUdldERlZkZvbnRTaXplKCk7</vline><vline encoding='base64'>ICAgIH0gZWxzZSB7</vline><vline encoding='base64'>ICAgICAgICBzaXplID0gZmFQdHItPnNpemU7</vline><vline encoding='base64'>ICAgIH0=</vline><vline encoding='base64'>ICAgICptYWNTaXplUHRyID0gKHNob3J0KSBUa0ZvbnRHZXRQaXhlbHModGt3aW4sIHNpemUpOw==</vline><vline encoding='base64'>fQ==</vline></verbatim></item.i></itemize>
</section>
</body></TIP>
