drawing graphics in murgaLua
|
Author |
Message |
widged
Junior Member
 
Posts: 35
Group: Registered
Joined: May 2007
Status:
Offline
Reputation: 0
|
drawing graphics in murgaLua
After reading information on drawing functions, I tried this
ww=180 --window width
wh=200 --window height
w=fltk:Fl_Window(ww,wh,"murgaLua Drawing Demo")
w:color(55)
-- fltk void fl_color(Fl_Color)
--- Set the color for all subsequent drawing operations.
fltk.fl_color(96)
-- fltk void fl_rectf(int x, int y, int w, int h)
--- Color a rectangle that exactly fills the given bounding box.
fltk.fl_rect(20,20,50,50)
w:show()
Fl:run()
This doesn't do anything. Not implemented yet? I had come across a list of stuff not implemented yet but cannot find it again.
This post was last modified: 06-05-2007 11:03 PM by widged.
|
|
06-05-2007 11:01 PM |
|
 |
mikshaw
Senior Member
   
Posts: 522
Group: Registered
Joined: Apr 2007
Status:
Offline
Reputation: 5
|
RE: drawing graphics in murgaLua
I tried the same thing several months ago, and it didn't do anything =o)
You're probably right about it not being implemented.
There is a list in the murgaLua distribution archive, doc/other
fl_draw_pixmap
fl_draw_image_mono
fl_draw_image
fl_draw
are listed as unimplemented.
fl_rectf is not listed, but i think it relies on fl_draw?
|
|
06-06-2007 02:00 AM |
|
 |
JohnMurga
Administrator
      
Posts: 381
Group: Administrators
Joined: Apr 2007
Status:
Offline
Reputation: 2
|
RE: drawing graphics in murgaLua
Hi,
Those functions are now supported (I have to update the list), however if you look at the FLTK reference they have to be within a widget (I have to find a workaround, or maybe we can use callbacks) ... Either way here I have a test that produces some amusing results under Win32 :
w=fltk:Fl_Window(0,0, 200, 200, "draw demo")
w:color(55)
fltk.fl_color(96)
b=fltk:Fl_Box(30,30, 100, 100, "Test box")
w:make_current()
w:show()
fltk.fl_rectf(20,20,50,50)
fltk.fl_draw("this is a test",20,18)
fltk.fl_rectf(20,300,50,50)
fltk.fl_draw("this is a test",20,300)
Fl:run()
|
|
06-22-2007 11:39 PM |
|
 |
JohnMurga
Administrator
      
Posts: 381
Group: Administrators
Joined: Apr 2007
Status:
Offline
Reputation: 2
|
RE: drawing graphics in murgaLua
OK, it kinda works now ...
I decided to have a quick go before I got my things ready for this weekend.
Try running this and pressing the ESC key :
function draw_callback(eventValue)
fltk.fl_color(96)
w:make_current()
fltk.fl_rectf(20,20,50,50)
fltk.fl_draw("this is a test",20,18)
end
w=fltk:Fl_Window(0,0, 200, 200, "draw demo")
w:callback(draw_callback)
w:color(55)
w:show()
while 1 do
Fl:check()
end
Now the thing is that we should be hooking this into the idle callback or a timeout for animations, but you'll have to wait for version 0.5 for this kinda stuff :-) ...
Cheers
JohnM
|
|
06-23-2007 12:53 AM |
|
 |
mikshaw
Senior Member
   
Posts: 522
Group: Registered
Joined: Apr 2007
Status:
Offline
Reputation: 5
|
RE: drawing graphics in murgaLua
That's pretty cool!
I'm not sure what the while loop does, though. I had to force the app to close, and received this message (not an error, but a message):
/usr/bin/murgaLua: ./draw.lua:26: interrupted!
stack traceback:
[C]: in function 'check'
./draw.lua:26: in main chunk
[C]: ?
After replacing the loop with Fl:run() it still required a force close (due to the w:callback I assume), but no message.
I'm not sure if the force close is a problem. My window manager doesn't supply the typical titlebar buttons, but uses a key combo instead to close apps. I assume the key combo passes the same signal as a button, though, but it didn't close the app.
Anyway, I was messing around with it for a few minutes trying to see if I could animate it at all. I was able to repeat the draw_callback function with a repeat button just for testing purposes, and set the rectf position a little to the right each time. The drawback is that I didn't spend enough time with it to explore whether or not the previous rectf could be removed. The result was something that resembled a progress bar.
This is going to be a very fun thing to experiment with.
This post was last modified: 06-23-2007 06:03 AM by mikshaw.
|
|
06-23-2007 06:00 AM |
|
 |
JohnMurga
Administrator
      
Posts: 381
Group: Administrators
Joined: Apr 2007
Status:
Offline
Reputation: 2
|
RE: drawing graphics in murgaLua
That's pretty cool!
OK, what I have now is cooler :-) :-)
/usr/bin/murgaLua: ./draw.lua:26: interrupted!
stack traceback:
[C]: in function 'check'
./draw.lua:26: in main chunk
[C]: ?
That is normal as you where interrupting a busy loop ... What I did before was a REAL quick hack.
Here is another hack, but this is pretty cool as drawing now works propperly !!!
function draw_callback(eventValue)
if (Fl:event() == 0)
then
-- 0 means no even I think, so we know we are requesting a draw.
fltk.fl_color(96)
w:make_current()
fltk.fl_rectf(20,20,50,50)
fltk.fl_draw("this is a test",20,18)
else
os.exit(0)
end
end
w=fltk:Fl_Window(0,0, 200, 200, "draw demo")
w:callback(draw_callback)
w:color(55)
w:show()
Fl:wait(1)
w:do_callback()
Fl:run()
This post was last modified: 06-23-2007 07:01 AM by JohnMurga.
|
|
06-23-2007 07:00 AM |
|
 |
JohnMurga
Administrator
      
Posts: 381
Group: Administrators
Joined: Apr 2007
Status:
Offline
Reputation: 2
|
RE: drawing graphics in murgaLua
And now for an animated demo ... Looks a lot nicer on murgaLua 0.5 but you'll have to wait ;-)
function draw_callback(eventValue)
-- Need to look into what event 11 is ...
if (Fl:event() == 0 or Fl:event() == 11)
then
-- 0 means no even I think, so we know we are requesting a draw.
fltk.fl_color(96+counter)
w:make_current()
fltk.fl_rectf(20+counter,20,50,50)
fltk.fl_draw("this is a test",20,80+counter)
fltk.fl_loop( 20,20,80+counter,80+counter, 200,0)
counter=counter+4
if counter > 120 then counter=2 end
else
print(Fl:event())
os.exit(0)
end
end
counter = 0
w=fltk:Fl_Window(0,0, 210, 220, "draw demo")
w:callback(draw_callback)
w:color(55)
w:show()
while 1 do
Fl:check()
w:do_callback()
-- murgaLua.sleep(25) -- Milliseconds, looks really cool (murgaLua 0.5).
-- This sleeps reliably for one second
socket.sleep(1)
end
Fl:run()
|
|
06-23-2007 07:54 AM |
|
 |
mikshaw
Senior Member
   
Posts: 522
Group: Registered
Joined: Apr 2007
Status:
Offline
Reputation: 5
|
RE: drawing graphics in murgaLua
Hmmm.....
The first one exits immediately. If I remove the "else os.exit(0)" then it shows a blank window which doesn't appear to accept any events.
The second one results in a segmentation fault.
murgaLua 0.4.1 on Slackware Linux
|
|
06-23-2007 12:38 PM |
|
 |
mikshaw
Senior Member
   
Posts: 522
Group: Registered
Joined: Apr 2007
Status:
Offline
Reputation: 5
|
RE: drawing graphics in murgaLua
The segfault was related to event 0, apparently.
I changed it to fltk.FL_MOUSEWHEEL and it seems to work.
That's really impressive.
|
|
06-23-2007 01:02 PM |
|
 |
iGame3D
Moderator
  
Posts: 231
Group: Moderators
Joined: Apr 2007
Status:
Offline
Reputation: 0
|
RE: drawing graphics in murgaLua

--- concentric circles at mouse coordinates demo
--- mouse delta distance modifies circle height and width
windowHeight = 280
windowWidth = 320
centerx,centery=windowHeight/2,windowWidth/2
oldpointx,oldpointy=centerx,centery
counter = 96
lineStep=.1 -- increase for geometry
radiusStep=-.4 -- changes concentric density
function circles(cWidth,cHeight)
pi=3.14159
for ring=30,2,radiusStep do
radius=ring
C=2*pi
for cPoint=0,C,lineStep do
x=radius*math.cos(cPoint)*(cWidth/30)
y=radius*math.sin(cPoint)*(cHeight/30)
pointx=math.floor(Fl:event_x()+x)
pointy=math.floor(Fl:event_y()+y)
fltk.fl_loop(pointx,pointy,oldpointx,oldpointy,pointx,pointy)
oldpointx,oldpointy=pointx,pointy
end
end
end
function draw_callback(eventValue)
fltk.fl_color(96+counter)
w:make_current() -- whats this?
flmousex=math.abs(oldpointx-Fl:event_x())
flmousey=math.abs(oldpointy-Fl:event_y())
circles(flmousex,flmousey)
counter=counter+2
if counter > 128 then counter=2 end
end
w=fltk:Fl_Window(0,0, windowWidth, windowHeight, "circles demo")
w:callback(draw_callback)
w:color(55)
w:labelsize(9)
w:show()
while (Fl:event_key() ~= fltk.FL_Escape) do
Fl:check()
w:do_callback()
murgaLua.sleep(35)
end
This post was last modified: 01-06-2014 11:37 PM by iGame3D.
|
|
06-25-2007 03:29 PM |
|
 |
|