From f28d33e8164e6db6ef5c4bdca7c81945415aa4a9 Mon Sep 17 00:00:00 2001 From: ben Date: Sat, 29 Mar 2003 22:04:21 +0000 Subject: [PATCH 1/1] Convert the System 7 static text control to be a read-only version of the editbox control. This means that it has a persistent edit record, can have its height measured and uses the system font by default, all of which are good. git-svn-id: svn://svn.tartarus.org/sgt/putty@3022 cda61777-01e9-0310-a592-d414129be87e --- mac/mac_res.r | 5 +-- mac/macctrls.c | 128 ++++++++++++++++++++++++++------------------------------- mac/macresid.h | 9 ++-- 3 files changed, 64 insertions(+), 78 deletions(-) diff --git a/mac/mac_res.r b/mac/mac_res.r index 1ced9b2c..b375e8c7 100644 --- a/mac/mac_res.r +++ b/mac/mac_res.r @@ -1,4 +1,4 @@ -/* $Id: mac_res.r,v 1.36 2003/03/29 18:31:09 ben Exp $ */ +/* $Id: mac_res.r,v 1.37 2003/03/29 22:04:21 ben Exp $ */ /* * Copyright (c) 1999, 2002, 2003 Ben Harris * All rights reserved. @@ -1122,9 +1122,6 @@ resource 'TEXT' (wLicence, "licence", purgeable) { /* Custom xDEFs */ -data 'CDEF' (CDEF_Text) { - $"4EF9 00000000" -}; data 'CDEF' (CDEF_EditBox) { $"4EF9 00000000" }; diff --git a/mac/macctrls.c b/mac/macctrls.c index 4b6c382e..24b8775c 100644 --- a/mac/macctrls.c +++ b/mac/macctrls.c @@ -1,4 +1,4 @@ -/* $Id: macctrls.c,v 1.19 2003/03/29 20:16:51 ben Exp $ */ +/* $Id: macctrls.c,v 1.20 2003/03/29 22:04:21 ben Exp $ */ /* * Copyright (c) 2003 Ben Harris * All rights reserved. @@ -133,8 +133,6 @@ static void macctrl_button(struct macctrls *, WindowPtr, static void macctrl_popup(struct macctrls *, WindowPtr, struct mac_layoutstate *, union control *); #if !TARGET_API_MAC_CARBON -static pascal SInt32 macctrl_sys7_text_cdef(SInt16, ControlRef, - ControlDefProcMessage, SInt32); static pascal SInt32 macctrl_sys7_editbox_cdef(SInt16, ControlRef, ControlDefProcMessage, SInt32); static pascal SInt32 macctrl_sys7_default_cdef(SInt16, ControlRef, @@ -163,8 +161,6 @@ static void macctrl_init() PatchCDEF cdef; if (inited) return; - cdef = (PatchCDEF)GetResource(kControlDefProcResourceType, CDEF_Text); - (*cdef)->theUPP = NewControlDefProc(macctrl_sys7_text_cdef); cdef = (PatchCDEF)GetResource(kControlDefProcResourceType, CDEF_EditBox); (*cdef)->theUPP = NewControlDefProc(macctrl_sys7_editbox_cdef); cdef = (PatchCDEF)GetResource(kControlDefProcResourceType, CDEF_Default); @@ -239,7 +235,8 @@ void macctrl_layoutbox(struct controlbox *cb, WindowPtr window, } macctrl_layoutset(&curstate, cb->ctrlsets[i], window, mcs); } - macctrl_switchtopanel(mcs, 14); + macctrl_switchtopanel(mcs, 2); + /* 14 = proxies, 20 = SSH bugs */ } static void macctrl_layoutset(struct mac_layoutstate *curstate, @@ -384,6 +381,7 @@ static void macctrl_text(struct macctrls *mcs, WindowPtr window, { union macctrl *mc = smalloc(sizeof *mc); Rect bounds; + SInt16 height; fprintf(stderr, " label = %s\n", ctrl->text.label); mc->generic.type = MACCTRL_TEXT; @@ -394,7 +392,6 @@ static void macctrl_text(struct macctrls *mcs, WindowPtr window, bounds.top = curstate->pos.v; bounds.bottom = bounds.top + 16; if (mac_gestalts.apprvers >= 0x100) { - SInt16 height; Size olen; mc->text.tbctrl = NewControl(window, &bounds, NULL, TRUE, 0, 0, 0, @@ -405,54 +402,26 @@ static void macctrl_text(struct macctrls *mcs, WindowPtr window, GetControlData(mc->text.tbctrl, kControlEntireControl, kControlStaticTextTextHeightTag, sizeof(height), &height, &olen); - fprintf(stderr, " height = %d\n", height); - SizeControl(mc->text.tbctrl, curstate->width, height); - curstate->pos.v += height + 6; - } else { - Str255 title; + } +#if !TARGET_API_MAC_CARBON + else { + TEHandle te; - c2pstrcpy(title, ctrl->text.label); - mc->text.tbctrl = NewControl(window, &bounds, title, TRUE, 0, 0, 0, + mc->text.tbctrl = NewControl(window, &bounds, NULL, TRUE, 0, 0, 0, SYS7_TEXT_PROC, (long)mc); + te = (TEHandle)(*mc->text.tbctrl)->contrlData; + TESetText(ctrl->text.label, strlen(ctrl->text.label), te); + height = TEGetHeight(1, (*te)->nLines, te); } +#endif + fprintf(stderr, " height = %d\n", height); + SizeControl(mc->text.tbctrl, curstate->width, height); + curstate->pos.v += height + 6; add234(mcs->byctrl, mc); mc->generic.next = mcs->panels[curstate->panelnum]; mcs->panels[curstate->panelnum] = mc; } -#if !TARGET_API_MAC_CARBON -static pascal SInt32 macctrl_sys7_text_cdef(SInt16 variant, ControlRef control, - ControlDefProcMessage msg, SInt32 param) -{ - RgnHandle rgn; - - switch (msg) { - case drawCntl: - if ((*control)->contrlVis) - TETextBox((*control)->contrlTitle + 1, (*control)->contrlTitle[0], - &(*control)->contrlRect, teFlushDefault); - return 0; - case calcCRgns: - if (param & (1 << 31)) { - param &= ~(1 << 31); - goto calcthumbrgn; - } - /* FALLTHROUGH */ - case calcCntlRgn: - rgn = (RgnHandle)param; - RectRgn(rgn, &(*control)->contrlRect); - return 0; - case calcThumbRgn: - calcthumbrgn: - rgn = (RgnHandle)param; - SetEmptyRgn(rgn); - return 0; - } - - return 0; -} -#endif - static void macctrl_editbox(struct macctrls *mcs, WindowPtr window, struct mac_layoutstate *curstate, union control *ctrl) @@ -495,15 +464,17 @@ static void macctrl_editbox(struct macctrls *mcs, WindowPtr window, ctrl->editbox.password ? kControlEditTextPasswordProc : kControlEditTextProc, (long)mc); - } else { - Str255 title; - - c2pstrcpy(title, ctrl->editbox.label); - mc->editbox.tblabel = NewControl(window, &lbounds, title, TRUE, + } +#if !TARGET_API_MAC_CARBON + else { + mc->editbox.tblabel = NewControl(window, &lbounds, NULL, TRUE, 0, 0, 0, SYS7_TEXT_PROC, (long)mc); + TESetText(ctrl->editbox.label, strlen(ctrl->editbox.label), + (TEHandle)(*mc->editbox.tblabel)->contrlData); mc->editbox.tbctrl = NewControl(window, &bounds, NULL, TRUE, 0, 0, 0, SYS7_EDITBOX_PROC, (long)mc); } +#endif curstate->pos.v += 28; add234(mcs->byctrl, mc); mc->generic.next = mcs->panels[curstate->panelnum]; @@ -526,7 +497,8 @@ static pascal SInt32 macctrl_sys7_editbox_cdef(SInt16 variant, switch (msg) { case initCntl: rect = (*control)->contrlRect; - InsetRect(&rect, 3, 3); /* 2 if it's 20 pixels high */ + if (variant == SYS7_EDITBOX_VARIANT) + InsetRect(&rect, 3, 3); /* 2 if it's 20 pixels high */ te = TENew(&rect, &rect); ssfs = GetScriptVariable(smSystemScript, smScriptSysFondSize); (*te)->txSize = LoWord(ssfs); @@ -539,18 +511,23 @@ static pascal SInt32 macctrl_sys7_editbox_cdef(SInt16 variant, case drawCntl: if ((*control)->contrlVis) { rect = (*control)->contrlRect; - PenNormal(); - FrameRect(&rect); - InsetRect(&rect, 3, 3); + if (variant == SYS7_EDITBOX_VARIANT) { + PenNormal(); + FrameRect(&rect); + InsetRect(&rect, 3, 3); + } + (*(TEHandle)(*control)->contrlData)->viewRect = rect; TEUpdate(&rect, (TEHandle)(*control)->contrlData); } return 0; case testCntl: + if (variant == SYS7_TEXT_VARIANT) + return kControlNoPart; mouse.h = LoWord(param); mouse.v = HiWord(param); - return - PtInRect(mouse, &(*(TEHandle)(*control)->contrlData)->viewRect) ? - kControlEditTextPart : kControlNoPart; + rect = (*control)->contrlRect; + InsetRect(&rect, 3, 3); + return PtInRect(mouse, &rect) ? kControlEditTextPart : kControlNoPart; case calcCRgns: if (param & (1 << 31)) { param &= ~(1 << 31); @@ -598,13 +575,15 @@ static void macctrl_radio(struct macctrls *mcs, WindowPtr window, SetControlData(mc->radio.tblabel, kControlEntireControl, kControlStaticTextTextTag, strlen(ctrl->radio.label), ctrl->radio.label); - } else { - Str255 title; - - c2pstrcpy(title, ctrl->radio.label); - mc->editbox.tblabel = NewControl(window, &bounds, title, TRUE, + } + #if !TARGET_API_MAC_CARBON + else { + mc->radio.tblabel = NewControl(window, &bounds, NULL, TRUE, 0, 0, 0, SYS7_TEXT_PROC, (long)mc); + TESetText(ctrl->radio.label, strlen(ctrl->radio.label), + (TEHandle)(*mc->radio.tblabel)->contrlData); } +#endif curstate->pos.v += 18; for (i = 0; i < ctrl->radio.nbuttons; i++) { fprintf(stderr, " button = %s\n", ctrl->radio.buttons[i]); @@ -817,7 +796,7 @@ void macctrl_activate(WindowPtr window, EventRecord *event) TRUE); state = active ? kControlNoPart : kControlInactivePart; for (i = 0; i <= mcs->curpanel; i += mcs->curpanel) - for (mc = mcs->panels[i]; mc != NULL; mc = mc->generic.next) + for (mc = mcs->panels[i]; mc != NULL; mc = mc->generic.next) { switch (mc->generic.type) { case MACCTRL_TEXT: HiliteControl(mc->text.tbctrl, state); @@ -841,6 +820,15 @@ void macctrl_activate(WindowPtr window, EventRecord *event) HiliteControl(mc->popup.tbctrl, state); break; } +#if !TARGET_API_MAC_CARBON + if (mcs->focus == mc) { + if (active) + macctrl_enfocus(mc); + else + macctrl_defocus(mc); + } +#endif + } SetPort(saveport); } @@ -1375,16 +1363,16 @@ void dlg_text_set(union control *ctrl, void *dlg, char const *text) { struct macctrls *mcs = dlg; union macctrl *mc = findbyctrl(mcs, ctrl); - Str255 title; assert(mc != NULL); if (mac_gestalts.apprvers >= 0x100) SetControlData(mc->text.tbctrl, kControlEntireControl, kControlStaticTextTextTag, strlen(text), text); - else { - c2pstrcpy(title, text); - SetControlTitle(mc->text.tbctrl, title); - } +#if !TARGET_API_MAC_CARBON + else + TESetText(text, strlen(text), + (TEHandle)(*mc->text.tbctrl)->contrlData); +#endif } diff --git a/mac/macresid.h b/mac/macresid.h index 0c696b05..bb39097e 100644 --- a/mac/macresid.h +++ b/mac/macresid.h @@ -1,4 +1,4 @@ -/* $Id: macresid.h,v 1.13 2003/03/29 18:31:09 ben Exp $ */ +/* $Id: macresid.h,v 1.14 2003/03/29 22:04:21 ben Exp $ */ /* * macresid.h -- Mac resource IDs @@ -60,9 +60,10 @@ #define cVScroll 128 /* xDEFs */ -#define CDEF_Text 128 -#define SYS7_TEXT_PROC (CDEF_Text << 4) #define CDEF_EditBox 129 -#define SYS7_EDITBOX_PROC (CDEF_EditBox << 4) +#define SYS7_EDITBOX_VARIANT 0 +#define SYS7_TEXT_VARIANT 1 +#define SYS7_EDITBOX_PROC ((CDEF_EditBox << 4) + SYS7_EDITBOX_VARIANT) +#define SYS7_TEXT_PROC ((CDEF_EditBox << 4) + SYS7_TEXT_VARIANT) #define CDEF_Default 130 #define SYS7_DEFAULT_PROC (CDEF_Default << 4) -- 2.11.0