Re: wxEuphoria graphics

new topic     » goto parent     » topic index » view thread      » older message » newer message

When performing paint events, you have to create a wxPaintDC. The wxClientDC is for painting outside of a paint event. Changing wxClientDC to wxPaintDC in your code technically fixes all of the issues with nothing showing up. If you comment out all references to HelloBox, you will see your graphics painted on HelloWin as you would expect. The HelloBox was just covering them up. You have to capture the paint event for HelloBox and perform painting against that to see things there. Also, you need to provide a dc parameter to wx_puts() in order for it to pick up the wxPaintDC options (e.g. color).

Here is an updated example that works as I believe you would expect.

include wxeud.e 
 
constant 
    HelloFrame = create( wxFrame, {0, -1, "My First Message", -1, -1, 500, 800} ), 
    HelloWin   = create( wxPanel, {HelloFrame}), 
    HelloBox   = create(wxStaticBox,{HelloWin, -1,"",50,40,400,400,0}) 
constant	 
	BrightRed   = create( wxColour, {255,0,0}) 
	, BrightGreen = create( wxColour, {0,255,0}) 
	, BrightBlue  = create( wxColour, {0,0,255}) 
	, RedPen      = create( wxPen, {BrightRed, 1, wxSOLID}) 
	, GreenPen    = create( wxPen, {BrightGreen, 1, wxSOLID}) 
	, BluePen     = create( wxPen, {BrightBlue, 1, wxSOLID}) 
	, RedBrush  = create( wxBrush, {BrightRed, wxSOLID}) 
	, GreenBrush  = create( wxBrush, {BrightGreen, wxSOLID}) 
	, TransBrush  = create( wxBrush, {BrightGreen, wxTRANSPARENT}) 
	, BlueBrush  = create( wxBrush, {BrightBlue, wxSOLID}) 
constant 
	Arial = create( wxFont, {30,wxDEFAULT,wxNORMAL,wxNORMAL,0,"Arial",wxFONTENCODING_DEFAULT}) 
--	set_font(HelloWin, Arial)	-- I don't think these are necessary, we set fonts in the paint event 
--	set_font(HelloBox, Arial) 
	 
procedure onPaint_HelloWin( atom this, atom event, atom it, atom event_type ) 
	atom dc 
	dc = create(wxPaintDC,{this}) -- should always use 'this' parameter here 
	begin_drawing( dc ) 
		set_font(dc, Arial) 
		set_text_color ( dc, BrightRed ) 
		wx_puts( {HelloWin,10,10,dc}, "Hello, World!")		-- add 'dc' parameter here to get color 
	end_drawing( dc ) 
	delete_instance( dc ) 
end procedure 
set_event_handler( HelloWin, get_id(HelloWin), wxEVT_PAINT, routine_id( "onPaint_HelloWin" )) 
 
procedure onPaint_HelloBox( atom this, atom event, atom it, atom event_type ) 
	atom dc 
	dc = create(wxPaintDC,{this}) -- should always use 'this' parameter here 
	begin_drawing( dc ) 
		set_pen( dc, BrightBlue) set_brush( dc,BlueBrush) 
		draw_rectangle(dc,0,0,400,400)				-- needs to start at 0,0 (relative to HelloBox) 
		set_pen( dc, BrightRed) set_brush( dc,RedBrush) 
		draw_rectangle(dc,100,100,40,40) 
	end_drawing( dc ) 
	delete_instance( dc ) 
end procedure 
set_event_handler( HelloBox, get_id(HelloBox), wxEVT_PAINT, routine_id( "onPaint_HelloBox" )) 
 
wxMain( HelloFrame ) 

-Greg

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu