//! Gradient Demo - Linear and Radial Gradients //! //! Demonstrates gradient fills for rectangles, circles and ellipses. const std = @import("std"); const zcatpdf = @import("zcatpdf"); const Pdf = zcatpdf.Pdf; const Color = zcatpdf.Color; const GradientDirection = zcatpdf.GradientDirection; pub fn main() !void { var gpa = std.heap.GeneralPurposeAllocator(.{}){}; defer _ = gpa.deinit(); const allocator = gpa.allocator(); var pdf = Pdf.init(allocator, .{}); defer pdf.deinit(); pdf.setTitle("Gradient Demo"); pdf.setAuthor("zcatpdf"); var page = try pdf.addPage(.{}); // Title try page.setFont(.helvetica_bold, 28); page.setFillColor(Color.hex(0x333333)); try page.drawText(50, 780, "Gradient Demo"); try page.setFont(.helvetica, 12); page.setFillColor(Color.hex(0x666666)); try page.drawText(50, 760, "Linear and radial gradients in zcatpdf"); // Section 1: Linear Gradients try page.setFont(.helvetica_bold, 16); page.setFillColor(Color.black); try page.drawText(50, 720, "Linear Gradients"); // Horizontal gradient (left to right) try page.setFont(.helvetica, 10); try page.drawText(50, 700, "Horizontal (Red to Blue)"); try page.linearGradientRect(50, 620, 150, 70, Color.red, Color.blue, .horizontal); // Vertical gradient (bottom to top) try page.drawText(220, 700, "Vertical (Green to Yellow)"); try page.linearGradientRect(220, 620, 150, 70, Color.green, Color.yellow, .vertical); // Diagonal gradient try page.drawText(390, 700, "Diagonal (Purple to Cyan)"); try page.linearGradientRect(390, 620, 150, 70, Color.hex(0x800080), Color.cyan, .diagonal); // Section 2: Radial Gradients try page.setFont(.helvetica_bold, 16); try page.drawText(50, 580, "Radial Gradients"); // Radial gradient circle try page.setFont(.helvetica, 10); try page.drawText(50, 555, "Circle (White to Blue)"); try page.radialGradientCircle(125, 490, 50, Color.white, Color.blue); // Radial gradient with warm colors try page.drawText(220, 555, "Circle (Yellow to Red)"); try page.radialGradientCircle(295, 490, 50, Color.yellow, Color.red); // Dark theme circle try page.drawText(390, 555, "Circle (Cyan to Dark)"); try page.radialGradientCircle(465, 490, 50, Color.cyan, Color.hex(0x001122)); // Section 3: Ellipse Gradients try page.setFont(.helvetica_bold, 16); try page.drawText(50, 410, "Ellipse Gradients"); // Horizontal ellipse try page.setFont(.helvetica, 10); try page.drawText(50, 385, "Horizontal Ellipse"); try page.radialGradientEllipse(125, 330, 70, 40, Color.white, Color.hex(0xFF6600)); // Vertical ellipse try page.drawText(220, 385, "Vertical Ellipse"); try page.radialGradientEllipse(295, 330, 40, 55, Color.hex(0xFFFF99), Color.hex(0x006600)); // Wide ellipse try page.drawText(390, 385, "Wide Ellipse"); try page.radialGradientEllipse(465, 330, 80, 35, Color.hex(0xFFCCFF), Color.hex(0x660066)); // Section 4: Real-world examples try page.setFont(.helvetica_bold, 16); try page.drawText(50, 250, "Real-world Examples"); // Button effect with gradient try page.setFont(.helvetica, 10); try page.drawText(50, 225, "Button Effect"); try page.linearGradientRect(50, 180, 120, 35, Color.hex(0x4A90D9), Color.hex(0x2E5C8A), .vertical); // Button text try page.setFont(.helvetica_bold, 12); page.setFillColor(Color.white); try page.drawText(78, 193, "Click Me"); // Metallic effect try page.setFont(.helvetica, 10); page.setFillColor(Color.black); try page.drawText(200, 225, "Metallic Bar"); try page.linearGradientRect(200, 180, 120, 35, Color.hex(0xC0C0C0), Color.hex(0x606060), .vertical); // Sunset gradient try page.drawText(350, 225, "Sunset"); try page.linearGradientRect(350, 180, 120, 35, Color.hex(0xFF6600), Color.hex(0x330066), .horizontal); // Orb/sphere effect try page.drawText(500, 225, "Sphere"); try page.radialGradientCircle(535, 197, 25, Color.white, Color.hex(0x0066CC)); // Footer try page.setFont(.helvetica_oblique, 10); page.setFillColor(Color.hex(0x999999)); try page.drawText(50, 50, "Generated with zcatpdf - Linear and Radial Gradient Support"); try pdf.save("gradient_demo.pdf"); std.debug.print("Generated gradient_demo.pdf\n", .{}); }