]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Added UserPane callbacks for HitTest and Tracking. Doesn't fully work yet.
authorJack Jansen <jack.jansen@cwi.nl>
Tue, 21 Mar 2000 23:03:02 +0000 (23:03 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Tue, 21 Mar 2000 23:03:02 +0000 (23:03 +0000)
Mac/Modules/ctl/Ctlmodule.c
Mac/Modules/ctl/ctlsupport.py

index 32788bcdb7719298f1d597624587f8e37f035d7c..12e5809d88a60b6a4c8eb5cc931de3fb7b900f9b 100644 (file)
@@ -87,6 +87,8 @@ static PyObject *tracker;
 static ControlActionUPP mytracker_upp;
 static ControlUserPaneDrawUPP mydrawproc_upp;
 static ControlUserPaneIdleUPP myidleproc_upp;
+static ControlUserPaneHitTestUPP myhittestproc_upp;
+static ControlUserPaneTrackingUPP mytrackingproc_upp;
 
 extern int settrackfunc(PyObject *);   /* forward */
 extern void clrtrackfunc(void);        /* forward */
@@ -1982,6 +1984,10 @@ setcallback(self, which, callback, uppp)
                *uppp = mydrawproc_upp;
        else if ( which == kControlUserPaneIdleProcTag )
                *uppp = myidleproc_upp;
+       else if ( which == kControlUserPaneHitTestProcTag )
+               *uppp = myhittestproc_upp;
+       else if ( which == kControlUserPaneTrackingProcTag )
+               *uppp = mytrackingproc_upp;
        else
                return -1;
        /* Only now do we test for clearing of the callback: */
@@ -2010,12 +2016,12 @@ callcallback(self, which, arglist)
        sprintf(keybuf, "%x", which);
        if ( self->ob_callbackdict == NULL ||
                        (func = PyDict_GetItemString(self->ob_callbackdict, keybuf)) == NULL ) {
-               PySys_WriteStderr("Control callback without callback object\n");
+               PySys_WriteStderr("Control callback %x without callback object\n", which);
                return NULL;
        }
        rv = PyEval_CallObject(func, arglist);
        if ( rv == NULL )
-               PySys_WriteStderr("Exception in control callback handler\n");
+               PySys_WriteStderr("Exception in control callback %x handler\n", which);
        return rv;
 }
 
@@ -2045,6 +2051,42 @@ myidleproc(ControlHandle control)
        Py_XDECREF(rv);
 }
 
+static pascal ControlPartCode
+myhittestproc(ControlHandle control, Point where)
+{
+       ControlObject *ctl_obj;
+       PyObject *arglist, *rv;
+       short c_rv = -1;
+
+       ctl_obj = (ControlObject *)CtlObj_WhichControl(control);
+       arglist = Py_BuildValue("OO&", ctl_obj, PyMac_BuildPoint, &where);
+       rv = callcallback(ctl_obj, kControlUserPaneHitTestProcTag, arglist);
+       Py_XDECREF(arglist);
+       /* Ignore errors, nothing we can do about them */
+       if ( rv )
+               PyArg_Parse(rv, "h", &c_rv);
+       Py_XDECREF(rv);
+       return (ControlPartCode)c_rv;
+}
+
+static pascal ControlPartCode
+mytrackingproc(ControlHandle control, Point startPt, ControlActionUPP actionProc)
+{
+       ControlObject *ctl_obj;
+       PyObject *arglist, *rv;
+       short c_rv = -1;
+
+       ctl_obj = (ControlObject *)CtlObj_WhichControl(control);
+       /* We cannot pass the actionProc without lots of work */
+       arglist = Py_BuildValue("OO&", ctl_obj, PyMac_BuildPoint, &startPt);
+       rv = callcallback(ctl_obj, kControlUserPaneTrackingProcTag, arglist);
+       Py_XDECREF(arglist);
+       if ( rv )
+               PyArg_Parse(rv, "h", &c_rv);
+       Py_XDECREF(rv);
+       return (ControlPartCode)c_rv;
+}
+
 
 
 void initCtl()
@@ -2057,6 +2099,8 @@ void initCtl()
        mytracker_upp = NewControlActionProc(mytracker);
        mydrawproc_upp = NewControlUserPaneDrawProc(mydrawproc);
        myidleproc_upp = NewControlUserPaneDrawProc(myidleproc);
+       myhittestproc_upp = NewControlUserPaneHitTestProc(myhittestproc);
+       mytrackingproc_upp = NewControlUserPaneTrackingProc(mytrackingproc);
 
 
        m = Py_InitModule("Ctl", Ctl_methods);
index ac753327479c8953a616b8d30d0714326158382d..a826d5b95ed4c5c101de470608332c33401f8f2f 100644 (file)
@@ -87,6 +87,8 @@ static PyObject *tracker;
 static ControlActionUPP mytracker_upp;
 static ControlUserPaneDrawUPP mydrawproc_upp;
 static ControlUserPaneIdleUPP myidleproc_upp;
+static ControlUserPaneHitTestUPP myhittestproc_upp;
+static ControlUserPaneTrackingUPP mytrackingproc_upp;
 
 extern int settrackfunc(PyObject *);   /* forward */
 extern void clrtrackfunc(void);        /* forward */
@@ -175,6 +177,10 @@ setcallback(self, which, callback, uppp)
                *uppp = mydrawproc_upp;
        else if ( which == kControlUserPaneIdleProcTag )
                *uppp = myidleproc_upp;
+       else if ( which == kControlUserPaneHitTestProcTag )
+               *uppp = myhittestproc_upp;
+       else if ( which == kControlUserPaneTrackingProcTag )
+               *uppp = mytrackingproc_upp;
        else
                return -1;
        /* Only now do we test for clearing of the callback: */
@@ -203,12 +209,12 @@ callcallback(self, which, arglist)
        sprintf(keybuf, "%x", which);
        if ( self->ob_callbackdict == NULL ||
                        (func = PyDict_GetItemString(self->ob_callbackdict, keybuf)) == NULL ) {
-               PySys_WriteStderr("Control callback without callback object\\n");
+               PySys_WriteStderr("Control callback %x without callback object\\n", which);
                return NULL;
        }
        rv = PyEval_CallObject(func, arglist);
        if ( rv == NULL )
-               PySys_WriteStderr("Exception in control callback handler\\n");
+               PySys_WriteStderr("Exception in control callback %x handler\\n", which);
        return rv;
 }
 
@@ -238,12 +244,50 @@ myidleproc(ControlHandle control)
        Py_XDECREF(rv);
 }
 
+static pascal ControlPartCode
+myhittestproc(ControlHandle control, Point where)
+{
+       ControlObject *ctl_obj;
+       PyObject *arglist, *rv;
+       short c_rv = -1;
+
+       ctl_obj = (ControlObject *)CtlObj_WhichControl(control);
+       arglist = Py_BuildValue("OO&", ctl_obj, PyMac_BuildPoint, &where);
+       rv = callcallback(ctl_obj, kControlUserPaneHitTestProcTag, arglist);
+       Py_XDECREF(arglist);
+       /* Ignore errors, nothing we can do about them */
+       if ( rv )
+               PyArg_Parse(rv, "h", &c_rv);
+       Py_XDECREF(rv);
+       return (ControlPartCode)c_rv;
+}
+
+static pascal ControlPartCode
+mytrackingproc(ControlHandle control, Point startPt, ControlActionUPP actionProc)
+{
+       ControlObject *ctl_obj;
+       PyObject *arglist, *rv;
+       short c_rv = -1;
+
+       ctl_obj = (ControlObject *)CtlObj_WhichControl(control);
+       /* We cannot pass the actionProc without lots of work */
+       arglist = Py_BuildValue("OO&", ctl_obj, PyMac_BuildPoint, &startPt);
+       rv = callcallback(ctl_obj, kControlUserPaneTrackingProcTag, arglist);
+       Py_XDECREF(arglist);
+       if ( rv )
+               PyArg_Parse(rv, "h", &c_rv);
+       Py_XDECREF(rv);
+       return (ControlPartCode)c_rv;
+}
+
 """
 
 initstuff = initstuff + """
 mytracker_upp = NewControlActionProc(mytracker);
 mydrawproc_upp = NewControlUserPaneDrawProc(mydrawproc);
 myidleproc_upp = NewControlUserPaneDrawProc(myidleproc);
+myhittestproc_upp = NewControlUserPaneHitTestProc(myhittestproc);
+mytrackingproc_upp = NewControlUserPaneTrackingProc(mytrackingproc);
 """
 
 class MyObjectDefinition(ObjectIdentityMixin, GlobalObjectDefinition):