News : The level of daily SPAM has reached insane proportions, all registrations are now manual. I ask you to send me an e-mail (john (at) murga (dot) org), to confirm that you want me to create an account for you.


Post Reply  Post Thread 
Pages (2): « First [1] 2 Next > Last »
drawing graphics in murgaLua
Author Message
widged
Junior Member
**


Posts: 35
Group: Registered
Joined: May 2007
Status: Offline
Reputation: 0
Post: #1
drawing graphics in murgaLua

After reading information on drawing functions, I tried this

Code:
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
Visit this user's website Find all posts by this user Quote this message in a reply
mikshaw
Senior Member
****


Posts: 522
Group: Registered
Joined: Apr 2007
Status: Offline
Reputation: 5
Post: #2
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
Find all posts by this user Quote this message in a reply
JohnMurga
Administrator
*******


Posts: 381
Group: Administrators
Joined: Apr 2007
Status: Offline
Reputation: 2
Post: #3
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 :

Code:
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
Visit this user's website Find all posts by this user Quote this message in a reply
JohnMurga
Administrator
*******


Posts: 381
Group: Administrators
Joined: Apr 2007
Status: Offline
Reputation: 2
Post: #4
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 :

Code:
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
Visit this user's website Find all posts by this user Quote this message in a reply
mikshaw
Senior Member
****


Posts: 522
Group: Registered
Joined: Apr 2007
Status: Offline
Reputation: 5
Post: #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):

Quote:
/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
Find all posts by this user Quote this message in a reply
JohnMurga
Administrator
*******


Posts: 381
Group: Administrators
Joined: Apr 2007
Status: Offline
Reputation: 2
Post: #6
RE: drawing graphics in murgaLua

mikshaw Wrote:
That's pretty cool!

OK, what I have now is cooler :-) :-)

mikshaw Wrote:
/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 !!!

Code:
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
Visit this user's website Find all posts by this user Quote this message in a reply
JohnMurga
Administrator
*******


Posts: 381
Group: Administrators
Joined: Apr 2007
Status: Offline
Reputation: 2
Post: #7
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 ;-)

Code:
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
Visit this user's website Find all posts by this user Quote this message in a reply
mikshaw
Senior Member
****


Posts: 522
Group: Registered
Joined: Apr 2007
Status: Offline
Reputation: 5
Post: #8
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
Find all posts by this user Quote this message in a reply
mikshaw
Senior Member
****


Posts: 522
Group: Registered
Joined: Apr 2007
Status: Offline
Reputation: 5
Post: #9
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
Find all posts by this user Quote this message in a reply
iGame3D
Moderator
***


Posts: 231
Group: Moderators
Joined: Apr 2007
Status: Offline
Reputation: 0
Post: #10
RE: drawing graphics in murgaLua


Code:
--- 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
Visit this user's website Find all posts by this user Quote this message in a reply
Pages (2): « First [1] 2 Next > Last »
Post Reply  Post Thread 

View a Printable Version
Send this Thread to a Friend
Subscribe to this Thread | Add Thread to Favorites

Forum Jump: