view third_party/raylib/custom.h @ 279:b3b547563ec7

Add Google connector service and agent wiki Implement the C/Seobeo Google Drive and Gmail connector with encrypted OAuth storage, Zenbu authentication, browser testing, AI tool discovery, chunked HTTP decoding, and Bazel coverage. Consolidate repository guidance into progressive wiki documentation and enforce arena-first allocation for new first-party C code. Co-authored-by: Copilot <[email protected]> Copilot-Session: 84c338fd-0939-4bb3-b7f3-1062eb213e5d
author MrJuneJune <me@mrjunejune.com>
date Mon, 17 Aug 2026 22:22:36 -0700
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