Skip to content

Commit

Permalink
Ability to maximize/resize browsers
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexandru Macocian committed Apr 8, 2021
1 parent 1f3cd9d commit eb5552b
Show file tree
Hide file tree
Showing 8 changed files with 177 additions and 16 deletions.
7 changes: 6 additions & 1 deletion Daybreak/Controls/ChromiumBrowserWrapper.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,14 @@
BorderThickness="1" VerticalAlignment="Center" VerticalContentAlignment="Center"
BorderBrush="{Binding ElementName=_this, Path=Foreground, Mode=OneWay}"
PreviewKeyDown="TextBox_PreviewKeyDown"></TextBox>
<local:StarGlyph Grid.Column="2" Height="30" Width="30" Margin="5"
<StackPanel Grid.Column="2" Orientation="Horizontal">
<local:StarGlyph Height="30" Width="30" Margin="5"
Foreground="{Binding ElementName=_this, Path=Foreground, Mode=OneWay}"
Clicked="StarGlyph_Clicked" x:Name="FavoriteButton"></local:StarGlyph>
<local:MaximizeButton Height="30" Width="30" Margin="5"
Foreground="{Binding ElementName=_this, Path=Foreground, Mode=OneWay}"
Clicked="MaximizeButton_Clicked"></local:MaximizeButton>
</StackPanel>
</Grid>
</Grid>
</UserControl>
41 changes: 37 additions & 4 deletions Daybreak/Controls/ChromiumBrowserWrapper.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public partial class ChromiumBrowserWrapper : UserControl
public readonly static DependencyProperty AddressBarReadonlyProperty = DependencyPropertyExtensions.Register<ChromiumBrowserWrapper, bool>(nameof(AddressBarReadonly));

public event EventHandler<string> FavoriteUriChanged;
public event EventHandler MaximizeClicked;

private readonly CoreWebView2Environment coreWebView2Environment;
private readonly IConfigurationManager configurationManager;
Expand Down Expand Up @@ -62,6 +63,11 @@ protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
}
}

public void ReinitializeBrowser()
{
this.InitializeBrowser();
}

private async void InitializeBrowser()
{
await this.WebBrowser.EnsureCoreWebView2Async(this.coreWebView2Environment);
Expand All @@ -76,7 +82,8 @@ private void TextBox_PreviewKeyDown(object sender, System.Windows.Input.KeyEvent
if (e.Key == System.Windows.Input.Key.Enter)
{
var newAddress = sender.As<TextBox>().Text;
if (string.IsNullOrWhiteSpace(newAddress))
newAddress = SanitizeAddress(newAddress);
if (newAddress is null)
{
return;
}
Expand All @@ -95,19 +102,19 @@ private void UserControl_Unloaded(object sender, RoutedEventArgs e)
private void BackButton_Clicked(object sender, EventArgs e)
{
this.WebBrowser.GoBack();
this.Address = this.WebBrowser.Source.AbsoluteUri;
this.Address = this.WebBrowser.Source.ToString();
}

private void ForwardButton_Clicked(object sender, EventArgs e)
{
this.WebBrowser.GoForward();
this.Address = this.WebBrowser.Source.AbsoluteUri;
this.Address = this.WebBrowser.Source.ToString();
}

private void RefreshGlyph_Clicked(object sender, EventArgs e)
{
this.WebBrowser.Reload();
this.Address = this.WebBrowser.Source.AbsoluteUri;
this.Address = this.WebBrowser.Source.ToString();
}

private void CancelGlyph_Clicked(object sender, EventArgs e)
Expand All @@ -121,6 +128,11 @@ private void StarGlyph_Clicked(object sender, EventArgs e)
this.FavoriteUriChanged?.Invoke(this, this.FavoriteAddress);
}

private void MaximizeButton_Clicked(object sender, EventArgs e)
{
this.MaximizeClicked?.Invoke(this, e);
}

private void CheckFavoriteAddress()
{
if (this.Address == this.FavoriteAddress)
Expand All @@ -132,5 +144,26 @@ private void CheckFavoriteAddress()
this.FavoriteButton.IsEnabled = true;
}
}

private static string SanitizeAddress(string address)
{
if (string.IsNullOrWhiteSpace(address))
{
return null;
}

if (address.StartsWith("www") is false &&
address.StartsWith("http") is false)
{
address = "https://www." + address;
}
else if (address.StartsWith("www"))
{
address = "https://" + address;
}

Uri.TryCreate(address, UriKind.Absolute, out var uri);
return uri?.ToString();
}
}
}
39 changes: 39 additions & 0 deletions Daybreak/Controls/MaximizeButton.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<UserControl x:Class="Daybreak.Controls.MaximizeButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Daybreak.Controls"
x:Name="_this"
mc:Ignorable="d"
d:DesignHeight="50" d:DesignWidth="50">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.3*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="0.3*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="0.3*" />
<RowDefinition Height="1*" />
<RowDefinition Height="0.3*" />
</Grid.RowDefinitions>
<Ellipse x:Name="BackgroundEllipse" Fill="{Binding ElementName=_this, Path=Foreground, Mode=OneWay}"
Opacity="0.6" Visibility="Hidden" Grid.RowSpan="3" Grid.ColumnSpan="3"></Ellipse>
<Viewbox Grid.Row="1" Grid.Column="1">
<Grid>
<Path Fill="{Binding ElementName=_this, Path=Foreground, Mode=OneWay}"
Data="m30,0l-24,0a5.9966,5.9966 0 0 0 -6,6l0,24a6,6 0 0 0 12,0l0,-18l18,0a6,6 0 0 0 0,-12z"></Path>
<Path Fill="{Binding ElementName=_this, Path=Foreground, Mode=OneWay}"
Data="m90,0l-24,0a6,6 0 0 0 0,12l18,0l0,18a6,6 0 0 0 12,0l0,-24a5.9966,5.9966 0 0 0 -6,-6z"></Path>
<Path Fill="{Binding ElementName=_this, Path=Foreground, Mode=OneWay}"
Data="m30,84l-18,0l0,-18a6,6 0 0 0 -12,0l0,24a5.9966,5.9966 0 0 0 6,6l24,0a6,6 0 0 0 0,-12z"></Path>
<Path Fill="{Binding ElementName=_this, Path=Foreground, Mode=OneWay}"
Data="m90,60a5.9966,5.9966 0 0 0 -6,6l0,18l-18,0a6,6 0 0 0 0,12l24,0a5.9966,5.9966 0 0 0 6,-6l0,-24a5.9966,5.9966 0 0 0 -6,-6z"></Path>
</Grid>
</Viewbox>
<Ellipse Stroke="{Binding ElementName=_this, Path=Foreground, Mode=OneWay}" StrokeThickness="1" Fill="Transparent"
MouseEnter="Ellipse_MouseEnter" MouseLeave="Ellipse_MouseLeave" MouseLeftButtonDown="Ellipse_MouseLeftButtonDown"
Grid.RowSpan="3" Grid.ColumnSpan="3"></Ellipse>
</Grid>
</UserControl>
37 changes: 37 additions & 0 deletions Daybreak/Controls/MaximizeButton.xaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using System;
using System.Windows.Controls;
using System.Windows.Input;

namespace Daybreak.Controls
{
/// <summary>
/// Interaction logic for SaveButton.xaml
/// </summary>
public partial class MaximizeButton : UserControl
{
public event EventHandler Clicked;

public MaximizeButton()
{
InitializeComponent();
}

private void Ellipse_MouseEnter(object sender, MouseEventArgs e)
{
BackgroundEllipse.Visibility = System.Windows.Visibility.Visible;
}

private void Ellipse_MouseLeave(object sender, MouseEventArgs e)
{
BackgroundEllipse.Visibility = System.Windows.Visibility.Hidden;
}

private void Ellipse_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left)
{
Clicked?.Invoke(this, e);
}
}
}
}
4 changes: 4 additions & 0 deletions Daybreak/Daybreak.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@
</ItemGroup>

<ItemGroup>
<Page Update="Controls\MaximizeButton.xaml">
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
<SubType>Designer</SubType>
</Page>
<Page Update="Controls\StarGlyph.xaml">
<XamlRuntime>$(DefaultXamlRuntime)</XamlRuntime>
<SubType>Designer</SubType>
Expand Down
1 change: 0 additions & 1 deletion Daybreak/Launch/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,6 @@ private void SetImage(ImageSource imageSource)
{
var avgColor = GetAverageColor(bitmapImage);
var luminace = GetLuminace(avgColor);
Debug.WriteLine(luminace);
if (luminace < 0.15)
{
this.Foreground = Brushes.White;
Expand Down
22 changes: 13 additions & 9 deletions Daybreak/Views/StartupView.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibility"></BooleanToVisibilityConverter>
</UserControl.Resources>
<Grid Background="Transparent">
<Grid Background="Transparent" x:Name="ViewContainer">
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
Expand All @@ -28,13 +28,17 @@
Foreground="White" FontSize="36" Width="250" Height="60" VerticalAlignment="Bottom" Margin="0, 0, 0, 30"
IsEnabled="{Binding ElementName=_this, Path=LaunchButtonEnabled, Mode=OneWay}"
Clicked="OpaqueButton_Clicked" Grid.Row="1" Grid.ColumnSpan="3"></controls:OpaqueButton>
<controls:ChromiumBrowserWrapper Grid.Column="2" Margin="10" Address="{Binding ElementName=_this, Path=RightBrowserAddress, Mode=OneWay}"
Foreground="White" FavoriteUriChanged="RightBrowser_FavoriteUriChanged"
FavoriteAddress="{Binding ElementName=_this, Path=RightBrowserFavoriteAddress, Mode=OneWay}"/>

<controls:ChromiumBrowserWrapper Grid.Column="0" Margin="10" Address="{Binding ElementName=_this, Path=LeftBrowserAddress, Mode=OneWay}"
Foreground="White" FavoriteUriChanged="LeftBrowser_FavoriteUriChanged"
FavoriteAddress="{Binding ElementName=_this, Path=LeftBrowserFavoriteAddress, Mode=OneWay}"/>

<Grid x:Name="RightContainer" Grid.Column="2" Margin="10">
<controls:ChromiumBrowserWrapper Address="{Binding ElementName=_this, Path=RightBrowserAddress, Mode=OneWay}"
Foreground="White" FavoriteUriChanged="RightBrowser_FavoriteUriChanged"
FavoriteAddress="{Binding ElementName=_this, Path=RightBrowserFavoriteAddress, Mode=OneWay}"
MaximizeClicked="RightChromiumBrowserWrapper_MaximizeClicked"/>
</Grid>
<Grid x:Name="LeftContainer" Grid.Column="0" Margin="10">
<controls:ChromiumBrowserWrapper Address="{Binding ElementName=_this, Path=LeftBrowserAddress, Mode=OneWay}"
Foreground="White" FavoriteUriChanged="LeftBrowser_FavoriteUriChanged"
FavoriteAddress="{Binding ElementName=_this, Path=LeftBrowserFavoriteAddress, Mode=OneWay}"
MaximizeClicked="LeftChromiumBrowserWrapper_MaximizeClicked"/>
</Grid>
</Grid>
</UserControl>
42 changes: 41 additions & 1 deletion Daybreak/Views/StartupView.xaml.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Daybreak.Services.ApplicationDetection;
using Daybreak.Controls;
using Daybreak.Services.ApplicationDetection;
using Daybreak.Services.Configuration;
using Daybreak.Services.ViewManagement;
using System;
Expand Down Expand Up @@ -31,6 +32,9 @@ public partial class StartupView : UserControl
private readonly IConfigurationManager configurationManager;
private readonly CancellationTokenSource cancellationTokenSource = new();

private bool leftBrowserMaximized = false;
private bool rightBrowserMaximized = false;

public string RightBrowserFavoriteAddress
{
get => this.GetTypedValue<string>(RightBrowserFavoriteAddressProperty);
Expand Down Expand Up @@ -130,5 +134,41 @@ private void RightBrowser_FavoriteUriChanged(object sender, string e)
config.RightBrowserDefault = e;
this.configurationManager.SaveConfiguration(config);
}

private void LeftChromiumBrowserWrapper_MaximizeClicked(object sender, EventArgs e)
{
if (this.leftBrowserMaximized)
{
this.ViewContainer.ColumnDefinitions[0].Width = new GridLength(1, GridUnitType.Star);
this.ViewContainer.ColumnDefinitions[1].Width = new GridLength(1, GridUnitType.Star);
this.ViewContainer.ColumnDefinitions[2].Width = new GridLength(1, GridUnitType.Star);
}
else
{
this.ViewContainer.ColumnDefinitions[0].Width = new GridLength(1, GridUnitType.Star);
this.ViewContainer.ColumnDefinitions[1].Width = new GridLength(0, GridUnitType.Star);
this.ViewContainer.ColumnDefinitions[2].Width = new GridLength(0, GridUnitType.Star);
}

this.leftBrowserMaximized = !this.leftBrowserMaximized;
}

private void RightChromiumBrowserWrapper_MaximizeClicked(object sender, EventArgs e)
{
if (this.rightBrowserMaximized)
{
this.ViewContainer.ColumnDefinitions[0].Width = new GridLength(1, GridUnitType.Star);
this.ViewContainer.ColumnDefinitions[1].Width = new GridLength(1, GridUnitType.Star);
this.ViewContainer.ColumnDefinitions[2].Width = new GridLength(1, GridUnitType.Star);
}
else
{
this.ViewContainer.ColumnDefinitions[0].Width = new GridLength(0, GridUnitType.Star);
this.ViewContainer.ColumnDefinitions[1].Width = new GridLength(0, GridUnitType.Star);
this.ViewContainer.ColumnDefinitions[2].Width = new GridLength(1, GridUnitType.Star);
}

this.rightBrowserMaximized = !this.rightBrowserMaximized;
}
}
}

0 comments on commit eb5552b

Please sign in to comment.