summaryrefslogtreecommitdiffstats
path: root/macosx
diff options
context:
space:
mode:
authorKevin Walzer <kw@codebykevin.com>2015-02-12 15:30:59 (GMT)
committerKevin Walzer <kw@codebykevin.com>2015-02-12 15:30:59 (GMT)
commit739a187e538263927f4d621b2cf4c59c5753f291 (patch)
tree57bfcd9849ea746b94f894444be4b6ad72e58f6f /macosx
parent186fd507fce8e72ceb25fa41cfe1c65429dd3398 (diff)
downloadtk-739a187e538263927f4d621b2cf4c59c5753f291.zip
tk-739a187e538263927f4d621b2cf4c59c5753f291.tar.gz
tk-739a187e538263927f4d621b2cf4c59c5753f291.tar.bz2
Cleaner implementation of metrics for radiobuttons and checkbuttons under Cocoa; still a bit of extra padding required, but only when absolutely necessary
Diffstat (limited to 'macosx')
-rw-r--r--macosx/tkMacOSXButton.c47
1 files changed, 26 insertions, 21 deletions
diff --git a/macosx/tkMacOSXButton.c b/macosx/tkMacOSXButton.c
index 51656ee..d676641 100644
--- a/macosx/tkMacOSXButton.c
+++ b/macosx/tkMacOSXButton.c
@@ -296,24 +296,6 @@ TkpComputeButtonGeometry(
haveImage = 1;
}
- /*Tk Aqua can't handle metrics for radiobuttons and checkbuttons with images unless they are set first. These are derived from experimentation.*/
- if (haveImage && !haveText) {
- switch (butPtr->type) {
- case TYPE_RADIO_BUTTON:
- width = butPtr->width;
- width +=50;
- break;
- case TYPE_CHECK_BUTTON:
- width = butPtr->width;
- width += 50;
- break;
- case TYPE_BUTTON:
- width = butPtr->width;
- width += 0;
- break;
- }
- }
-
if (haveImage == 0 || butPtr->compound != COMPOUND_NONE) {
Tk_FreeTextLayout(butPtr->textLayout);
butPtr->textLayout = Tk_ComputeTextLayout(butPtr->tkfont,
@@ -397,13 +379,34 @@ TkpComputeButtonGeometry(
height += 2 * butPtr->padY;
- /* Need special handling for radiobuttons and checkbuttons: the text is drawn right on top of the button unless we expand the width. This is not perfect; some radiobuttons may render on top anyway. Need to find a better solution to calculate average text width.*/
+ /* Need special handling for radiobuttons and checkbuttons:
+ the text and images is drawn right on top of the button unless
+ we expand the width. This is not perfect; some radiobuttons may render
+ on top anyway.
+ */
switch (butPtr->type) {
case TYPE_RADIO_BUTTON:
- width += 50;
+ /*Pad radiobutton by 50 to ensure image does not draw right over
+ radiobutton on left.*/
+ if (butPtr->image != None) {
+ width += 50;
+ } else if (butPtr->bitmap != None) {
+ width +=50;
+ } else {
+ /*If just text, just add width of string.*/
+ width += txtWidth;
+ }
break;
case TYPE_CHECK_BUTTON:
- width += 50;
+ /*No padding required here.*/
+ if (butPtr->image != None) {
+ width += 0;
+ } else if (butPtr->bitmap != None) {
+ width +=0;
+ } else {
+ /*If just text, just add width of string.*/
+ width += txtWidth;
+ }
break;
}
@@ -417,6 +420,7 @@ TkpComputeButtonGeometry(
butPtr->inset = 0;
butPtr->inset += butPtr->highlightWidth;
+
if (TkMacOSXComputeButtonDrawParams(butPtr,&drawParams)) {
@@ -471,6 +475,7 @@ TkpComputeButtonGeometry(
}
/*
+/*
*----------------------------------------------------------------------
*
* DrawButtonImageAndText --