hackathon-dev #1
							
								
								
									
										58
									
								
								scripts/demo1.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										58
									
								
								scripts/demo1.py
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,58 @@
 | 
				
			|||||||
 | 
					# Demo script that implements a simple drawing program
 | 
				
			||||||
 | 
					import upiwin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Save off some color values.
 | 
				
			||||||
 | 
					WHITE = upiwin.rgb(255, 255, 255)
 | 
				
			||||||
 | 
					LTGRAY = upiwin.rgb(204, 204, 204)
 | 
				
			||||||
 | 
					YELLOW = upiwin.rgb(255, 255, 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					hdc = upiwin.DevCtxt(type='screen')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# divide the screen into "drawing" and "command" areas
 | 
				
			||||||
 | 
					drawing_rect = hdc.get_clip_rect()
 | 
				
			||||||
 | 
					command_rect = drawing_rect
 | 
				
			||||||
 | 
					drawing_rect[2] -= 60;
 | 
				
			||||||
 | 
					command_rect[0] = drawing_rect[2] + 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# further divide up the "command" area
 | 
				
			||||||
 | 
					cmd1_rect = command_rect
 | 
				
			||||||
 | 
					cmd2_rect = command_rect
 | 
				
			||||||
 | 
					cmd3_rect = command_rect
 | 
				
			||||||
 | 
					cmd4_rect = command_rect
 | 
				
			||||||
 | 
					cmd1_rect[3] = 60;
 | 
				
			||||||
 | 
					cmd2_rect[1] = 60;
 | 
				
			||||||
 | 
					cmd2_rect[3] = 120;
 | 
				
			||||||
 | 
					cmd3_rect[1] = 120;
 | 
				
			||||||
 | 
					cmd3_rect[3] = 180;
 | 
				
			||||||
 | 
					cmd4_rect[1] = 180;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def point_in_rect(rect, x, y):
 | 
				
			||||||
 | 
						return (x >= rect[0]) and (x < rect[2]) and (y >= rect[1]) and (y < rect[3])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# --- Initialize and start message loop ---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Draw the basic layout.
 | 
				
			||||||
 | 
					hdc.set_text_color(LTGRAY)
 | 
				
			||||||
 | 
					hdc.rectangle(cmd1_rect[0], cmd1_rect[1], cmd1_rect[2], cmd1_rect[3])
 | 
				
			||||||
 | 
					hdc.rectangle(cmd2_rect[0], cmd2_rect[1], cmd2_rect[2], cmd2_rect[3])
 | 
				
			||||||
 | 
					hdc.rectangle(cmd3_rect[0], cmd3_rect[1], cmd3_rect[2], cmd3_rect[3])
 | 
				
			||||||
 | 
					hdc.rectangle(cmd4_rect[0], cmd4_rect[1], cmd4_rect[2], cmd4_rect[3])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Main message loop
 | 
				
			||||||
 | 
					msg = {}
 | 
				
			||||||
 | 
					while upiwin.get_message(msg):
 | 
				
			||||||
 | 
						if msg['message'] == upiwin.WM_TOUCHCLICK:
 | 
				
			||||||
 | 
							if point_in_rect(cmd1_rect, msg['attrs'][0], msg['attrs'][1]):
 | 
				
			||||||
 | 
								print("Click command 1")
 | 
				
			||||||
 | 
							elif point_in_rect(cmd2_rect, msg['attrs'][0], msg['attrs'][1]):
 | 
				
			||||||
 | 
								print("Click command 2")
 | 
				
			||||||
 | 
							elif point_in_rect(cmd3_rect, msg['attrs'][0], msg['attrs'][1]):
 | 
				
			||||||
 | 
								print("Click command 3")
 | 
				
			||||||
 | 
							elif point_in_rect(cmd4_rect, msg['attrs'][0], msg['attrs'][1]):
 | 
				
			||||||
 | 
								print("Click command 4")
 | 
				
			||||||
 | 
						elif msg['message'] == upiwin.WM_HWBUTTONCLICK:
 | 
				
			||||||
 | 
							if msg['attrs'][0] == 4:			# Button 4 = Exit app
 | 
				
			||||||
 | 
								upiwin.post_quit_message(0)
 | 
				
			||||||
@ -2,7 +2,7 @@ BUILDUTILS=../buildutils
 | 
				
			|||||||
RESOURCES=../resources
 | 
					RESOURCES=../resources
 | 
				
			||||||
SPLASHSCREEN=splash-vmwcblk.png
 | 
					SPLASHSCREEN=splash-vmwcblk.png
 | 
				
			||||||
 | 
					
 | 
				
			||||||
OBJS=main.o sysinput.o ep_init.o ep_upiwin.o ep_backlight.o ep_msg.o ep_devctxt.o ep_bitmap.o \
 | 
					OBJS=main.o sysinput.o ep_init.o ep_upiwin.o ep_backlight.o ep_msg.o ep_graphics.o ep_devctxt.o ep_bitmap.o \
 | 
				
			||||||
     ep_upiwin_tmp.o ep_util.o fbinit.o rect.o gfxobj.o devctxt.o dc_screen.o fontengine.o \
 | 
					     ep_upiwin_tmp.o ep_util.o fbinit.o rect.o gfxobj.o devctxt.o dc_screen.o fontengine.o \
 | 
				
			||||||
	 bitmap.o fbprimitive.o log.o gpio.o msg_queue.o time_func.o config.o splash.o
 | 
						 bitmap.o fbprimitive.o log.o gpio.o msg_queue.o time_func.o config.o splash.o
 | 
				
			||||||
LIBS=-lpython3.7m -lcrypt -lfreetype -lbcm2835 -lpthread -ldl -lutil -lm
 | 
					LIBS=-lpython3.7m -lcrypt -lfreetype -lbcm2835 -lpthread -ldl -lutil -lm
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										13
									
								
								src/ep_graphics.c
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										13
									
								
								src/ep_graphics.c
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					#define PY_SSIZE_T_CLEAN
 | 
				
			||||||
 | 
					#include <Python.h>
 | 
				
			||||||
 | 
					#include "wintype.h"
 | 
				
			||||||
 | 
					#include "gfxtype.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PyObject *Epython_rgb(PyObject *self, PyObject *args)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  UINT32 r, g, b;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  if (!PyArg_ParseTuple(args, "kkk", &r, &g, &b))
 | 
				
			||||||
 | 
					    return NULL;
 | 
				
			||||||
 | 
					  return PyLong_FromUnsignedLong(RGB(r, g, b));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -23,6 +23,9 @@ static PyMethodDef UPIWINMethods[] = {
 | 
				
			|||||||
   "Retrieves a message from the message queue, blocking if necessary."},
 | 
					   "Retrieves a message from the message queue, blocking if necessary."},
 | 
				
			||||||
  {"post_quit_message", Epython_post_quit_message, METH_VARARGS,
 | 
					  {"post_quit_message", Epython_post_quit_message, METH_VARARGS,
 | 
				
			||||||
   "Posts a WM_QUIT message to the message queue, with an exit code."},
 | 
					   "Posts a WM_QUIT message to the message queue, with an exit code."},
 | 
				
			||||||
 | 
					  /* Graphics functions */
 | 
				
			||||||
 | 
					  {"rgb", Epython_rgb, METH_VARARGS,
 | 
				
			||||||
 | 
					   "Creates a color value from separate red, green, and blue indexes."},
 | 
				
			||||||
  {NULL, NULL, 0, NULL}
 | 
					  {NULL, NULL, 0, NULL}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -22,5 +22,7 @@ extern PyObject *Epython_set_backlight_level(PyObject *self, PyObject *args);
 | 
				
			|||||||
extern PyObject *Epython_get_message(PyObject *self, PyObject *args);
 | 
					extern PyObject *Epython_get_message(PyObject *self, PyObject *args);
 | 
				
			||||||
extern PyObject *Epython_post_quit_message(PyObject *self, PyObject *args);
 | 
					extern PyObject *Epython_post_quit_message(PyObject *self, PyObject *args);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* ep_graphics.c */
 | 
				
			||||||
 | 
					extern PyObject *Epython_rgb(PyObject *self, PyObject *args);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* __EP_UPIWIN_H_INCLUDED */
 | 
					#endif /* __EP_UPIWIN_H_INCLUDED */
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user