--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ext/amaretto/glcanvas/inc/glcanvas.h Tue Feb 16 10:07:05 2010 +0530
@@ -0,0 +1,164 @@
+/*
+ * Copyright (c) 2006-2009 Nokia Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __GLCANVAS_MODULE_H
+#define __GLCANVAS_MODULE_H
+
+#include "Python.h"
+
+#include "symbian_python_ext_util.h"
+#include <stdlib.h>
+
+#include <GLES/gl.h>
+#include <GLES/egl.h>
+#include "coecntrl.h"
+#include <aknappui.h>
+#include "CAppuifwEventBindingArray.h"
+#include "Python_appui.h"
+
+#define GLCANVAS_DEFAULT_DEPTH_SIZE (16)
+
+// UI Control api name. If this ever changes in appui/appuifw/appuifwmodule.cpp, it must be changed here also!
+#define UICONTROLAPI_NAME "_uicontrolapi"
+#define MY_APPUI ((get_app())->ob_data->appui)
+
+// comment this out to disable debug messages
+#define DEBUG_GLCANVAS
+
+#define DEBUGMSG(msg) do { RDebug::Print(_L(msg)); } while(0)
+#define DEBUGMSG1(msg,arg1) do { RDebug::Print(_L(msg),arg1); } while(0)
+#define DEBUGMSG2(msg,arg1,arg2) do { RDebug::Print(_L(msg),arg1,arg2); } while(0)
+#define DEBUGMSG3(msg,arg1,arg2,arg3) do { RDebug::Print(_L(msg),arg1,arg2,arg3); } while(0)
+#define DEBUGMSG4(msg,arg1,arg2,arg3,arg4) do { RDebug::Print(_L(msg),arg1,arg2,arg3,arg4); } while(0)
+
+#define RETURN_PYNONE do { Py_INCREF(Py_None); return Py_None; } while(0)
+
+#ifndef EKA2
+class CGLCanvas : public CCoeControl
+#else
+NONSHARABLE_CLASS(CGLCanvas) : public CCoeControl
+#endif
+{
+public:
+ CGLCanvas(PyObject *, PyObject *, PyObject *);
+ int CreateContext(EGLint *attrib_list);
+ virtual ~CGLCanvas();
+ virtual void ConstructL(const TRect& aRect,
+ const CCoeControl* aParent, CAmarettoAppUi* aAppui);
+private: //data
+ // The display where the graphics are drawn
+ EGLDisplay iEglDisplay;
+
+ // The rendering context
+ EGLContext iEglContext;
+
+ // The window where the graphics are drawn
+ EGLSurface iEglSurface;
+
+public: //data
+ // Frame counter variable
+ int iFrame;
+ void swapBuffers();
+ void makeCurrent();
+ int iOpenGLInitialized;
+ void redraw() const;
+
+ EGLint *GenerateEglAttributes(PyObject *);
+ PyObject *GetRedrawCallBack();
+ PyObject *GetEventCallBack();
+ PyObject *GetResizeCallBack();
+
+ void SetRedrawCallBack(PyObject *);
+ void SetEventCallBack(PyObject *);
+ void SetResizeCallBack(PyObject *);
+
+protected:
+ virtual void SizeChanged();
+private:
+ virtual void Draw(const TRect& aRect) const;
+ virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,
+ TEventCode aType);
+
+ int GetBufferSize();
+ virtual void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+private:
+ PyObject *iDrawCallback;
+ PyObject *iEventCallback;
+ PyObject *iResizeCallback;
+ const CCoeControl *myParent;
+ CAmarettoAppUi* myAppui;
+};
+
+// Forward declaration
+class CAppuifwEventBindingArray;
+
+struct GLCanvas_object {
+ PyObject_VAR_HEAD
+ CGLCanvas *ob_control;
+ CAppuifwEventBindingArray *ob_event_bindings;
+ ControlName control_name;
+ // NOTE: fields above this line must match struct _control_object!
+ PyObject *ob_drawcallback;
+ PyObject *ob_eventcallback;
+ PyObject *ob_resizecallback;
+};
+
+/** Borrowed from appuifwmodule.cpp
+ * appuifw.Application object type representation
+ */
+
+struct Application_data;
+
+struct Application_data {
+ Application_data(CAmarettoAppUi* aAppUi, Application_object* /*aOp*/):
+ appui(aAppUi)/*, ob_exit_key_cb(aOp,aAppUi), ob_event_cb(aOp,aAppUi),
+ ob_command_cb(aOp,aAppUi), ob_menu_cb(aOp,aAppUi),
+ ob_tab_cb(aOp,aAppUi), ob_focus_cb(aOp,aAppUi)*/
+ {
+ rsc_offset = (-1);
+ //appui->SetMenuDynInitFunc(&(ob_menu_cb));
+ //appui->SetMenuCommandFunc(&(ob_command_cb));
+ }
+ ~Application_data() {
+ if (rsc_offset != (-1))
+ (CEikonEnv::Static())->DeleteResourceFile(rsc_offset);
+ /*appui->SetMenuDynInitFunc(NULL);
+ appui->SetMenuCommandFunc(NULL);
+ appui->SetExitFunc(NULL);
+ appui->SetHostedControl(NULL, NULL);
+ appui->SetFocusFunc(NULL);*/
+ }
+
+ CAmarettoAppUi* appui;
+ TInt rsc_offset;
+ /*CAmarettoCallback ob_exit_key_cb;
+ CAmarettoCallback ob_event_cb;
+ CAmarettoCallback ob_command_cb;
+ CAmarettoCallback ob_menu_cb;
+ CAmarettoCallback ob_tab_cb;
+ CAmarettoCallback ob_focus_cb;*/
+};
+
+
+// Prototypes for functions in glcanvas_util.cpp
+Application_object* get_app();
+TInt app_callback_handler(void *func, void *arg);
+void *glcanvas_alloc(size_t size);
+void glcanvas_free(void *ptr);
+void _uicontrolapi_decref(void *control_obj);
+
+
+
+#endif // __GLCANVAS_MODULE_H