Add WebView support via WebKitGTK
Implements Priority 4 item: WebView via WebKitGTK New files: - Interop/WebKitGtk.cs - P/Invoke bindings for WebKitGTK library - Views/LinuxWebView.cs - WebKitGTK-based WebView platform control - Handlers/WebViewHandler.Linux.cs - MAUI handler for WebView on Linux - samples_temp/WebViewDemo/ - Demo app for WebView functionality Features: - Full HTML5/CSS3/JavaScript support via WebKitGTK - Navigation (back/forward/reload) - URL and HTML source loading - JavaScript evaluation - Navigation events (Navigating/Navigated) - Automatic GTK event processing Requirements: - libwebkit2gtk-4.1-0 package on target Linux system 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
203
samples_temp/ShellDemo/Pages/ControlsPage.cs
Normal file
203
samples_temp/ShellDemo/Pages/ControlsPage.cs
Normal file
@@ -0,0 +1,203 @@
|
||||
// ControlsPage - Demonstrates various MAUI controls
|
||||
|
||||
using Microsoft.Maui.Controls;
|
||||
using Microsoft.Maui.Graphics;
|
||||
|
||||
namespace ShellDemo;
|
||||
|
||||
public class ControlsPage : ContentPage
|
||||
{
|
||||
public ControlsPage()
|
||||
{
|
||||
Title = "Controls";
|
||||
|
||||
Content = new ScrollView
|
||||
{
|
||||
Content = new VerticalStackLayout
|
||||
{
|
||||
Padding = new Thickness(20),
|
||||
Spacing = 15,
|
||||
Children =
|
||||
{
|
||||
new Label
|
||||
{
|
||||
Text = "Control Gallery",
|
||||
FontSize = 24,
|
||||
FontAttributes = FontAttributes.Bold
|
||||
},
|
||||
|
||||
// Buttons
|
||||
CreateSection("Buttons", new View[]
|
||||
{
|
||||
CreateButtonRow()
|
||||
}),
|
||||
|
||||
// CheckBox & Switch
|
||||
CreateSection("Selection", new View[]
|
||||
{
|
||||
CreateCheckBoxRow(),
|
||||
CreateSwitchRow()
|
||||
}),
|
||||
|
||||
// Slider
|
||||
CreateSection("Slider", new View[]
|
||||
{
|
||||
CreateSliderRow()
|
||||
}),
|
||||
|
||||
// Picker
|
||||
CreateSection("Picker", new View[]
|
||||
{
|
||||
CreatePickerRow()
|
||||
}),
|
||||
|
||||
// Progress
|
||||
CreateSection("Progress", new View[]
|
||||
{
|
||||
CreateProgressRow()
|
||||
})
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private Frame CreateSection(string title, View[] content)
|
||||
{
|
||||
var layout = new VerticalStackLayout { Spacing = 10 };
|
||||
layout.Children.Add(new Label
|
||||
{
|
||||
Text = title,
|
||||
FontSize = 18,
|
||||
FontAttributes = FontAttributes.Bold
|
||||
});
|
||||
|
||||
foreach (var view in content)
|
||||
{
|
||||
layout.Children.Add(view);
|
||||
}
|
||||
|
||||
return new Frame
|
||||
{
|
||||
CornerRadius = 8,
|
||||
Padding = new Thickness(15),
|
||||
BackgroundColor = Colors.White,
|
||||
Content = layout
|
||||
};
|
||||
}
|
||||
|
||||
private View CreateButtonRow()
|
||||
{
|
||||
var resultLabel = new Label { TextColor = Colors.Gray, FontSize = 12 };
|
||||
|
||||
var layout = new VerticalStackLayout { Spacing = 10 };
|
||||
|
||||
var buttonRow = new HorizontalStackLayout { Spacing = 10 };
|
||||
|
||||
var primaryBtn = new Button { Text = "Primary", BackgroundColor = Color.FromArgb("#2196F3"), TextColor = Colors.White };
|
||||
primaryBtn.Clicked += (s, e) => resultLabel.Text = "Primary clicked!";
|
||||
|
||||
var successBtn = new Button { Text = "Success", BackgroundColor = Color.FromArgb("#4CAF50"), TextColor = Colors.White };
|
||||
successBtn.Clicked += (s, e) => resultLabel.Text = "Success clicked!";
|
||||
|
||||
var dangerBtn = new Button { Text = "Danger", BackgroundColor = Color.FromArgb("#F44336"), TextColor = Colors.White };
|
||||
dangerBtn.Clicked += (s, e) => resultLabel.Text = "Danger clicked!";
|
||||
|
||||
buttonRow.Children.Add(primaryBtn);
|
||||
buttonRow.Children.Add(successBtn);
|
||||
buttonRow.Children.Add(dangerBtn);
|
||||
|
||||
layout.Children.Add(buttonRow);
|
||||
layout.Children.Add(resultLabel);
|
||||
|
||||
return layout;
|
||||
}
|
||||
|
||||
private View CreateCheckBoxRow()
|
||||
{
|
||||
var layout = new HorizontalStackLayout { Spacing = 20 };
|
||||
|
||||
var cb1 = new CheckBox { IsChecked = true };
|
||||
var cb2 = new CheckBox { IsChecked = false };
|
||||
|
||||
layout.Children.Add(cb1);
|
||||
layout.Children.Add(new Label { Text = "Option 1", VerticalOptions = LayoutOptions.Center });
|
||||
layout.Children.Add(cb2);
|
||||
layout.Children.Add(new Label { Text = "Option 2", VerticalOptions = LayoutOptions.Center });
|
||||
|
||||
return layout;
|
||||
}
|
||||
|
||||
private View CreateSwitchRow()
|
||||
{
|
||||
var label = new Label { Text = "Off", VerticalOptions = LayoutOptions.Center };
|
||||
var sw = new Switch { IsToggled = false };
|
||||
sw.Toggled += (s, e) => label.Text = e.Value ? "On" : "Off";
|
||||
|
||||
return new HorizontalStackLayout
|
||||
{
|
||||
Spacing = 10,
|
||||
Children = { sw, label }
|
||||
};
|
||||
}
|
||||
|
||||
private View CreateSliderRow()
|
||||
{
|
||||
var label = new Label { Text = "Value: 50" };
|
||||
var slider = new Slider { Minimum = 0, Maximum = 100, Value = 50 };
|
||||
slider.ValueChanged += (s, e) => label.Text = $"Value: {(int)e.NewValue}";
|
||||
|
||||
return new VerticalStackLayout
|
||||
{
|
||||
Spacing = 5,
|
||||
Children = { slider, label }
|
||||
};
|
||||
}
|
||||
|
||||
private View CreatePickerRow()
|
||||
{
|
||||
var label = new Label { Text = "Selected: (none)", TextColor = Colors.Gray };
|
||||
var picker = new Picker { Title = "Select a fruit" };
|
||||
picker.Items.Add("Apple");
|
||||
picker.Items.Add("Banana");
|
||||
picker.Items.Add("Cherry");
|
||||
picker.Items.Add("Date");
|
||||
picker.Items.Add("Elderberry");
|
||||
|
||||
picker.SelectedIndexChanged += (s, e) =>
|
||||
{
|
||||
if (picker.SelectedIndex >= 0)
|
||||
label.Text = $"Selected: {picker.Items[picker.SelectedIndex]}";
|
||||
};
|
||||
|
||||
return new VerticalStackLayout
|
||||
{
|
||||
Spacing = 5,
|
||||
Children = { picker, label }
|
||||
};
|
||||
}
|
||||
|
||||
private View CreateProgressRow()
|
||||
{
|
||||
var progress = new ProgressBar { Progress = 0.7 };
|
||||
var activity = new ActivityIndicator { IsRunning = true };
|
||||
|
||||
return new VerticalStackLayout
|
||||
{
|
||||
Spacing = 10,
|
||||
Children =
|
||||
{
|
||||
progress,
|
||||
new Label { Text = "70% Complete", FontSize = 12, TextColor = Colors.Gray },
|
||||
new HorizontalStackLayout
|
||||
{
|
||||
Spacing = 10,
|
||||
Children =
|
||||
{
|
||||
activity,
|
||||
new Label { Text = "Loading...", VerticalOptions = LayoutOptions.Center, TextColor = Colors.Gray }
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user