```
├── .gitattributes
├── .gitignore
├── README.md
├── Sinewave.sln
├── Sinewave/
├── README.md
├── Roboto-Regular.ttf
├── Sinewave.rc
├── Sinewave.vcxproj
├── Sinewave.vcxproj.filters
├── discord-rpc.dll
├── icon1.ico
├── imgui.ini
├── imgui/
├── bun/
├── bunui.cpp
├── bunui.h
├── imconfig.h
├── imgui.cpp
```
## /.gitattributes
```gitattributes path="/.gitattributes"
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs diff=csharp
###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln merge=binary
#*.csproj merge=binary
#*.vbproj merge=binary
#*.vcxproj merge=binary
#*.vcproj merge=binary
#*.dbproj merge=binary
#*.fsproj merge=binary
#*.lsproj merge=binary
#*.wixproj merge=binary
#*.modelproj merge=binary
#*.sqlproj merge=binary
#*.wwaproj merge=binary
###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg binary
#*.png binary
#*.gif binary
###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc diff=astextplain
#*.DOC diff=astextplain
#*.docx diff=astextplain
#*.DOCX diff=astextplain
#*.dot diff=astextplain
#*.DOT diff=astextplain
#*.pdf diff=astextplain
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain
```
## /.gitignore
```gitignore path="/.gitignore"
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Oo]ut/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
```
## /README.md
# Sinewave - Roblox Launcher (and Bootstrapper)
**[Discord Server](https://discord.gg/mhTfWP3XxG)**
Sinewave is a custom launcher (and Bootstrapper) for Roblox, designed to make your experience better.
It includes a variety of features, such as a **FFlag editor**, **customization mods**, and **Discord RPC**.
# Features
* **FFlag Editor** with custom presets.
* **Appearance/Customization Mods** such as the old oof sounds, custom cursors, etc.
* **Discord RPC** so your Discord friends can see what you're playing!
# Installation
1. Make sure to download the latest release from the [Releases](https://github.com/Mediccc/Sinewave/releases/) page
2. Run **Sinewave**
3. Enjoy!
# Usage
For Sinewave to work correctly, please start games from the **Roblox website**.
If you encounter any errors, please join the Discord server and report them.
# Building From Source
If you want to build Sinewave yourself, here's how:
1. **Clone the Sinewave repository**
```
git clone https://github.com/Mediccc/Sinewave.git
cd Sinewave
```
2. **Open Sinewave in Visual Studio 2022**
* Open the `.sln` file found in the Sinewave directory.
3. **Build the project**
* Make sure to build Sinewave in `Release` mode.
4. **Output**
* You'll find the Sinewave file in `x64/Release/`.
# Note
Sinewave is currently very simple, but more updates are coming soon!
Windows defender might flag Sinewave as a **false positive**.
To get around that, add the Sinewave folder to the **Exclusions** list from your AV.
## /Sinewave.sln
```sln path="/Sinewave.sln"
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.13.35919.96 d17.13
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Sinewave", "Sinewave\Sinewave.vcxproj", "{C32D3692-742B-47F1-85B4-D89AF1ED063C}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{C32D3692-742B-47F1-85B4-D89AF1ED063C}.Debug|x64.ActiveCfg = Debug|x64
{C32D3692-742B-47F1-85B4-D89AF1ED063C}.Debug|x64.Build.0 = Debug|x64
{C32D3692-742B-47F1-85B4-D89AF1ED063C}.Debug|x86.ActiveCfg = Debug|Win32
{C32D3692-742B-47F1-85B4-D89AF1ED063C}.Debug|x86.Build.0 = Debug|Win32
{C32D3692-742B-47F1-85B4-D89AF1ED063C}.Release|x64.ActiveCfg = Release|x64
{C32D3692-742B-47F1-85B4-D89AF1ED063C}.Release|x64.Build.0 = Release|x64
{C32D3692-742B-47F1-85B4-D89AF1ED063C}.Release|x86.ActiveCfg = Release|Win32
{C32D3692-742B-47F1-85B4-D89AF1ED063C}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {4742B884-C72C-4710-9363-31780C36DC0B}
EndGlobalSection
EndGlobal
```
## /Sinewave/README.md
# Sinewave - Roblox Launcher (and Bootstrapper)
**Join our [Discord Server](https://discord.gg/GX6pZdGvG6) for updates & more!**
Sinewave is a custom launcher (and Bootstrapper) for Roblox, designed to make your experience better.
It includes a variety of features, such as a **FFlag editor**, **customization mods**, and **Discord RPC**.
# Features
* **FFlag Editor** that's simple (still needs some tweaks)
* **Appearance/Customization Mods** such as the old oof sounds, custom cursors, etc.
* **Discord RPC** so your Discord friends can see what you're playing!
# Installation
1. Make sure to download the latest release from the [Releases](https://github.com/Mediccc/Sinewave/releases/) page
2. Run **Sinewave**
3. Enjoy!
# Usage
For Sinewave to work correctly, please start games from the **Roblox website**.
If you want to uninstall Sinewave:
* Delete the folder Sinewave is installed in.
* Delete the Sinewave folder from **%appdata%**.
* Run the **Roblox** installer
# Note
Sinewave is currently very simple, but more updates are coming soon!
## /Sinewave/Roboto-Regular.ttf
Binary file available at https://raw.githubusercontent.com/Mediccc/Sinewave/refs/heads/main/Sinewave/Roboto-Regular.ttf
## /Sinewave/Sinewave.rc
Binary file available at https://raw.githubusercontent.com/Mediccc/Sinewave/refs/heads/main/Sinewave/Sinewave.rc
## /Sinewave/Sinewave.vcxproj
```vcxproj path="/Sinewave/Sinewave.vcxproj"
DebugWin32ReleaseWin32Debugx64Releasex6417.0Win32Proj{c32d3692-742b-47f1-85b4-d89af1ed063c}Sinewave10.0Applicationtruev143UnicodeApplicationfalsev143trueUnicodeApplicationtruev143UnicodeApplicationfalsev143trueUnicode$(ProjectDir)imgui;$(ProjectDir)include;$(IncludePath)$(ProjectDir)lib;$(LibraryPath)Level3trueWIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)trueConsoletrueLevel3truetruetrueWIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)trueConsoletruetruetrueLevel3true_DEBUG;_CONSOLE;%(PreprocessorDefinitions)trueConsoletrueLevel3truetruetrueCURL_STATICLIB;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)true$(ProjectDir)imgui;$(ProjectDir)include;%(AdditionalIncludeDirectories)stdcpp20Windowstruetruetruelibcurl_a.lib;Ws2_32.lib;Crypt32.lib;Wldap32.lib;Normaliz.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;user32.lib;discord-rpc.lib;%(AdditionalDependencies)$(ProjectDir)lib;%(AdditionalLibraryDirectories)xcopy /Y "$(ProjectDir)discord-rpc.dll" "$(OutDir)"
xcopy /Y "$(ProjectDir)Roboto-Regular.ttf" "$(OutDir)"
```
## /Sinewave/Sinewave.vcxproj.filters
```filters path="/Sinewave/Sinewave.vcxproj.filters"
{4FC737F1-C7A5-4376-A066-2A32D752A2FF}cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx{93995380-89BD-4b04-88EB-625FBE52EBFB}h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-msSource FilesSource FilesSource FilesSource FilesSource FilesSource FilesSource FilesSource FilesSource FilesSource FilesSource FilesSource FilesSource FilesSource FilesSource FilesSource FilesSource FilesSource FilesSource FilesSource FilesSource FilesSource FilesSource FilesSource FilesSource FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesHeader FilesResource FilesResource Files
```
## /Sinewave/discord-rpc.dll
Binary file available at https://raw.githubusercontent.com/Mediccc/Sinewave/refs/heads/main/Sinewave/discord-rpc.dll
## /Sinewave/icon1.ico
Binary file available at https://raw.githubusercontent.com/Mediccc/Sinewave/refs/heads/main/Sinewave/icon1.ico
## /Sinewave/imgui.ini
```ini path="/Sinewave/imgui.ini"
[Window][Debug##Default]
Pos=60,60
Size=400,400
[Window][Sinewave | v1.0.3]
Pos=735,354
Size=650,400
[Window][FFlag Presets]
Pos=491,403
Size=300,300
[Window][Custom FFlag Presets]
Pos=409,403
Size=300,300
[Window][Sinewave | v1.0.4]
Pos=925,434
Size=650,400
[Window][Sinewave | v1.0.5]
Pos=931,386
Size=650,400
```
## /Sinewave/imgui/bun/bunui.cpp
```cpp path="/Sinewave/imgui/bun/bunui.cpp"
#include "bunui.h"
void Bun::DarkTheme() {
ImGuiStyle& style = ImGui::GetStyle();
style.WindowRounding = 4.0f;
style.FrameRounding = 4.0f;
style.Colors[ImGuiCol_Button] = ImVec4(0.196f, 0.196f, 0.196f, 0.400f);
style.Colors[ImGuiCol_ButtonHovered] = ImVec4(0.235f, 0.235f, 0.235f, 1.000f);
style.Colors[ImGuiCol_ButtonActive] = ImVec4(0.273f, 0.274f, 0.275f, 1.000f);
style.Colors[ImGuiCol_FrameBg] = ImVec4(0.196f, 0.196f, 0.196f, 0.400f);
style.Colors[ImGuiCol_FrameBgHovered] = ImVec4(0.235f, 0.235f, 0.235f, 1.000f);
style.Colors[ImGuiCol_FrameBgActive] = ImVec4(0.273f, 0.274f, 0.275f, 1.000f);
style.Colors[ImGuiCol_CheckMark] = ImVec4(0.803f, 0.833f, 0.869f, 1.000f);
style.Colors[ImGuiCol_TitleBgActive] = ImVec4(0.137f, 0.137f, 0.137f, 1.000f);
style.Colors[ImGuiCol_PopupBg] = ImVec4(0.196f, 0.196f, 0.196f, 1.0f);
}
bool Bun::Button(const char* name, const ImVec2& size, const ImVec2& pos) {
ImGui::PushID(name);
static std::unordered_map pMap; /* i added maps so we can have multiple buttons */
static std::unordered_map cMap;
ImGuiID id = ImGui::GetID(name);
float& progress = pMap[id];
float& click = cMap[id];
/* animation & colors */
ImGuiStyle& style = ImGui::GetStyle();
ImGuiIO& io = ImGui::GetIO();
ImVec4 background = style.Colors[ImGuiCol_Button];
ImVec4 hover = style.Colors[ImGuiCol_ButtonHovered];
ImVec4 active = style.Colors[ImGuiCol_ButtonActive];
float hoverSpeed = 5.0f;
float clickSpeed = 9.0f;
/* drawing */
ImDrawList* list = ImGui::GetWindowDrawList();
//ImVec2 pos = ImGui::GetCursorScreenPos();
ImVec2 tSize = ImGui::CalcTextSize(name);
ImVec2 tPos = ImVec2(pos.x + (size.x - tSize.x) * 0.5f, pos.y + (size.y - tSize.y) * 0.5f);
bool b = ImGui::InvisibleButton(name, size);
bool hovered = ImGui::IsItemHovered();
progress += (hovered ? 1.0f : -1.0f) * io.DeltaTime * hoverSpeed;
progress = ImClamp(progress, 0.0f, 1.0f);
if (b) click = 1.0f;
if (click > 0.0f) {
click -= io.DeltaTime * clickSpeed;
if (click < 0.0f) click = 0.0f;
}
ImVec4 color = ImLerp(background, hover, progress);
list->AddRectFilled(pos, ImVec2(pos.x + size.x, pos.y + size.y), ImGui::ColorConvertFloat4ToU32(color), 2.0f);
if (click > 0.0f) {
list->AddRectFilled(pos, ImVec2(pos.x + size.x, pos.y + size.y), ImGui::ColorConvertFloat4ToU32(active), 2.0f);
}
list->AddText(tPos, IM_COL32(255, 255, 255, 255), name);
ImGui::PopID();
return b;
}
void Bun::NavigationBar(const char* name, const ImVec2& size) {
ImGui::PushID(name);
/* colors */
ImGuiStyle& style = ImGui::GetStyle();
ImVec4 background = style.Colors[ImGuiCol_Button]; /* just gonna use the button's color for the background, change to whatever you want tho */
/* drawing */
ImDrawList* list = ImGui::GetWindowDrawList();
ImVec2 pos = ImGui::GetCursorScreenPos();
list->AddRectFilled(pos, ImVec2(pos.x + size.x, pos.y + size.y), ImGui::ColorConvertFloat4ToU32(background), 2.0f);
ImGui::PopID();
}
bool Bun::NavigationButton(const char* name, const ImVec2& size) {
ImGui::PushID(name);
ImDrawList* list = ImGui::GetWindowDrawList();
ImVec2 pos = ImGui::GetCursorScreenPos();
ImVec2 p = ImVec2(pos.x + 10, pos.y + 10);
bool b = Button(name, size, p);
pos.y += 45; /* move cursor for the next button, feel free to tweak this if it's too much for your button's size */
//ImGui::SetCursorScreenPos(pos); feel free to uncomment this if you want, i'm using imgui::spacing() rn
ImGui::PopID();
return b;
}
void Bun::NavigationPage(const char* name, const ImVec2& size, std::function fn) {
ImGui::PushID(name);
/* colors */
ImGuiStyle& style = ImGui::GetStyle();
ImVec4 background = style.Colors[ImGuiCol_Button];
/* drawing */
ImDrawList* list = ImGui::GetWindowDrawList();
ImVec2 pos = ImGui::GetCursorScreenPos();
list->AddRectFilled(pos, ImVec2(pos.x + size.x, pos.y + size.y), ImGui::ColorConvertFloat4ToU32(background), 2.0f);
ImGui::SetCursorScreenPos(ImVec2(pos.x + 10, pos.y + 10));
ImGui::BeginChild("scroll", ImVec2(size.x - 20, size.y - 20), false, ImGuiWindowFlags_NoScrollbar);
fn();
ImGui::EndChild();
ImGui::PopID();
}
```
## /Sinewave/imgui/bun/bunui.h
```h path="/Sinewave/imgui/bun/bunui.h"
#pragma once
#include "imgui.h"
#include "imgui_impl_win32.h"
#include "imgui_internal.h"
#include
namespace Bun {
static int selectedPage;
static int selectedTab;
void DarkTheme();
bool Button(const char* name, const ImVec2& size = ImVec2(110, 35), const ImVec2& pos = ImGui::GetCursorScreenPos());
void Checkbox();
void Slider();
void Section();
void NavigationBar(const char* name, const ImVec2& size);
bool NavigationButton(const char* name, const ImVec2& size);
/* we draw each rect for a page, and after that we position the cursor inside of the rect, then call the function that draws the content/elements of the page */
void NavigationPage(const char* name, const ImVec2& size, std::function fn);
void TabBar();
void TabButton();
void Notification(); /* todo: just create a new window, position it on the bottom right, and sum other stuff */
}
```
## /Sinewave/imgui/imconfig.h
```h path="/Sinewave/imgui/imconfig.h"
//-----------------------------------------------------------------------------
// DEAR IMGUI COMPILE-TIME OPTIONS
// Runtime options (clipboard callbacks, enabling various features, etc.) can generally be set via the ImGuiIO structure.
// You can use ImGui::SetAllocatorFunctions() before calling ImGui::CreateContext() to rewire memory allocation functions.
//-----------------------------------------------------------------------------
// A) You may edit imconfig.h (and not overwrite it when updating Dear ImGui, or maintain a patch/rebased branch with your modifications to it)
// B) or '#define IMGUI_USER_CONFIG "my_imgui_config.h"' in your project and then add directives in your own file without touching this template.
//-----------------------------------------------------------------------------
// You need to make sure that configuration settings are defined consistently _everywhere_ Dear ImGui is used, which include the imgui*.cpp
// files but also _any_ of your code that uses Dear ImGui. This is because some compile-time options have an affect on data structures.
// Defining those options in imconfig.h will ensure every compilation unit gets to see the same data structure layouts.
// Call IMGUI_CHECKVERSION() from your .cpp file to verify that the data structures your files are using are matching the ones imgui.cpp is using.
//-----------------------------------------------------------------------------
#pragma once
//---- Define assertion handler. Defaults to calling assert().
// If your macro uses multiple statements, make sure is enclosed in a 'do { .. } while (0)' block so it can be used as a single statement.
//#define IM_ASSERT(_EXPR) MyAssert(_EXPR)
//#define IM_ASSERT(_EXPR) ((void)(_EXPR)) // Disable asserts
//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows
// Using Dear ImGui via a shared library is not recommended, because of function call overhead and because we don't guarantee backward nor forward ABI compatibility.
// - Windows DLL users: heaps and globals are not shared across DLL boundaries! You will need to call SetCurrentContext() + SetAllocatorFunctions()
// for each static/DLL boundary you are calling from. Read "Context and Memory Allocators" section of imgui.cpp for more details.
//#define IMGUI_API __declspec(dllexport) // MSVC Windows: DLL export
//#define IMGUI_API __declspec(dllimport) // MSVC Windows: DLL import
//#define IMGUI_API __attribute__((visibility("default"))) // GCC/Clang: override visibility when set is hidden
//---- Don't define obsolete functions/enums/behaviors. Consider enabling from time to time after updating to clean your code of obsolete function/names.
//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS
//---- Disable all of Dear ImGui or don't implement standard windows/tools.
// It is very strongly recommended to NOT disable the demo windows and debug tool during development. They are extremely useful in day to day work. Please read comments in imgui_demo.cpp.
//#define IMGUI_DISABLE // Disable everything: all headers and source files will be empty.
//#define IMGUI_DISABLE_DEMO_WINDOWS // Disable demo windows: ShowDemoWindow()/ShowStyleEditor() will be empty.
//#define IMGUI_DISABLE_DEBUG_TOOLS // Disable metrics/debugger and other debug tools: ShowMetricsWindow(), ShowDebugLogWindow() and ShowIDStackToolWindow() will be empty.
//---- Don't implement some functions to reduce linkage requirements.
//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS // [Win32] Don't implement default clipboard handler. Won't use and link with OpenClipboard/GetClipboardData/CloseClipboard etc. (user32.lib/.a, kernel32.lib/.a)
//#define IMGUI_ENABLE_WIN32_DEFAULT_IME_FUNCTIONS // [Win32] [Default with Visual Studio] Implement default IME handler (require imm32.lib/.a, auto-link for Visual Studio, -limm32 on command-line for MinGW)
//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS // [Win32] [Default with non-Visual Studio compilers] Don't implement default IME handler (won't require imm32.lib/.a)
//#define IMGUI_DISABLE_WIN32_FUNCTIONS // [Win32] Won't use and link with any Win32 function (clipboard, IME).
//#define IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS // [OSX] Implement default OSX clipboard handler (need to link with '-framework ApplicationServices', this is why this is not the default).
//#define IMGUI_DISABLE_DEFAULT_SHELL_FUNCTIONS // Don't implement default platform_io.Platform_OpenInShellFn() handler (Win32: ShellExecute(), require shell32.lib/.a, Mac/Linux: use system("")).
//#define IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS // Don't implement ImFormatString/ImFormatStringV so you can implement them yourself (e.g. if you don't want to link with vsnprintf)
//#define IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS // Don't implement ImFabs/ImSqrt/ImPow/ImFmod/ImCos/ImSin/ImAcos/ImAtan2 so you can implement them yourself.
//#define IMGUI_DISABLE_FILE_FUNCTIONS // Don't implement ImFileOpen/ImFileClose/ImFileRead/ImFileWrite and ImFileHandle at all (replace them with dummies)
//#define IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS // Don't implement ImFileOpen/ImFileClose/ImFileRead/ImFileWrite and ImFileHandle so you can implement them yourself if you don't want to link with fopen/fclose/fread/fwrite. This will also disable the LogToTTY() function.
//#define IMGUI_DISABLE_DEFAULT_ALLOCATORS // Don't implement default allocators calling malloc()/free() to avoid linking with them. You will need to call ImGui::SetAllocatorFunctions().
//#define IMGUI_DISABLE_DEFAULT_FONT // Disable default embedded font (ProggyClean.ttf), remove ~9.5 KB from output binary. AddFontDefault() will assert.
//#define IMGUI_DISABLE_SSE // Disable use of SSE intrinsics even if available
//---- Enable Test Engine / Automation features.
//#define IMGUI_ENABLE_TEST_ENGINE // Enable imgui_test_engine hooks. Generally set automatically by include "imgui_te_config.h", see Test Engine for details.
//---- Include imgui_user.h at the end of imgui.h as a convenience
// May be convenient for some users to only explicitly include vanilla imgui.h and have extra stuff included.
//#define IMGUI_INCLUDE_IMGUI_USER_H
//#define IMGUI_USER_H_FILENAME "my_folder/my_imgui_user.h"
//---- Pack vertex colors as BGRA8 instead of RGBA8 (to avoid converting from one to another). Need dedicated backend support.
//#define IMGUI_USE_BGRA_PACKED_COLOR
//---- Use legacy CRC32-adler tables (used before 1.91.6), in order to preserve old .ini data that you cannot afford to invalidate.
//#define IMGUI_USE_LEGACY_CRC32_ADLER
//---- Use 32-bit for ImWchar (default is 16-bit) to support Unicode planes 1-16. (e.g. point beyond 0xFFFF like emoticons, dingbats, symbols, shapes, ancient languages, etc...)
//#define IMGUI_USE_WCHAR32
//---- Avoid multiple STB libraries implementations, or redefine path/filenames to prioritize another version
// By default the embedded implementations are declared static and not available outside of Dear ImGui sources files.
//#define IMGUI_STB_TRUETYPE_FILENAME "my_folder/stb_truetype.h"
//#define IMGUI_STB_RECT_PACK_FILENAME "my_folder/stb_rect_pack.h"
//#define IMGUI_STB_SPRINTF_FILENAME "my_folder/stb_sprintf.h" // only used if IMGUI_USE_STB_SPRINTF is defined.
//#define IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION
//#define IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION
//#define IMGUI_DISABLE_STB_SPRINTF_IMPLEMENTATION // only disabled if IMGUI_USE_STB_SPRINTF is defined.
//---- Use stb_sprintf.h for a faster implementation of vsnprintf instead of the one from libc (unless IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS is defined)
// Compatibility checks of arguments and formats done by clang and GCC will be disabled in order to support the extra formats provided by stb_sprintf.h.
//#define IMGUI_USE_STB_SPRINTF
//---- Use FreeType to build and rasterize the font atlas (instead of stb_truetype which is embedded by default in Dear ImGui)
// Requires FreeType headers to be available in the include path. Requires program to be compiled with 'misc/freetype/imgui_freetype.cpp' (in this repository) + the FreeType library (not provided).
// On Windows you may use vcpkg with 'vcpkg install freetype --triplet=x64-windows' + 'vcpkg integrate install'.
//#define IMGUI_ENABLE_FREETYPE
//---- Use FreeType + plutosvg or lunasvg to render OpenType SVG fonts (SVGinOT)
// Only works in combination with IMGUI_ENABLE_FREETYPE.
// - plutosvg is currently easier to install, as e.g. it is part of vcpkg. It will support more fonts and may load them faster. See misc/freetype/README for instructions.
// - Both require headers to be available in the include path + program to be linked with the library code (not provided).
// - (note: lunasvg implementation is based on Freetype's rsvg-port.c which is licensed under CeCILL-C Free Software License Agreement)
//#define IMGUI_ENABLE_FREETYPE_PLUTOSVG
//#define IMGUI_ENABLE_FREETYPE_LUNASVG
//---- Use stb_truetype to build and rasterize the font atlas (default)
// The only purpose of this define is if you want force compilation of the stb_truetype backend ALONG with the FreeType backend.
//#define IMGUI_ENABLE_STB_TRUETYPE
//---- Define constructor and implicit cast operators to convert back<>forth between your math types and ImVec2/ImVec4.
// This will be inlined as part of ImVec2 and ImVec4 class declarations.
/*
#define IM_VEC2_CLASS_EXTRA \
constexpr ImVec2(const MyVec2& f) : x(f.x), y(f.y) {} \
operator MyVec2() const { return MyVec2(x,y); }
#define IM_VEC4_CLASS_EXTRA \
constexpr ImVec4(const MyVec4& f) : x(f.x), y(f.y), z(f.z), w(f.w) {} \
operator MyVec4() const { return MyVec4(x,y,z,w); }
*/
//---- ...Or use Dear ImGui's own very basic math operators.
//#define IMGUI_DEFINE_MATH_OPERATORS
//---- Use 32-bit vertex indices (default is 16-bit) is one way to allow large meshes with more than 64K vertices.
// Your renderer backend will need to support it (most example renderer backends support both 16/32-bit indices).
// Another way to allow large meshes while keeping 16-bit indices is to handle ImDrawCmd::VtxOffset in your renderer.
// Read about ImGuiBackendFlags_RendererHasVtxOffset for details.
//#define ImDrawIdx unsigned int
//---- Override ImDrawCallback signature (will need to modify renderer backends accordingly)
//struct ImDrawList;
//struct ImDrawCmd;
//typedef void (*MyImDrawCallback)(const ImDrawList* draw_list, const ImDrawCmd* cmd, void* my_renderer_user_data);
//#define ImDrawCallback MyImDrawCallback
//---- Debug Tools: Macro to break in Debugger (we provide a default implementation of this in the codebase)
// (use 'Metrics->Tools->Item Picker' to pick widgets with the mouse and break into them for easy debugging.)
//#define IM_DEBUG_BREAK IM_ASSERT(0)
//#define IM_DEBUG_BREAK __debugbreak()
//---- Debug Tools: Enable slower asserts
//#define IMGUI_DEBUG_PARANOID
//---- Tip: You can add extra functions within the ImGui:: namespace from anywhere (e.g. your own sources/header files)
/*
namespace ImGui
{
void MyFunction(const char* name, MyMatrix44* mtx);
}
*/
```
The content has been capped at 50000 tokens, and files over NaN bytes have been omitted. The user could consider applying other filters to refine the result. The better and more specific the context, the better the LLM can follow instructions. If the context seems verbose, the user can refine the filter using uithub. Thank you for using https://uithub.com - Perfect LLM context for any GitHub repo.