Merge branch 'tildearrow:master' into master

This commit is contained in:
BlastBrothers 2022-04-11 19:51:31 -04:00 committed by GitHub
commit 1d14ca2d88
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 39 additions and 74 deletions

View File

@ -414,6 +414,7 @@ void DivEngine::runExportThread() {
}
}
// TODO: properly export ExtCh songs in per-channel mode
bool DivEngine::saveAudio(const char* path, int loops, DivAudioExportModes mode) {
exportPath=path;
exportMode=mode;

View File

@ -2,6 +2,10 @@
#include "engine.h"
#include "instrument.h"
// TODO:
// - add missing license header
// - implement waveSynth on Amiga and N163
bool DivWaveSynth::activeChanged() {
if (activeChangedB) {
activeChangedB=false;

View File

@ -20,6 +20,9 @@
#include "gui.h"
#include "IconsFontAwesome4.h"
// TODO:
// - "play from start" button/action
// - fix behavior of play buttons
void FurnaceGUI::drawEditControls() {
if (nextWindow==GUI_WINDOW_EDIT_CONTROLS) {
editControlsOpen=true;

View File

@ -46,6 +46,9 @@
#define BIND_FOR(x) getKeyName(actionKeys[x],true).c_str()
// TODO:
// - add colors for FM envelope and waveform
// - maybe add "alternate" color for FM modulators/carriers (a bit difficult)
enum FurnaceGUIColors {
GUI_COLOR_BACKGROUND=0,
GUI_COLOR_FRAME_BACKGROUND,

View File

@ -1257,6 +1257,8 @@ if (ImGui::BeginTable("MacroSpace",2)) { \
#define CENTER_VSLIDER \
ImGui::SetCursorPosX(ImGui::GetCursorPosX()+0.5f*ImGui::GetContentRegionAvail().x-10.0f*dpiScale);
// TODO:
// - add right click line draw in macro editor
void FurnaceGUI::drawInsEdit() {
if (nextWindow==GUI_WINDOW_INS_EDIT) {
insEditOpen=true;

View File

@ -22,6 +22,10 @@
#include <imgui.h>
#include <math.h>
// TODO:
// - potentially move oscilloscope seek position to the end, and read the last samples
// - this allows for setting up the window size
// - reduce initial latency (it's too high)
void FurnaceGUI::readOsc() {
int writePos=e->oscWritePos;
int readPos=e->oscReadPos;
@ -65,6 +69,9 @@ void FurnaceGUI::readOsc() {
e->oscReadPos=readPos;
}
// TODO:
// - draw reference level
// - draw guidelines
void FurnaceGUI::drawOsc() {
if (nextWindow==GUI_WINDOW_OSCILLOSCOPE) {
oscOpen=true;

View File

@ -408,6 +408,7 @@ void FurnaceGUI::drawPattern() {
patWindowSize=ImGui::GetWindowSize();
//char id[32];
ImGui::PushFont(patFont);
// TODO: separate GUI curOrder from engine curOrder
int ord=e->isPlaying()?oldOrder:e->getOrder();
oldOrder=e->getOrder();
int chans=e->getTotalChannelCount();

View File

@ -20,6 +20,7 @@
#include "gui.h"
#include "guiConst.h"
// TODO: actually implement a piano!
void FurnaceGUI::drawPiano() {
if (nextWindow==GUI_WINDOW_PIANO) {
pianoOpen=true;

View File

@ -28,6 +28,12 @@
#include "sampleUtil.h"
#include "util.h"
// TODO:
// - resample should change C-4 note
// - clicking on waveform should give this window focus
// - add "create instrument using this sample" option
// - .dmc loading
// - duplicate sample
void FurnaceGUI::drawSampleEdit() {
if (nextWindow==GUI_WINDOW_SAMPLE_EDIT) {
sampleEditOpen=true;

View File

@ -198,6 +198,10 @@ struct MappedInput {
scan(s), val(v) {}
};
// TODO:
// - add metronome volume setting
// - maybe add metronome sound setting
// - add a "close" button to this window
void FurnaceGUI::drawSettings() {
if (nextWindow==GUI_WINDOW_SETTINGS) {
settingsOpen=true;

View File

@ -27,69 +27,7 @@ LogEntry logEntries[TA_LOG_SIZE];
static constexpr unsigned int TA_LOG_MASK=TA_LOG_SIZE-1;
int logV(const char* format, ...) {
va_list va;
int ret;
if (logLevel<LOGLEVEL_TRACE) return 0;
#ifdef _WIN32
printf("[trace] ");
#else
printf("\x1b[1;37m[trace]\x1b[m ");
#endif
va_start(va,format);
ret=vprintf(format,va);
va_end(va);
fflush(stdout);
return ret;
}
int logD(const char* format, ...) {
va_list va;
int ret;
if (logLevel<LOGLEVEL_DEBUG) return 0;
#ifdef _WIN32
printf("[debug] ");
#else
printf("\x1b[1;34m[debug]\x1b[m ");
#endif
va_start(va,format);
ret=vprintf(format,va);
va_end(va);
fflush(stdout);
return ret;
}
int logW(const char* format, ...) {
va_list va;
int ret;
if (logLevel<LOGLEVEL_WARN) return 0;
#ifdef _WIN32
printf("[warning] ");
#else
printf("\x1b[1;33m[warning]\x1b[m ");
#endif
va_start(va,format);
ret=vprintf(format,va);
va_end(va);
return ret;
}
int logE(const char* format, ...) {
va_list va;
int ret;
if (logLevel<LOGLEVEL_ERROR) return 0;
#ifdef _WIN32
printf("[ERROR] ");
#else
printf("\x1b[1;31m[ERROR]\x1b[m ");
#endif
va_start(va,format);
ret=vprintf(format,va);
va_end(va);
return ret;
}
int writeLog(int level, const char* msg, fmt::printf_args& args) {
int writeLog(int level, const char* msg, fmt::printf_args args) {
time_t thisMakesNoSense=time(NULL);
int pos=logPosition;
logPosition=(logPosition+1)&TA_LOG_MASK;

View File

@ -49,33 +49,28 @@ struct LogEntry {
ready(false) {}
};
int writeLog(int level, const char* msg, fmt::printf_args& args);
int writeLog(int level, const char* msg, fmt::printf_args args);
extern LogEntry logEntries[TA_LOG_SIZE];
template<typename... T> int logV(const char* msg, const T&... args) {
fmt::printf_args a=fmt::make_printf_args(args...);
return writeLog(LOGLEVEL_TRACE,msg,a);
return writeLog(LOGLEVEL_TRACE,msg,fmt::make_printf_args(args...));
}
template<typename... T> int logD(const char* msg, const T&... args) {
fmt::printf_args a=fmt::make_printf_args(args...);
return writeLog(LOGLEVEL_DEBUG,msg,a);
return writeLog(LOGLEVEL_DEBUG,msg,fmt::make_printf_args(args...));
}
template<typename... T> int logI(const char* msg, const T&... args) {
fmt::printf_args a=fmt::make_printf_args(args...);
return writeLog(LOGLEVEL_INFO,msg,a);
return writeLog(LOGLEVEL_INFO,msg,fmt::make_printf_args(args...));
}
template<typename... T> int logW(const char* msg, const T&... args) {
fmt::printf_args a=fmt::make_printf_args(args...);
return writeLog(LOGLEVEL_WARN,msg,a);
return writeLog(LOGLEVEL_WARN,msg,fmt::make_printf_args(args...));
}
template<typename... T> int logE(const char* msg, const T&... args) {
fmt::printf_args a=fmt::make_printf_args(args...);
return writeLog(LOGLEVEL_ERROR,msg,a);
return writeLog(LOGLEVEL_ERROR,msg,fmt::make_printf_args(args...));
}
void initLog();