1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-09-09 14:00:17 +00:00
Commit graph

135 commits

Author SHA1 Message Date
Samuel Gomes
586371dc77 Implement _SAVEIMAGE 2023-09-17 11:52:54 +05:30
Samuel Gomes
412b783efa Add QOI support 2023-09-15 21:05:41 +05:30
Samuel Gomes
3b1ca3a386 Fix fonts getting vertically misaligned 2023-06-19 07:06:49 +05:30
Samuel Gomes
3f16e3c9d1 Add volume, panning & waveform support for SOUND 2023-06-10 02:24:05 +05:30
Samuel Gomes
ef5d29e5fb Implement PSG class 2023-06-09 13:02:14 +05:30
Samuel Gomes
bd9a7b6f6f
Merge branch 'QB64-Phoenix-Edition:main' into audio-enhancements 2023-05-23 01:42:57 +05:30
Samuel Gomes
3fc585241a
Merge branch 'QB64-Phoenix-Edition:main' into audio-enhancements 2023-05-08 19:12:51 +05:30
Samuel Gomes
381e5ab0e9
Merge branch 'main' into ucharpos-enhancement 2023-05-08 18:04:22 +05:30
Samuel Gomes
47c3cac56a
Merge branch 'QB64-Phoenix-Edition:main' into dialog-fixes 2023-05-08 02:00:22 +05:30
Samuel Gomes
60a448fb54 Add _UCHARPOS() to get individual char pixel position 2023-05-07 22:12:47 +05:30
Samuel Gomes
df4c144b34
Merge branch 'QB64-Phoenix-Edition:main' into audio-enhancements 2023-05-07 09:07:26 +05:30
Samuel Gomes
c6b8524739 Improve dialog functions using #305 & make string options case insensitive 2023-05-02 00:19:33 +05:30
RainRat
3914037c0f fix typos 2023-04-30 15:20:42 -07:00
Samuel Gomes
67b95016fc
Merge branch 'QB64-Phoenix-Edition:main' into audio-enhancements 2023-04-30 03:27:55 +05:30
Samuel Gomes
f1bb16a6fe Changes per discussion in #335 2023-04-30 00:27:34 +05:30
Samuel Gomes
3dd439e625 Change function names 2023-04-26 22:36:24 +05:30
Samuel Gomes
c033c624ac Add support for _UPrint*() 2023-04-26 17:36:09 +05:30
Samuel Gomes
2da5b89a22 Improve ResizeBuffers() behavior and update comments 2023-04-21 00:02:40 +05:30
Samuel Gomes
e4b36ca8ad Add font load-from-memory support 2023-04-20 09:23:13 +05:30
Samuel Gomes
618e5117cd Add FontPrintWidthUTF32() and optimize chrwidth() 2023-04-19 09:30:38 +05:30
Samuel Gomes
492c8d0cf5 Remove unused out_x_pre_increment, out_x_post_increment 2023-04-19 08:39:56 +05:30
Samuel Gomes
ec723ed46b New FreeType cached font renderer 2023-04-19 07:49:02 +05:30
Samuel Gomes
ac6f6574a1 Update comments 2023-04-11 23:21:47 +05:30
Samuel Gomes
1c505561d6 Implement pending changes in #330 2023-04-09 03:37:44 +05:30
Samuel Gomes
d974c0b9a8 Tidy up font code 2023-04-04 17:51:17 +05:30
Samuel Gomes
6dd651f7cd Replace MinGW intrinsic zlib with miniz 2023-03-19 02:28:05 +05:30
Samuel Gomes
f86d566d7a Merge branch 'image-load-from-memory-support' of https://github.com/a740g/QB64pe into image-load-from-memory-support 2023-02-13 03:52:28 +05:30
Samuel Gomes
52d168ff00 Update to use #305 2023-02-13 03:52:16 +05:30
Samuel Gomes
18efb60cc3
Merge branch 'QB64-Phoenix-Edition:main' into image-load-from-memory-support 2023-02-07 18:32:03 +05:30
Matthew Kilgore
42bded9ba9 Fix build on MacOS High Sierra
Fairly simple, MacOS High Sierra's libcurl version is too old and not
have `CURLINFO_CONTENT_LENGTH_DOWNLOAD_T`. This adds a version check to
use the older version of that command which gives back a double instead.

Fixes: #287
2023-01-20 13:30:12 -05:00
Samuel Gomes
68234d4786 Fix ambiguous overload 2023-01-11 22:09:24 +05:30
Samuel Gomes
f0f0a9a420 Overload _LOADIMAGE to allow strings as the 2nd parameter 2023-01-11 16:18:43 +05:30
Matthew Kilgore
f21ce09e2d Replace time() with std::chrono, fix startup delay
Currently main() includes logic that is intended to sync time() with
GetTicks() for the purpose of using GetTicks() to get millisecond
accuracy with time(), which only has second accuracy. Unfortunately, the
'syncing' up of these time sources results in an average of a half
second delay in starting a QB64-PE program.

This logic is easly replaced with std::chrono, which provides a real
time clock which is also millisecond accurate. That removes the need to
use time() and GetTicks() together to get millisecond accuracy, and
means the delay syncing them is no longer necessary.

I also separated most of the "delay" and "time" related functions into
datetime.cpp, and included the new std::chrono code into that file.

Since I needed to call some of the rounding functions in datetime.cpp I
also moved that stuff out into its own .cpp and header files to clean
things up a bit.

Fixes: #282
2023-01-08 20:24:25 -05:00
Matthew Kilgore
f88960966b Fix use-after-free bug in buffer.cpp
Fairly simple, the finished entry is free'd and then removed from the
list, but that order results in us accessing the entry's next member
after it has been free'd. Swapping the order of the operations fixes the
issue.

Fixes: #281
2023-01-08 20:24:25 -05:00
Samuel Gomes
061bf6af3d Rename _NEWSOUND to _SNDNEW to align with _SND* APIs 2022-12-31 12:00:38 +05:30
Samuel Gomes
4c80f6bcea Implement feature request #28 2022-12-31 01:49:23 +05:30
Matthew Kilgore
7ac2eefcb8 Fix slowdown of _ScreenX and _ScreenY
The commands _ScreenX and _ScreenY got significantly slower due to the
need to wait for the GLUT thread to wake up and execute the glutGet()
command for them. We've already seen a few programs (including the IDE)
where this behavior completely grinds the program to a halt, so we
definitely can't keep it.

The simple solution here is to not call glutGet() on every _ScreenX/Y
command. Instead every time the idle/timer function runs we get the
current values for the relevant glutGet() variables and store them.
libqb_glut_get() then checks if the value being read is one of the ones
we read in the idle/timer functionand if so just returns the last read
value. By doing it this way the commands no longer has to wait on the
GLUT thread for the result.
2022-11-30 17:33:17 -05:00
Matthew Kilgore
f7fabda198 Fix random seg faults on exit
Fairly straightfowrad, programs were randomly seg faulting on exit. This
was happening due to GLUT registering a cleanup function via atexit(),
which then gets called when exit() is called.

The issue happens when exit() is called on a thread other than the GLUT
thread, which leads to the exit() call then attempting to cleanup GLUT
while the other thread is still using it, which randomly leads to seg
faults.

Fixing this is slightly annoying. We cannot stop the GLUT thread, as
the basic GLUT API (which is used on Mac OS) simply does not offer a way
to exit the glutMainLoop() call. Thus the simplest solution is to simply
make sure we call exit() on the GLUT thread, which we can fairly easily
due via the message queue.

That being the case, a new libqb_exit() API was added, which simply
regsiters the GLUT exit message and then waits for the program to end.
The atexit() handler then runs on the GLUT thread and everything works
out fine.

In the future we probably should redo the exit logic a bit so that all
the threads are actually stopped/joined to ensure the exit process is
consistent, however this is good enough for now. Also, there's plenty of
error states which call exit() which I did not address.
2022-11-29 20:04:54 -05:00
Matthew Kilgore
72193e34e5 Add GLUT command queue, processed on GLUT thread
This fixes all the code so that all the calls to glut functions
happen on the same thread that is running GLUT.

We achieve this by creating a queue of GLUT commands to execute.
Commands can be added to the queue anywhere in the code, and then the
queue is processed on the GLUT thread via it's idle func or timer func.
The command is run and if necessary the result is provided in the
message queue object. Each object contains a completion which can be
waited on to block until the GLUT thread has processed the command.

Fixes: #66
2022-11-29 20:04:54 -05:00
Matthew Kilgore
d678be717c Move GLUT initialization logic into separate .cpp file 2022-11-29 20:04:53 -05:00
Matthew Kilgore
12c9c35db5 Add _StatusCode command for HTTP handles
The _StatusCode command returns the status code on the HTTP response
when given a HTTP handle from _OpenClient().
2022-11-20 04:04:02 -05:00
Matthew Kilgore
45d52271da Add libqb_http API for HTTP connections
This adds the libqb_http API, which is designed to support HTTP and
HTTPS usage from QB64-PE source.

The design consists of a single thread which services all the HTTP(s)
connections. There are then various libqb_http APIs exposed that allow
interacting with this thread to create a new connection, query
connection status, read data, or close the connection.

Internally the thread makes use of the curl_multi interface to allow a
single thread to service multiple HTTP(s) connections in parallel. This
means you can _OPENCLIENT() multiple HTTP connection in a row and all of
them will be serviced at the same time in whatever order data is
available.

HTTP is optional and selected via a Makefile setting. A stub is swapped
in if HTTP support is not used, which avoids need to add another build
flag to libqb.cpp.
2022-11-19 15:13:26 -05:00
Samuel Gomes
7e533a2473 Update test license files 2022-10-25 07:28:35 +05:30
Samuel Gomes
d14d688181 Fix IMAGE_GET_BGRA_... macros 2022-10-25 04:47:27 +05:30
Samuel Gomes
a122331d6d Include stdarg.h in gui.h 2022-10-25 04:34:41 +05:30
Samuel Gomes
56c7936fb4 Address issues mentioned in #216 2022-10-25 04:24:01 +05:30
Samuel Gomes
93e58baa1d Common dialogs support 2022-10-23 12:57:02 +05:30
Samuel Gomes
f49f8bdf06 Implement _SNDPLAYCOPY enhancement #185 2022-10-05 02:33:44 +05:30
Samuel Gomes
a100a434e4 Fix #175 2022-09-17 08:53:32 +05:30
Matthew Kilgore
cd5e312f5a Revert changes to miniaudio.h, move changes elsewhere
Changing midiaudio.h will make it harder to incorporate new versions
into QB64-PE as they come out. To fix that I have reverted all the
changes to midiaudio.h and moved the few private parts we were using
into a separate 'filepath' API that's part of libqb.
2022-09-08 23:59:19 -04:00
Matthew Kilgore
30c0634d20 Fix High-DPI awareness on Windows
We started defining `_WIN32_WINNT` a little while ago to express that we
require Windows Vista or above for support. This enables us to access
some Windows Vista-only APIs. The fact that `WINVER` also needs to be
defined was missed, and it seems that defining one means the other no
longer gets defined automatically as it did before. Thus we're simplying
now also defining `WINVER` the same as `_WIN32_WINNT`.

This fixes High-DPI awareness and a few other things that were gated
behind WINVER checks.
2022-08-28 21:44:07 -04:00
Matthew Kilgore
481906977e Add a740g's miniaudio backend
This is a single commit adding all of a740g's audio backend. Later
commits will connect it together with QB64PE itself.
2022-08-27 14:27:55 -04:00
Matthew Kilgore
94c2b56b69 Use mutex guard in completion implementation 2022-06-14 23:58:04 -04:00
Matthew Kilgore
298331e490 posix mutex shouldn't allow NULL
We shouldn't allow mutex lock/unlock to silently do nothing if NULL is
passed, as that is very likely a bug. Beyond that the Windows version
doesn't do this, so it's inconsistent as well.
2022-06-14 23:56:17 -04:00
Matthew Kilgore
869e361ee4 Move QB64 compiler settings to libqb-common.h
This moves a lot of the preprocessor flags for what compiler/platform
we're using into a libqb-common.h header inside the libqb/include
folder. This gets included at the top of every libqb .cpp file, and is
intended to be fairly small, providing only necessary things like
_WIN32_WINNT (which needs to be defined before including <windows.h> or
friends).
2022-06-12 00:28:16 -04:00
Matthew Kilgore
4052b8cc19 Add append-only buffer API
The Buffer API implements an append-only buffer, where you can write to
the end or read from the beginning. Data that is read is discarded from
the buffer, and you can query the buffer to get the current amount of
data inside.

Internally the buffer API is implemented as a chain of separate buffers.
This is done to avoid having to resize the existing buffer, which is
expensive. We keep track of where the reading currently is, and discard
the internal buffers after all the data in them is read.
2022-06-11 22:47:06 -04:00
Matthew Kilgore
ecfc71ef95 Add completion API
Completions are basically a oneshot flag, which provide a `wait()` call
that blocks until 'finish()' has been called on the completion.

The nice aspect of completions is that because it is a oneshot the order
does not matter - if 'finish()' is called before 'wait()' then 'wait()'
returns immediately. It makes the logic for waiting until a thread is
done finishing up some work easy to implement.
2022-06-11 22:47:06 -04:00
Matthew Kilgore
7ef15653fd Add generic thread, mutex, and condvar API
This adds generic APIs to libqb for handling thread's, mutex's, and
condition variables. On Linux and OSX these are implemented via the ones
provided by pthreads. On Windows they're implemented via the ones
provided by the Win32 API.

For compiling, the code itself is not conditional, but the Makefile
includes logic to decide which implementation to pick.

Note that it would have been nice to simply use std::thread and friends
from C++11, however using them on MinGW appears to be a bit messy. Since
using the Windows ones directly isn't that hard this was an easy compromise.
2022-06-11 22:47:06 -04:00
Matthew Kilgore
eb815c4220 Prepare for separate libqb, define C++ standard
This sets up a few different flags we'll need for the conditional
compiling, and also sets the C++ standard to gnu++11, which effectively
just matches what we were implicitly using before.
2022-06-11 22:47:05 -04:00
Matthew Kilgore
f99407f251 Revert existing libqb split 2022-06-11 20:42:23 -04:00
Matthew Kilgore
437cfc3ab7 Remove old build system
Mostly old build scripts and helper files that are now covered by the
Makefile.

A notable deletion is the glew dll and lib files. These are unnecessary
because we compile `glew.c` directly rather than link against the dll or
lib copies we have.
2022-05-19 09:17:13 -04:00
Matthew Kilgore
55da5f4ce3 Format other various source files 2022-05-06 13:20:30 -04:00
Matthew Kilgore
1aa8d7a42f Run clang-format on ./internal/c/*cpp files 2022-05-06 13:20:30 -04:00
Luke Ceddia
a23e8ce212 Use manual delta method for _mouseinputx/y on non-windows 2021-01-12 01:32:01 +11:00
Carlos A. Leguizamón
a6fcfd51b3 Replaced way to detect macOS version and screen configuration. This way removes any output from console. 2020-12-21 11:03:34 -03:00
Carlos A. Leguizamón
6d3fbe23a4 Fix for UI scale in macOS Catalina, running with 4K/Retina displays. 2020-12-07 00:57:22 -03:00
Fellippe Heitor
8c19e0b60f
Extend to UHD and 5K test for Mac computers.
Closes #47

Thanks to @familygw for the report/fix.
2020-03-11 23:10:19 -03:00
Fellippe Heitor
c22ef3ac96 And clang++ where applicable. 2020-02-20 21:43:23 -03:00
Fellippe Heitor
172583fd17 Replaces g++ with clang for the remaining macOS scripts.
If a user has Homebrew installed, calling g++ won't use Apple's Xcode version of the tool, which is required by QB64. This fix continues on with the patch introduced in 4dbdddc89e.

Extra "osx" references replaced with "macOS", but nothing substantial (almost aesthetic).
2020-02-20 20:52:30 -03:00
Fellippe Heitor
95664863be
Merge pull request #17 from QB64Team/detect-retina-macos
Detects Retina displays on macOS for proper scaling.
2020-01-15 00:08:38 -03:00
Fellippe Heitor
21cdb70efe
Trigger recompilation 2020-01-08 09:06:28 -03:00
Fellippe Heitor
0f1f63eda8 Detects Retina displays on macOS for proper scaling. 2020-01-06 12:09:15 -03:00
Fellippe Heitor
9f89e063f7
Trigger recompilation 2020-01-02 20:18:06 -03:00
Fellippe Heitor
7bf6dbb6e9
Trigger recompilation 2020-01-02 06:20:08 -03:00
Luke Ceddia
1c365c2bb8 Manually apply PR #93 chmod +x .command files 2020-01-02 14:13:56 +11:00
FellippeHeitor
31a855d642 Removes dead Android references. 2019-04-14 15:33:19 -03:00
FellippeHeitor
f8c989a079 Moves glutSetWindowTitle call to proper place on macOS. Fixes #75 for good. 2019-03-31 23:38:36 -03:00
FellippeHeitor
12df99c8da Indentation work. No actual code changes. 2018-06-30 14:23:33 -03:00
FellippeHeitor
713d27fae6 Fix makeline in setup_win.bat.
Previous iterations built qb64.exe without proper access to terminal.
2016-09-06 11:17:12 -03:00
Luke Ceddia
a6ad741acf Fix scroll wheel on Linux (again). 2016-08-13 00:16:56 +10:00
Galleondragon
0ea631d375 Implements the _DIR$("desktop") function which returns OS specific paths.
Implements changes to allow programs to run on ARMBI-v7 Android devices which also provides a massive performance boost to but runtime and startup time.
Implements changes to allow programs to run on x86-based Android devices.
Fix to ensure variables allocated in the "stack" are aligned on appropriate boundaries which would have otherwise crashed on Android.
Fix to _DEVICES to ensure variables are aligned on appropriate boundaries which would have otherwise crashed on Android (includes some refactoring).
Added permissions to allow reading from/writing to external storage. Use the _DIR$(...) function to help locate appropriate paths.
2016-03-20 18:56:10 +11:00
Galleondragon
accdaf1ce0 Added support for Android & Virtual Keyboards 2015-10-30 23:18:44 +11:00
Luke Ceddia
c003f0bc20 Fix scroll wheel on Linux; tidy up licensing info; clean up Windows setup; fix OSX script permissions.
The scroll wheel now behaves correctly on Linux. Reports suggest that the fix does not have any effect
on OSX though. The licensing documentation is updated to reflect the fact that there are no GPL components
included in a QB64 program. Some redundant code was removed from the Windows setup script. OSX setup and
run scripts were missing the executable bit - hopefully the repository will preserve that change.
2015-08-06 21:39:16 +10:00
Galleon
5d41e5ec7b Major patch for OSX support
Fixes gamepad support dependency / thread of call
Allows libqb.cpp to use Objective C++
Fixes tracking/handling of SHIFT, ALT, CTRL & CAPS LOCK
Fixes serious bug in internal getticks() which caused _LIMIT, _DELAY, SLEEP, TIMER, etc to malfunction and IDE to be unusably slow
2015-03-12 02:06:48 -07:00
Galleon
f5285a1a61 (Automated push) Update internal/source/* from qb64.bas 2015-02-20 05:15:27 -08:00