2. Ring Documentation, Release 1.6
KEY_DOWN = 2
KEY_LEFT = 3
KEY_RIGHT = 4
Key = [false,false,false,false]
TITLE = "Graphics Application"
func start
SetUp()
loadResources()
eventsLoop()
destroy()
func setup
al_init()
al_init_image_addon()
al_set_new_display_flags(ALLEGRO_OPENGL)
display = al_create_display(SCREEN_W,SCREEN_H)
al_set_Window_title(display,TITLE)
al_clear_to_color(al_map_rgb(0,0,0))
event_queue = al_create_event_queue()
al_register_event_source(event_queue,
al_get_display_event_source(display))
ev = al_new_allegro_event()
timeout = al_new_allegro_timeout()
al_init_timeout(timeout, 0.06)
timer = al_create_timer(1.0 / FPS)
al_register_event_source(event_queue,
al_get_timer_event_source(timer))
al_start_timer(timer)
al_install_mouse()
al_register_event_source(event_queue,
al_get_mouse_event_source())
al_install_keyboard()
al_register_event_source(event_queue,
al_get_keyboard_event_source())
func eventsLoop
while true
al_wait_for_event_until(event_queue, ev, timeout)
switch al_get_allegro_event_type(ev)
on ALLEGRO_EVENT_DISPLAY_CLOSE
exit
on ALLEGRO_EVENT_TIMER
redraw = true
on ALLEGRO_EVENT_MOUSE_AXES
mouse_x = al_get_allegro_event_mouse_x(ev)
mouse_y = al_get_allegro_event_mouse_y(ev)
on ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY
mouse_x = al_get_allegro_event_mouse_x(ev)
mouse_y = al_get_allegro_event_mouse_y(ev)
on ALLEGRO_EVENT_MOUSE_BUTTON_UP
exit
on ALLEGRO_EVENT_KEY_DOWN
5.19. What is new in Ring 1.5.1? 84
3. Ring Documentation, Release 1.6
switch al_get_allegro_event_keyboard_keycode(ev)
on ALLEGRO_KEY_UP
key[KEY_UP] = true
on ALLEGRO_KEY_DOWN
key[KEY_DOWN] = true
on ALLEGRO_KEY_LEFT
key[KEY_LEFT] = true
on ALLEGRO_KEY_RIGHT
key[KEY_RIGHT] = true
off
on ALLEGRO_EVENT_KEY_UP
switch al_get_allegro_event_keyboard_keycode(ev)
on ALLEGRO_KEY_UP
key[KEY_UP] = false
on ALLEGRO_KEY_DOWN
key[KEY_DOWN] = false
on ALLEGRO_KEY_LEFT
key[KEY_LEFT] = false
on ALLEGRO_KEY_RIGHT
key[KEY_RIGHT] = false
on ALLEGRO_KEY_ESCAPE
exit
off
off
if redraw and al_is_event_queue_empty(event_queue)
redraw = false
drawScene()
al_flip_display()
ok
callgc()
end
func destroy
destroyResources()
al_destroy_timer(timer)
al_destroy_allegro_event(ev)
al_destroy_allegro_timeout(timeout)
al_destroy_event_queue(event_queue)
al_destroy_display(display)
func loadresources
func drawScene
func destroyResources
Screen Shot:
5.19. What is new in Ring 1.5.1? 85
4. Ring Documentation, Release 1.6
5.20 What is new in Ring 1.5.2?
ā¢ Documentation - Chapter āApplications developed in little hoursā is updated
ā¢ Ring Notepad - Display programs output in the output window on all platforms
ā¢ Form Designer - Help Menu - Open CHM/PDF ļ¬les without displaying the console window
ā¢ Form Designer - Better response to Resize/Move Events when moving the Mouse quickly
ā¢ Form Designer - New/Open/Save As, will open the Controller class in Ring Notepad
ā¢ Form Designer - Added āClose Formā option to the ļ¬le menu
ā¢ Ring Notepad - Run, will save the current ļ¬le (Also the opened Form) automatically
ā¢ GetQuotesHistory Application - Updated to work on MacOS X and Qt 5.2
ā¢ Calculator Application - Updated to include more features!
ā¢ RingVM - Classiļ¬cation for Environment Errors (Check Chapter : Language Reference)
ā¢ RingQt - New methods added to QAllEvents for faster Events execution
ā¢ RingQt - Fusion Black Style - Better colors for disabled controls
ā¢ Scripts - For building Ring on Fedora Linux (Check Chapter : Building From Source Code)
Screen Shot:
5.20. What is new in Ring 1.5.2? 86
5. Ring Documentation, Release 1.6
5.21 What is new in Ring 1.5.3?
ā¢ Form Designer : Close Action will notify Ring Notepad to be able to open the Form again
ā¢ Form Designer : Save Action will open the controller class in Ring Notepad
ā¢ Form Designer : Keep current control selected when selecting many controls using CTRL Key
ā¢ Form Designer : Nice form back color when used in Ring Notepad (Style: Modern Black)
ā¢ RingOpenSSL : Updated to support newer versions like OpenSSL 1.1
ā¢ Building Scripts : Updated to work on Fedora 26 (64bit)
ā¢ OpenGL : New Sample - Many Cubes (samples/3D/manycubes)
Screen Shot:
5.21. What is new in Ring 1.5.3? 87
6. Ring Documentation, Release 1.6
ā¢ RingQt : Add QDateTime Class
ā¢ RingQt : New methods added to QMenu and QCursor Classes
Example:
load "guilib.ring"
new qApp {
win = new qwidget() {
setwindowtitle("Context Menu")
resize(400,400)
myfilter = new qAllEvents(win) {
setContextmenuEvent("mymenu()")
}
installeventfilter(myfilter)
show()
}
exec()
}
func mymenu
new qMenu(win) {
5.21. What is new in Ring 1.5.3? 88
7. Ring Documentation, Release 1.6
oAction = new qAction(win) {
settext("new")
SetCLickevent("See :New")
}
addaction(oAction)
oAction = new qAction(win) {
settext("open")
SetCLickevent("See :Open")
}
addaction(oAction)
oAction = new qAction(win) {
settext("save")
SetCLickevent("See :Save")
}
addaction(oAction)
oAction = new qAction(win) {
settext("close")
SetCLickevent("See :Close")
}
addaction(oAction)
oCursor = new qCursor()
exec(oCursor.pos())
}
ā¢ Compiler : Support using _ in numbers
Example:
x = 1_000_000
see type(x)+nl
see x+1+nl
Output:
NUMBER
100000001
ā¢ Compiler : Support using f after numbers
Example:
x = 19.99f
see type(x) + nl
Output:
NUMBER
ā¢ Google API Shortener Application
Screen Shots:
5.21. What is new in Ring 1.5.3? 89
8. Ring Documentation, Release 1.6
ā¢ TicTacToe 3D Game
Screen Shot:
5.22 What is new in Ring 1.5.4?
ā¢ CalmoSoft Fifteen Puzzle Game 3D
ā¢ Ring Notepad - New Styles
5.22. What is new in Ring 1.5.4? 90
9. Ring Documentation, Release 1.6
ā¢ Ring Notepad - Better Toolbar Style
ā¢ Ring Notepad - View Modes
ā¢ Ring Notepad - QPlainTextEdit - donāt set back color for the scroll bars
ā¢ Ring Notepad - Style Fusion (White) - use Silver color for comments
ā¢ Ring Notepad - Tab and Shift-Tab - Indent multiple lines
ā¢ Form Designer - Better Toolbar Style
ā¢ Form Designer - Nice backcolor for Window Flags and Menubar Designer
ā¢ Form Designer - Default back color for controls
ā¢ RingQt - Added grab() and windowHandle() methods to QWidget class
ā¢ RingQt - Added new methods to QPixmap Class
ā¢ RingQt - Added Classes :-
ā QScreen
ā QWindow
ā QGuiApplication
ā QTextBrowser
ā¢ Code Generator for Extensions - Nonew Option - Support Parent Class
ā¢ Ring VM - Internal Implementation - Pass state to Strings and Lists objects
ā¢ Ring VM - Garbage Collector - Memory Pool for Small Objects
ā¢ Ring VM - Better code for Saving/Restoring the State
5.22. What is new in Ring 1.5.4? 91
10. CHAPTER
SIX
WHAT IS NEW IN RING 1.4?
In this chapter we will learn about the changes and new features in Ring 1.4 release.
6.1 List of changes and new features
Ring 1.4 comes with many new features
ā¢ Change: Basic Extensions are separated from RingVM
ā¢ The Natural Library
ā¢ New Style is added to Ring Notepad
ā¢ RingREPL
ā¢ Convert between Numbers and Bytes
ā¢ Better StdLib
ā¢ Better WebLib
ā¢ Better RingQt
ā¢ Qt Class Convertor
6.2 Change: Basic Extensions are separated from RingVM
In Ring 1.4 the next libraries are separated from RingVM
ā¢ RingODBC
ā¢ RingMySQL
ā¢ RingSQLite
ā¢ RingOpenSSL
ā¢ RingInternet
To use these libraries, Use the Load command.
load "odbclib.ring"
# use ODBC Functions
load "mysqllib.ring"
# use MySQL Functions
92