+static void macctrl_editbox(struct macctrls *mcs, WindowPtr window,
+ struct mac_layoutstate *curstate,
+ union control *ctrl)
+{
+ union macctrl *mc = smalloc(sizeof *mc);
+ Rect bounds;
+
+ fprintf(stderr, " label = %s\n", ctrl->editbox.label);
+ fprintf(stderr, " percentwidth = %d\n", ctrl->editbox.percentwidth);
+ if (ctrl->editbox.password) fprintf(stderr, " password\n");
+ if (ctrl->editbox.has_list) fprintf(stderr, " has list\n");
+ mc->generic.type = MACCTRL_EDITBOX;
+ mc->generic.ctrl = ctrl;
+ mc->generic.privdata = NULL;
+ bounds.left = curstate->pos.h;
+ bounds.right = bounds.left + curstate->width;
+ bounds.top = curstate->pos.v;
+ bounds.bottom = bounds.top + 22;
+ if (mac_gestalts.apprvers >= 0x100) {
+ InsetRect(&bounds, 2, 2);
+ mc->text.tbctrl = NewControl(window, &bounds, NULL, TRUE, 0, 0, 0,
+ ctrl->editbox.password ?
+ kControlEditTextPasswordProc :
+ kControlEditTextProc, (long)mc);
+ } else {
+ mc->text.tbctrl = NewControl(window, &bounds, NULL, TRUE, 0, 0, 0,
+ SYS7_EDITBOX_PROC, (long)mc);
+ }
+ curstate->pos.v += 28;
+ add234(mcs->byctrl, mc);
+ mc->generic.next = mcs->panels[curstate->panelnum];
+ mcs->panels[curstate->panelnum] = mc;
+ ctrlevent(mcs, mc, EVENT_REFRESH);
+}
+
+#if !TARGET_API_MAC_CARBON
+static pascal SInt32 macctrl_sys7_editbox_cdef(SInt16 variant,
+ ControlRef control,
+ ControlDefProcMessage msg,
+ SInt32 param)
+{
+ RgnHandle rgn;
+ Rect rect;
+ TEHandle te;
+ long ssfs;
+
+ switch (msg) {
+ case initCntl:
+ rect = (*control)->contrlRect;
+ InsetRect(&rect, 3, 3); /* 2 if it's 20 pixels high */
+ te = TENew(&rect, &rect);
+ ssfs = GetScriptVariable(smSystemScript, smScriptSysFondSize);
+ (*te)->txSize = LoWord(ssfs);
+ (*te)->txFont = HiWord(ssfs);
+ (*control)->contrlData = (Handle)te;
+ return noErr;
+ case dispCntl:
+ TEDispose((TEHandle)(*control)->contrlData);
+ return 0;
+ case drawCntl:
+ if ((*control)->contrlVis) {
+ rect = (*control)->contrlRect;
+ PenNormal();
+ FrameRect(&rect);
+ InsetRect(&rect, 3, 3);
+ TEUpdate(&rect, (TEHandle)(*control)->contrlData);
+ }
+ 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
+