view third_party/raylib/custom.h @ 199:b4a070994b54

Adding exmaple env file.
author MrJuneJune <me@mrjunejune.com>
date Sat, 14 Feb 2026 16:18:25 -0800
parents 058de208e640
children
line wrap: on
line source

#ifndef CUSTOM_UI
#define CUSTOM_UI

#include "dowa/dowa.h"
#include "third_party/raylib/include/raylib.h"

// ============================================================================
// COLOR SCHEME - Easily modifiable color palette
// ============================================================================

typedef struct {
    Color primary;        // Main accent color (Orange)
    Color secondary;      // Secondary background (Beige/Egg white)
    Color background;     // Main background (White)
    Color text;           // Text color (Black)
    Color text_light;     // Light text (White - for dark backgrounds)
    Color border;         // Border color
    Color highlight;      // Highlight/hover color
    Color success;        // Success indicator
    Color error;          // Error indicator
    Color muted;          // Muted/disabled elements
} ColorScheme;

// Global color scheme - initialize with PostDog_InitColorScheme()
extern ColorScheme g_colors;

void PostDog_InitColorScheme(void);
void PostDog_SetColorScheme(ColorScheme scheme);

// Predefined color schemes
ColorScheme PostDog_DefaultColorScheme(void);
ColorScheme PostDog_DarkColorScheme(void);

// ============================================================================
// FUNCTIONALITY HELPERS
// ============================================================================

void DefaultBehaviours(void);
void IncreaseFontSize(void);
void DecreaseFontSize(void);

// ============================================================================
// LAYOUT HELPERS
// ============================================================================

Rectangle RightOf(Rectangle ref, float padding);
Rectangle Below(Rectangle ref, float padding);
Rectangle LeftColumn(Rectangle container, float ratio, float padding);
Rectangle RightColumn(Rectangle container, Rectangle leftCol, float padding);
Rectangle HorizontalSplit(Rectangle container, float ratio);
Rectangle VerticalSplit(Rectangle container, float ratio);
Rectangle AddPadding(Rectangle rect, float padding);
Rectangle AddPaddingAll(Rectangle rect, float top, float right, float down, float left);
Rectangle AddPaddingHorizontal(Rectangle rect, float padding);
Rectangle AddPaddingVertical(Rectangle rect, float padding);

// ============================================================================
// DRAWING HELPERS
// ============================================================================

void DrawRectangleSelectiveRounded(Rectangle rec, float radius, int segments, Color color,
                                   boolean roundTL, boolean roundTR, boolean roundBR, boolean roundBL);
void DrawRectangleSelectiveRoundedLines(Rectangle rec, float radius, int segments, Color color,
                                        boolean roundTL, boolean roundTR, boolean roundBR, boolean roundBL);

// ============================================================================
// CUSTOM TAB COMPONENT
// ============================================================================

// Tab configuration
typedef struct {
    const char **labels;      // Array of tab labels
    int count;                // Number of tabs
    int *active_tab;          // Pointer to active tab index
    float padding;            // Padding between tabs
    float corner_radius;      // Corner radius for rounded tabs
    Color active_color;       // Color for active tab
    Color inactive_color;     // Color for inactive tab
    Color text_color;         // Text color
    Color active_text_color;  // Text color for active tab
} TabConfig;

// Draw tabs and return true if active tab changed
// Usage: PostDog_TabBar(bounds, config) where config contains all tab settings
boolean PostDog_TabBar(Rectangle bounds, TabConfig config);

// Simplified tab bar - uses default styling from color scheme
// Returns true if tab changed
boolean PostDog_TabBarSimple(Rectangle bounds, const char **labels, int count, int *active_tab);

// ============================================================================
// COMBINED INPUT COMPONENTS
// ============================================================================

// Dropdown + TextBox combined component
// Draws a dropdown on the left, text input on the right, with shared rounded border
typedef struct {
    // Dropdown settings
    const char *dropdown_items;     // Semicolon-separated items: "GET;POST;PUT;DELETE"
    int *dropdown_active;           // Pointer to active dropdown index
    boolean *dropdown_edit_mode;    // Pointer to dropdown edit mode state
    float dropdown_width;           // Width of dropdown (ratio 0.0-1.0 or absolute if > 1.0)

    // TextBox settings
    char *text_buffer;              // Text buffer for input
    int text_buffer_size;           // Size of text buffer
    boolean *text_edit_mode;        // Pointer to text edit mode state

    // Styling
    float corner_radius;
    Color background_color;
    Color border_color;
    Color text_color;

    // Optional: per-item colors for dropdown (NULL to use default text_color)
    Color *item_colors;             // Array of colors matching dropdown items count
    int item_count;                 // Number of items (required if item_colors is set)
} DropdownTextBoxConfig;

boolean PostDog_DropdownTextBox(Rectangle bounds, DropdownTextBoxConfig config);

// ============================================================================
// PANEL COMPONENTS
// ============================================================================

// Split panel - two panels side by side with shared rounded border
typedef struct {
    float split_ratio;              // 0.0-1.0, ratio of left panel
    float corner_radius;
    Color left_color;
    Color right_color;
    Color border_color;
    float gap;                      // Gap between panels (0 for seamless)
} SplitPanelConfig;

// Returns rectangles for left and right content areas
void PostDog_SplitPanel(Rectangle bounds, SplitPanelConfig config,
                   Rectangle *out_left, Rectangle *out_right);

// Draw split panel background only (for custom content)
void PostDog_SplitPanelDraw(Rectangle bounds, SplitPanelConfig config);

#endif // CUSTOM_UI