Welcome to mirror list, hosted at ThFree Co, Russian Federation.

Draw.py « doc « api2_2x « python « blender « source - git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 18234754315057faad02f199517914f0f6aad9f0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
# Blender.Draw module and the Button PyType object

"""
The Blender.Draw submodule.

Draw
====

B{New}:
 - access to ASCII values in L{events<Register>} callbacks;
 - 'large' fonts for L{Text} and L{GetStringWidth}.
 - Pop-up blocks with L{PupBlock}
 - Color Picker button with L{ColorPicker}

This module provides access to a B{windowing interface} in Blender.  Its widgets
include many kinds of buttons: push, toggle, menu, number, string, slider,
scrollbar, plus support for text drawing.  It also includes keyboard keys and
mouse button code values in its dictionary, see a list after this example.

Example::
 import Blender
 from Blender import Draw, BGL

 mystring = ""
 mymsg = ""
 toggle = 0

 def event(evt, val):    # the function to handle input events
   global mystring, mymsg

   if not val:  # val = 0: it's a key/mbutton release
     if evt in [Draw.LEFTMOUSE, Draw.MIDDLEMOUSE, Draw.RIGHTMOUSE]:
       mymsg = "You released a mouse button."
       Draw.Redraw(1)
     return

   if evt == Draw.ESCKEY:
     Draw.Exit()                 # exit when user presses ESC
     return

   elif Draw.AKEY <= evt <= Draw.ZKEY: mystring += chr(evt)
   elif evt == Draw.SPACEKEY: mystring += ' '
   elif evt == Draw.BACKSPACEKEY and len(mystring):
     mystring = mystring[:-1]
   else: return # no need to redraw if nothing changed

   Draw.Redraw(1)

 def button_event(evt):  # the function to handle Draw Button events
   global mymsg, toggle
   if evt == 1:
     mymsg = "You pressed the toggle button."
     toggle = 1 - toggle
     Draw.Redraw(1)

 def gui():              # the function to draw the screen
   global mystring, mymsg, toggle
   if len(mystring) > 90: mystring = ""
   BGL.glClearColor(0,0,1,1)
   BGL.glClear(BGL.GL_COLOR_BUFFER_BIT)
   BGL.glColor3f(1,1,1)
   Draw.Toggle("Toggle", 1, 10, 10, 55, 20, toggle,"A toggle button")
   BGL.glRasterPos2i(72, 16)
   if toggle: toggle_state = "down"
   else: toggle_state = "up"
   Draw.Text("The toggle button is %s." % toggle_state, "small")
   BGL.glRasterPos2i(10, 230)
   Draw.Text("Type letters from a to z, ESC to leave.")
   BGL.glRasterPos2i(20, 200)
   Draw.Text(mystring)
   BGL.glColor3f(1,0.4,0.3)
   BGL.glRasterPos2i(340, 70)
   Draw.Text(mymsg, "tiny")

 Draw.Register(gui, event, button_event)  # registering the 3 callbacks

All available events:
  - ACCENTGRAVEKEY
  - AKEY
  - BACKSLASHKEY
  - BACKSPACEKEY
  - BKEY
  - CAPSLOCKKEY
  - CKEY
  - COMMAKEY
  - DELKEY
  - DKEY
  - DOWNARROWKEY
  - EIGHTKEY
  - EKEY
  - ENDKEY
  - EQUALKEY
  - ESCKEY
  - F10KEY
  - F11KEY
  - F12KEY
  - F1KEY
  - F2KEY
  - F3KEY
  - F4KEY
  - F5KEY
  - F6KEY
  - F7KEY
  - F8KEY
  - F9KEY
  - FIVEKEY
  - FKEY
  - FOURKEY
  - GKEY
  - HKEY
  - HOMEKEY
  - IKEY
  - INPUTCHANGE
  - INSERTKEY
  - JKEY
  - KEYBD
  - KKEY
  - LEFTALTKEY
  - LEFTARROWKEY
  - LEFTBRACKETKEY
  - LEFTCTRLKEY
  - LEFTMOUSE
  - LEFTSHIFTKEY
  - LINEFEEDKEY
  - LKEY
  - MIDDLEMOUSE
  - MINUSKEY
  - MKEY
  - MOUSEX
  - MOUSEY
  - NINEKEY
  - NKEY
  - OKEY
  - ONEKEY
  - PAD0
  - PAD1
  - PAD2
  - PAD3
  - PAD4
  - PAD5
  - PAD6
  - PAD7
  - PAD8
  - PAD9
  - PADASTERKEY
  - PADENTER
  - PADMINUS
  - PADPERIOD
  - PADPLUSKEY
  - PADSLASHKEY
  - PAGEDOWNKEY
  - PAGEUPKEY
  - PAUSEKEY
  - PERIODKEY
  - PKEY
  - QFULL
  - QKEY
  - QUOTEKEY
  - Q_FIRSTTIME
  - RAWKEYBD
  - REDRAW
  - RETKEY
  - RIGHTALTKEY
  - RIGHTARROWKEY
  - RIGHTBRACKETKEY
  - RIGHTCTRLKEY
  - RIGHTMOUSE
  - RIGHTSHIFTKEY
  - RKEY
  - SEMICOLONKEY
  - SEVENKEY
  - SIXKEY
  - SKEY
  - SLASHKEY
  - SPACEKEY
  - TABKEY
  - THREEKEY
  - TIMER0
  - TIMER1
  - TIMER2
  - TIMER3
  - TKEY
  - TWOKEY
  - UKEY
  - UPARROWKEY
  - VKEY
  - WHEELDOWNMOUSE
  - WHEELUPMOUSE
  - WINCLOSE
  - WINFREEZE
  - WINQUIT
  - WINTHAW
  - WKEY
  - XKEY
  - YKEY
  - ZEROKEY
  - ZKEY

@note: function Button has an alias: L{PushButton}.

@warn: B{very important}: if using your script causes "Error totblock"
messages when Blender exits (meaning that memory has been leaked), this may
have been caused by an ignored return value from one of the button types.  To
avoid this, assign created buttons return values to B{global} variables,
instead of ignoring them.  Examples::

	# avoid this, it can cause memory leaks:
	Draw.Toggle(...)
	Draw.Number(...)
	Draw.String(...)
	# this is correct -- assuming the variables are globals:
	my_toggle_button = Draw.Toggle(...)
	my_int_button = Draw.Number(...)
	my_str_button = Draw.String(...)


@warn: Inside the windowing loop (after Draw.Register() has been executed and
before Draw.Exit() is called), don't use the redraw functions from other
modules (Blender and Window).  The Draw submodule has its own Draw.Redraw() and
Draw.Draw() functions that can be used inside the windowing loop.
"""

def Exit():
	"""
	Exit the windowing interface.
	"""

def BeginAlign():
	"""
	Buttons after this function will draw aligned (button layout only).
	"""

def EndAlign():
	"""
	Use after BeginAlign() to stop aligning the buttons (button layout only).
	"""

def UIBlock(draw):
	"""
	This function creates a popup area where buttons, labels, sliders etc can be drawn.
	
	@type draw: function
	@param draw: A function to draw to the popup area, taking no arguments: draw().
	
	@note: The size of the popup will expand to fit the bounds of the buttons created in the draw function.
	@note: Be sure to use the mouse coordinates to position the buttons under the mouse,
		so the popup dosn't exit as soon as it opens.
		The coordinates for buttons start 0,0 at the bottom left hand side of the screen.
	@note: Within this popup, Redraw events and the registered button callback will not work.
		For buttons to run events, use per button callbacks.
	@note: OpenGL drawing functions wont work within this popup, for text use L{Label} rather then L{Text}
	@warning: L{Menu} will not work properly within a UIBlock, this is a limitation with blenders user interface internals.
	"""

def Register(draw = None, event = None, button = None):
	"""
	Register callbacks for windowing.
	@type draw: function
	@type event: function
	@type button: function
	@param draw: A function to draw the screen, taking no arguments: draw().
	@param event: A function to handle keyboard and mouse input events, taking
		two arguments: f(evt, val), where:
			- 'evt' (int) is the event number;
			- 'val' (int) is the value modifier.  If val = 0, the event refers to a
			key or mouse button being released.  Otherwise it's a key/button press.
	@param button: A function to handle Draw Button events, taking one argument:
		f(evt), where:
			- 'evt' is the button number (see the I{event} parameter in L{Button}).
	@note: note that in the example at the beginning of this page Draw.Register
		is called only once.  It's not necessary to re-register the callbacks,
		they will stay until Draw.Exit is called.  It's enough to redraw the
		screen, when a relevant event is caught.
	@note: only during the B{event} callback: the L{Blender}.ascii variable holds
		the ASCII integer value (if it exists and is valid) of the current event.
	"""

def Redraw(after = 0):
	"""
	Queue a redraw event.  Redraw events are buffered so that, regardless of how
	many events are queued, the window only receives one redraw event.
	@type after: int
	@param after: If non-zero, the redraw is processed before other input events.
	"""

def Draw():
	"""
	Force an immediate redraw.  Forced redraws are not buffered.  In other words,
	the window is redrawn once every time this function is called.
	"""

def Create(value):
	"""
	Create a default Button object.
	@type value: int, float, string or 3 floats
	@param value: The value to store in the button.
	@rtype: Blender Button
	@return: The Button created.
	@note: String values must have less then 400 characters.
	"""

def PushButton(name, event, x, y, width, height, tooltip = None, callback = None):
	"""
	Create a new (push) Button object.
	@type name: string
	@param name: The string to display on the button.
	@type event: int
	@param event: The event number to pass to the button event function when
		activated.
	@type x: int
	@type y: int
	@param x: The lower left x (horizontal) coordinate of the button.
	@param y: The lower left y (vertical) coordinate of the button.
	@type width: int
	@type height: int
	@param width: The button width.
	@param height: The button height.
	@type tooltip: string
	@param tooltip: The button's tooltip (the string that appears when the mouse
		is kept over the button).
	@type callback: function
	@param callback: an optional argument so this button can have its own
		callback function. the function will run whenever this button is pressed.
		This function must accept 2 arguments (event, val).
	@note: This function used to be called only "Button".  We added an
		alternative alias to avoid a name clash with the L{Button} class/type that
		caused trouble in this documentation's generation.  The old name shouldn't
		be deprecated, use Button or PushButton (better) at your choice.
	"""

def PupMenu(name, maxrow = None):
	"""
	Create a pop-up menu.

	The menu options are specified through the 'name' parameter, like with
	L{Menu}: options are followed by a format code and separated by the '|'
	character.  Valid format codes are:
		- %t - The option should be used as the title of the pop-up;
		- %l - insert a separating line (only works if 'maxrow' isn't given);
		- %xB{N} - Chosen this option, PupMenu should return the integer B{N}.

	Example::
		name = "OK?%t|QUIT BLENDER"  # if no %xN int is set, indices start from 1
		result = Draw.PupMenu(name)
		if result:
			Draw.PupMenu("Really?%t|Yes|No")

	@type name: string
	@param name: The format string to define the contents of the button.
	@type maxrow: int
	@param maxrow: The maximum number of rows for each column in the pop-up.
	@rtype: int
	@return: the chosen entry number or -1 if none was chosen.
	"""

def PupTreeMenu( menu ):
	"""
	Create a popup menu tree.
	
	Each item in the list is a menu item - (str, event), separator - None or submenu - (str, [...]).
	
	Submenus list uses the same syntax as the menu list.

	Example::
		result = Draw.PupTreeMenu( [ ("Menu Item 1", 10), ("Menu Item 2", 12), ("SubMenu", [("Menu Item 3", 100), ("MenuItem4", 101) ]  ) ] )
	
	@type menu: string
	@param menu: A menu list
	@rtype: int
	@return: the chosen entry number or -1 if none was chosen.
	"""

def PupIntInput(text, default, min, max):
	"""
	Create an integer number input pop-up.

	This allows python to use Blender's integer number pop-up input.

	Example::
		default = 50
		min = 0
		max = 100

		msg = "Set this value between 0 and 100"
		result = Draw.PupIntInput(msg, default, min, max)
		if result != None:
			print result
		else:
			print 'no user input'

	@type text: string
	@param text: The text that is displayed in the pop-up.
	@type default: int
	@param default: The value that the pop-up is set to initially.
	@type min: int
	@param min: The lowest value the pop-up will allow.
	@type max: int
	@param max: The highest value the pop-up will allow.
	@rtype: int
	@return: the number chosen or None if none was chosen.
	"""

def PupFloatInput(text, default, min, max, clickStep, floatLen):
	"""
	Create a floating point number input pop-up.

	This allows python to use Blender's floating point pop-up input.

	Example::
		default = 50
		min = 0.0
		max = 10.0
		clickStep = 100
		floatLen = 3

		msg = "Set this value between 0 and 100"
		result = Draw.PupFloatInput(msg, default, min, max, clickStep, floatLen)
		if result != None:
			print result
		else:
			print 'no user input'
	
	@type text: string
	@param text: The text that is displayed in the pop-up.
	@type default: float
	@param default: The value that the pop-up is set to initially.
	@type min: float
	@param min: The lowest value the pop-up will allow.
	@type max: float
	@param max: The highest value the pop-up will allow.
	@type clickStep: int
	@param clickStep: How much is incremented per user click, 100 will increment 1.0, 10 will increment 0.1 etc.
	@type floatLen: int
	@param floatLen: The number of decimal places to display, between 2 and 4.
	@rtype: float
	@return: the number chosen or None if none was chosen.
	"""

def PupStrInput(text, default, max = 20):
	"""
	Create a string input pop-up.

	This allows python to use Blender's string pop-up input.

	Example::
		Blender.Draw.PupStrInput("Name:", "untitled", 25)
	
	@type text: string
	@param text: The text that is displayed in the pop-up.
	@type default: string
	@param default: The value that the pop-up is set to initially.  If it's longer
		then 'max', it's truncated.
	@type max: int
	@param max: The most characters the pop-up input will allow.  If not given
		it defaults to 20 chars.  It should be in the range [1, 100].
	@rtype: string
	@return: The text entered by the user or None if none was chosen.
	"""

def PupBlock(title, sequence):
	"""
	Display a pop-up block.
	
	Possible formats for the items in the sequence parameter.
	(Value are objects created with L{Create})
		- string:	Defines a label
		- (string, Value, string): Defines a toggle button. The first string is the text on the button, the optional second string is the tooltip.
		- (string, Value, min, max, string): Defines a numeric or string button, depending on the content of Value.  The first string is the text on the button, the optional second string is the tooltip. I{For string, max is the maximum length of the string and min is unused.}
		
	Example::
		import Blender
		
		text = Blender.Draw.Create("short text")
		f = Blender.Draw.Create(1.0)
		i = Blender.Draw.Create(2)
		tog = Blender.Draw.Create(0)
		
		block = []
		
		block.append(("Name: ", text, 0, 30, "this is some tool tip"))
		block.append("Some Label")
		block.append(("Value: ", f, 0.0, 100.0))
		block.append(("Value: ", i, 0, 100))
		block.append(("Option", tog, "another tooltip"))
		
		retval = Blender.Draw.PupBlock("PupBlock test", block)
		
		print "PupBlock returned", retval
		
		print "text\\t", text
		print "float\\t", f
		print "int\\t", i
		print "toggle\\t", tog

	@warning: On cancel, the Value objects are brought back to there initial values except for string values which will still contain the modified values.
	@type title: string
	@param title: The title of the block.
	@param sequence: A sequence defining what the block contains.
		The order of the list is the order of appearance, from top down.
	@rtype: int
	@return: 1 if the pop-up is confirmed, 0 otherwise
	"""

def Menu(name, event, x, y, width, height, default, tooltip = None, callback = None):
	"""
	Create a new Menu Button object.

	The menu options are specified through the 'name' of the button.  Options are
	I{followed} by a format code and separated by the '|' (pipe) character.  Valid
	format codes are:
		- %t - The option should be used as the title;
		- %l - Insert a separating line;
		- %xB{N} - The option should set the integer B{N} in the button value.

	Example::
		name = "The Title %t|First Entry %x1|Second Entry %x2|Third Entry %x3"
		menu = Draw.Menu(name, 2, 60, 120, 200, 40, 3, "Just a test menu.")
		# note that, since default = 3, the "Third Entry"
		# will appear as the default choice in the Menu.

	@type name: string
	@param name: The format string to define the contents of the button.
	@type event: int
	@param event: The event number to pass to the button event function when
		activated.
	@type x: int
	@type y: int
	@param x: The lower left x (horizontal) coordinate of the button.
	@param y: The lower left y (vertical) coordinate of the button.
	@type width: int
	@type height: int
	@param width: The button width.
	@param height: The button height.
	@type default: int
	@param default: The number of the option to be selected by default.
	@type tooltip: string
	@param tooltip: The button's tooltip (the string that appears when the mouse
		is kept over the button).
	@type callback: function
	@param callback: an optional argument so this button can have its own
		callback function. the function will run whenever this button is pressed.
		This function must accept 2 arguments (event, val).
	@rtype: Blender Button
	@return: The Button created.
	"""

def Toggle(name, event, x, y, width, height, default, tooltip = None, callback = None):
	"""
	Create a new Toggle Button object.
	@type name: string
	@param name: The string to display on the button.
	@type event: int
	@param event: The event number to pass to the button event function when
		activated.
	@type x: int
	@type y: int
	@param x: The lower left x (horizontal) coordinate of the button.
	@param y: The lower left y (vertical) coordinate of the button.
	@type width: int
	@type height: int
	@param width: The button width.
	@param height: The button height.
	@type default: int
	@param default:  The value specifying the default state:
		(0 for "up", 1 for "down").
	@type tooltip: string
	@param tooltip: The button's tooltip (the string that appears when the mouse
		is kept over the button).
	@type callback: function
	@param callback: an optional argument so this button can have its own
		callback function. the function will run whenever this button is pressed.
		This function must accept 2 arguments (event, val).
	@rtype: Blender Button
	@return: The Button created.
	"""

def Slider(name, event, x, y, width, height, initial, min, max, realtime = 1,
			tooltip = None, callback = None):
	"""
	Create a new Slider Button object.
	@type name: string
	@param name: The string to display on the button.
	@type event: int
	@param event: The event number to pass to the button event function when
		activated.
	@type x: int
	@type y: int
	@param x: The lower left x (horizontal) coordinate of the button.
	@param y: The lower left y (vertical) coordinate of the button.
	@type width: int
	@type height: int
	@param width: The button width.
	@param height: The button height.
	@type initial: int or float
	@type min: int or float
	@type max: int or float
	@param initial:  The initial value.
	@param min:  The minimum value.
	@param max:  The maximum value.
	@type realtime: int
	@param realtime: If non-zero (the default), the slider will emit events as
		it is edited.
	@type tooltip: string
	@param tooltip: The button's tooltip (the string that appears when the mouse
		is kept over the button).
		
	@type callback: function
	@param callback: an optional argument so this button can have its own
		callback function. the function will run whenever this button is pressed.
		This function must accept 2 arguments (event, val).
	@rtype: Blender Button
	@return: The Button created.
	@note: slider callbacks will not work if the realtime setting is enabled.
	"""

#def Scrollbar(event, x, y, width, height, initial, min, max, realtime = 1,
#           tooltip = None):
#  """
#  Create a new Scrollbar Button object.
#  @type event: int
#  @param event: The event number to pass to the button event function when
#      activated.
#  @type x: int
#  @type y: int
#  @param x: The lower left x (horizontal) coordinate of the button.
#  @param y: The lower left y (vertical) coordinate of the button.
#  @type width: int
#  @type height: int
#  @param width: The button width.
#  @param height: The button height.
#  @type initial: int or float
#  @type min: int or float
#  @type max: int or float
#  @param initial:  The initial value.
#  @param min:  The minimum value.
#  @param max:  The maximum value.
#  @type realtime: int
#  @param realtime: If non-zero (the default), the slider will emit events as
#      it is edited.
#  @type tooltip: string
#  @param tooltip: The button's tooltip (the string that appears when the mouse
#      is kept over the button).
#  @rtype: Blender Button
#  @return: The Button created.
#  """

def ColorPicker(event, x, y, width, height, initial, tooltip = None, callback = None):
	"""
	Create a new Color Picker Button object.
	@type event: int
	@param event: The event number to pass to the button event function when
		activated.
	@type x: int
	@type y: int
	@param x: The lower left x (horizontal) coordinate of the button.
	@param y: The lower left y (vertical) coordinate of the button.
	@type width: int
	@type height: int
	@param width: The button width.
	@param height: The button height.
	@type initial: 3-float tuple
	@param initial:  The initial color value. All values must be between 0 and 1
	@type tooltip: string
	@param tooltip: The button's tooltip (the string that appears when the mouse
		is kept over the button).
	@type callback: function
	@param callback: an optional argument so this button can have its own
		callback function. the function will run whenever this button is pressed.
		This function must accept 2 arguments (event, val).
	@rtype: Blender Button
	@return: The Button created.
	@note: The color picker will not work if the Register's event function is None.
	@note: Using the same button variable with more then 1 button at a time will corrupt memory.
	"""

def Normal(event, x, y, width, height, initial, tooltip = None, callback = None):
	"""
	Create a new Normal button, this allows you to set a 3d vector by rotating a sphere.
	@type event: int
	@param event: The event number to pass to the button event function when
		activated.
	@type x: int
	@type y: int
	@param x: The lower left x (horizontal) coordinate of the button.
	@param y: The lower left y (vertical) coordinate of the button.
	@type width: int
	@type height: int
	@param width: The button width - non square normal buttons .
	@param height: The button height.
	@type initial: 3-float tuple
	@param initial:  The initial vector value.
	@type tooltip: string
	@param tooltip: The button's tooltip (the string that appears when the mouse
		is kept over the button).
	@type callback: function
	@param callback: an optional argument so this button can have its own
		callback function. the function will run whenever this button is pressed.
		This function must accept 2 arguments (event, val).
	@rtype: Blender Button
	@return: The Button created.
	@note: The normal button will not work if the Register's event function is None.
	@note: Using the same button variable with more then 1 button at a time will corrupt memory.
	"""

def Number(name, event, x, y, width, height, initial, min, max, tooltip = None, callback = None):
	"""
	Create a new Number Button object.
	@type name: string
	@param name: The string to display on the button.
	@type event: int
	@param event: The event number to pass to the button event function when
		activated.
	@type x: int
	@type y: int
	@param x: The lower left x (horizontal) coordinate of the button.
	@param y: The lower left y (vertical) coordinate of the button.
	@type width: int
	@type height: int
	@param width: The button width.
	@param height: The button height.
	@type initial: int or float
	@type min: int or float
	@type max: int or float
	@param initial:  The initial value.
	@param min:  The minimum value.
	@param max:  The maximum value.
	@type tooltip: string
	@param tooltip: The button's tooltip (the string that appears when the mouse
		is kept over the button).
	@type callback: function
	@param callback: an optional argument so this button can have its own
		callback function. the function will run whenever this button is pressed.
		This function must accept 2 arguments (event, val).
	@rtype: Blender Button
	@return: The Button created.

	I{B{Example:}}

	This example draws a single floating point value::
		from Blender import Draw
		b= Draw.Create(0.0) # Data for floating point button
		def bevent(evt):
			print 'My Button event:', evt
		def gui():
			global b
			b= Draw.Number('value: ', 1000, 0,0, 200, 20, b.val, 0,10, 'some text tip')

		Draw.Register(gui, None, bevent) # we are not going to worry about keyboard and mouse events
	"""


def String(name, event, x, y, width, height, initial, length, tooltip = None, callback = None):
	"""
	Create a new String Button object.
	@type name: string
	@param name: The string to display on the button.
	@type event: int
	@param event: The event number to pass to the button event function when
		activated.
	@type x: int
	@type y: int
	@param x: The lower left x (horizontal) coordinate of the button.
	@param y: The lower left y (vertical) coordinate of the button.
	@type width: int
	@type height: int
	@param width: The button width.
	@param height: The button height.
	@type initial: string
	@param initial: The string to display initially.
	@type length: int
	@param length: The maximum input length.
	@type tooltip: string
	@param tooltip: The button's tooltip (the string that appears when the mouse
		is kept over the button).
	@type callback: function
	@param callback: an optional argument so this button can have its own
		callback function. the function will run whenever this button is pressed.
		This function must accept 2 arguments (event, val).
	@rtype: Blender Button
	@return: The Button created.
	"""

def GetStringWidth(string, fontsize = 'normal'):
	"""
	Get the width in pixels of a string.
	@type string: string
	@param string: A string.
	@type fontsize: string
	@param fontsize: The size of the font: 'large', 'normal', 'normalfix', 'small' or 'tiny'.
	@rtype: int
	@return: The width of I{string} with the chosen I{fontsize}.
	"""

def Text(string, fontsize = 'normal'):
	"""
	Draw a string on the screen.

	Text location is set using the OpenGL raster location functions L{BGL.glRasterPos} before the text is drawn.
	This sets the text location from the lower left corner of the current window.

	Text color is set using the OpenGL color functions L{BGL.glColor} before the text is drawn.

	@type string: string
	@param string: The text string to draw.
	@type fontsize: string
	@param fontsize: The size of the font: 'large', 'normal', 'normalfix', 'small' or 'tiny'.
	@rtype: int
	@return: The width of I{string} drawn with the chosen I{fontsize}.
	@note: For drawing text in the 3d view see the workaround in L{BGL.glRasterPos}
	"""

def Label(string, x, y, w, h):
	"""
	Draw a text lable on the screen.

	@type string: string
	@param string: The text string to draw.
	@rtype: None
	@return: None
	"""

def Image(image, x, y, zoomx=1.0, zoomy=1.0, clipx=0, clipy=0, clipw=-1, cliph=-1):
	"""
	Draw an image on the screen.

	The image is drawn at the location specified by the coordinates (x,y).  A
	pair of optional zoom factors (in horizontal and vertical directions) can
	be applied to the image as it is drawn, and an additional clipping rectangle
	can be applied to extract a particular sub-region of the image to draw.

	Note that the clipping rectangle is given in image space coordinates.  In
	image space, the origin is located at the bottom left, with x coordinates 
	increasing to the right and y coordinates increasing upwards.  No matter 
	where the clipping rectangle is placed in image space, the lower-left pixel 
	drawn on the screen is always placed at the coordinates (x,y).  The
	clipping rectangle is itself clipped to the dimensions of the image.  If
	either the width or the height of the clipping rectangle are negative then
	the corresponding dimension (width or height) is set to include as much of 
	the image as possible.

	For drawing images with alpha blending with the background you will need to enable blending as shown in the example.
	
	Example::
		import Blender
		from Blender import BGL, Image, Draw
		
		myimage = Image.Load('myimage.png')
		
		def gui():
			BGL.glEnable( BGL.GL_BLEND ) # Only needed for alpha blending images with background.
			BGL.glBlendFunc(BGL.GL_SRC_ALPHA, BGL.GL_ONE_MINUS_SRC_ALPHA) 
		
			Draw.Image(myimage, 50, 50)
		
			BGL.glDisable( BGL.GL_BLEND )
		def event(evt, val):
			if evt == Draw.ESCKEY:
				Draw.Exit()
		
		Draw.Register(gui, event, None)

	@type image: Blender.Image
	@param image: The image to draw.
	@type x: int
	@param x: The lower left x (horizontal) position of the origin of the image.
	@type y: int
	@param y: The lower left y (vertical) position of the origin of the image.
	@type zoomx: float
	@param zoomx: The x (horizontal) zoom factor to use when drawing the image.
	@type zoomy: float
	@param zoomy: The y (vertical) zoom factor to use when drawing the image.
	@type clipx: int
	@param clipx: The lower left x (horizontal) origin of the clipping rectangle
				  within the image.  A value of 0 indicates the left of the
				  image.
	@type clipy: int
	@param clipy: The lower left y (vertical) origin of the clipping rectangle
				  within the image.  A value of 0 indicates the bottom of the
				  image.
	@type clipw: int
	@param clipw: The width of the clipping rectangle within the image. If this
				  value is negative then the clipping rectangle includes as much
				  of the image as possible in the x (horizontal) direction.
	@type cliph: int
	@param cliph: The height of the clipping rectangle within the image. If this
				  value is negative then the clipping rectangle includes as much
				  of the image as possible in the y (vertical) direction.
	"""

class Button:
	"""
	The Button object
	=================
		This object represents a button in Blender's GUI.
	@type val: int or float, string or 3-float tuple (depends on button type).
	@ivar val: The button's value.
	"""