summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Walzer <kw@codebykevin.com>2015-02-12 15:34:54 (GMT)
committerKevin Walzer <kw@codebykevin.com>2015-02-12 15:34:54 (GMT)
commit58069efb01b6488a3c1b972848496abdb99b65a7 (patch)
tree2d7dd5dff88b6cee10af1aaabe550acec9c39a55
parentcfb60fe5ba86489ac38ed384bb4a99ab06d752a1 (diff)
downloadtk-58069efb01b6488a3c1b972848496abdb99b65a7.zip
tk-58069efb01b6488a3c1b972848496abdb99b65a7.tar.gz
tk-58069efb01b6488a3c1b972848496abdb99b65a7.tar.bz2
Cleaner implementation of metrics for radiobuttons and checkbuttons under Cocoa; still a bit of extra padding required, but only when absolutely necessary
-rw-r--r--macosx/tkMacOSXButton.c47
1 files changed, 25 insertions, 22 deletions
diff --git a/macosx/tkMacOSXButton.c b/macosx/tkMacOSXButton.c
index 763f544..9c2196f 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,
@@ -396,16 +378,37 @@ TkpComputeButtonGeometry(
width += 2 * butPtr->padX;
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;
}
+
/*
* Now figure out the size of the border decorations for the button.