Skip to content

Commit

Permalink
Preview 8 (#304)
Browse files Browse the repository at this point in the history
* [wip] Start updating to Avalonia 11 preview 7 (#303)

* Start updating to Avalona 11 preview 7

* Try to get the diagnostics lib building

* Remove [Obsolete] from ViewBuilder.Create

---------

Co-authored-by: Richard Webb <[email protected]>

* migrate 'onItemsChanged'

* update to preview 8

* fix 'bitmapInterpolationMode'

* add bindings for all render options

* remove `verticalScrollBarValue` & `horizontalScrollBarValue` as they were
replaced with `offset` in preview 7

* `Spinner` is an abstract class and cant be created directly

---------

Co-authored-by: Richard Webb <[email protected]>
Co-authored-by: Richard Webb <[email protected]>
  • Loading branch information
3 people authored May 19, 2023
1 parent c563e61 commit 57d4eb2
Show file tree
Hide file tree
Showing 12 changed files with 76 additions and 42 deletions.
4 changes: 2 additions & 2 deletions src/Avalonia.FuncUI.Diagnostics/Views/Views.StateHookViews.fs
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,12 @@ type internal StateHookViews =
ContextMenu.viewItems [
MenuItem.create [
MenuItem.header "Copy"
MenuItem.onClick (fun _ ->
MenuItem.onClick (fun args ->
Async.StartImmediate (
async {
let json = System.Text.Json.JsonSerializer.Serialize value.Current

do! Async.AwaitTask (Application.Current.Clipboard.SetTextAsync json)
do! Async.AwaitTask (TopLevel.GetTopLevel(args.Source :?> Visual).Clipboard.SetTextAsync json)
}
)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,11 @@ module PatcherTests =
se.Styles.AddRange(s))

let classesGetter: AvaloniaObject -> obj = (fun c -> (c :?> StyledElement).Classes :> obj)
let classesSetter: AvaloniaObject * obj -> unit = (fun (c, v) -> (c :?> StyledElement).Classes <- v :?> Classes)

let classesSetter: AvaloniaObject * obj -> unit = (fun (c, v) ->
let element = (c :?> StyledElement)
element.Classes.Clear()
element.Classes.AddRange(v :?> Classes))

let resourcesGetter: AvaloniaObject -> obj = (fun c -> (c :?> StyledElement).Resources :> obj)
let resourcesSetter: AvaloniaObject * obj -> unit = (fun (c, v) -> (c :?> StyledElement).Resources <- v :?> IResourceDictionary)

Expand Down Expand Up @@ -97,7 +100,7 @@ module PatcherTests =

let control = TextBlock()
control.Styles.Add(Style())
control.Classes <- Classes([| "class" |])
control.Classes.Add("class")
control.Resources.Add(KeyValuePair.Create("key" :> obj, "Value" :> obj))

Patcher.patch (control, delta)
Expand Down
2 changes: 1 addition & 1 deletion src/Avalonia.FuncUI/DSL/AutoCompleteBox.fs
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ module AutoCompleteBox =
AttrBuilder<'t>.CreateProperty<_>(AutoCompleteBox.TextFilterProperty, filterFunc, ValueNone)

static member dataItems<'t when 't :> AutoCompleteBox>(items: IEnumerable) : IAttr<'t> =
AttrBuilder<'t>.CreateProperty<IEnumerable>(AutoCompleteBox.ItemsProperty, items, ValueNone)
AttrBuilder<'t>.CreateProperty<IEnumerable>(AutoCompleteBox.ItemsSourceProperty, items, ValueNone)

static member asyncPopulator<'t when 't :> AutoCompleteBox>(populator: Func<string, CancellationToken, Task<seq<obj>>>) : IAttr<'t> =
AttrBuilder<'t>.CreateProperty<_>(AutoCompleteBox.AsyncPopulatorProperty, populator, ValueNone)
50 changes: 43 additions & 7 deletions src/Avalonia.FuncUI/DSL/Base/RenderOptions.fs
Original file line number Diff line number Diff line change
@@ -1,16 +1,52 @@
namespace Avalonia.FuncUI.DSL

open Avalonia

[<AutoOpen>]
module RenderOptions =
open Avalonia.Controls
module RenderOptions =
open Avalonia.Media
open Avalonia.Media.Imaging
open Avalonia.FuncUI.Types
open Avalonia.FuncUI.Builder

type Control with
static member bitmapInterpolationMode<'t when 't :> Control>(mode: BitmapInterpolationMode) : IAttr<'t> =
AttrBuilder<'t>.CreateProperty<BitmapInterpolationMode>(RenderOptions.BitmapInterpolationModeProperty, mode, ValueNone)


type Visual with

static member bitmapInterpolationMode<'t when 't :> Visual>(mode: BitmapInterpolationMode) : IAttr<'t> =
AttrBuilder<'t>.CreateProperty<BitmapInterpolationMode>(
name = nameof BitmapInterpolationMode,
value = mode,
getter = ValueSome RenderOptions.GetBitmapInterpolationMode,
setter = ValueSome RenderOptions.SetBitmapInterpolationMode,
comparer = ValueNone
)

static member edgeMode<'t when 't :> Visual>(mode: EdgeMode) : IAttr<'t> =
AttrBuilder<'t>.CreateProperty<EdgeMode>(
name = nameof EdgeMode,
value = mode,
getter = ValueSome RenderOptions.GetEdgeMode,
setter = ValueSome RenderOptions.SetEdgeMode,
comparer = ValueNone
)

static member bitmapBlendingMode<'t when 't :> Visual>(mode: BitmapBlendingMode) : IAttr<'t> =
AttrBuilder<'t>.CreateProperty<BitmapBlendingMode>(
name = nameof BitmapBlendingMode,
value = mode,
getter = ValueSome RenderOptions.GetBitmapBlendingMode,
setter = ValueSome RenderOptions.SetBitmapBlendingMode,
comparer = ValueNone
)

static member textRenderingMode<'t when 't :> Visual>(mode: TextRenderingMode) : IAttr<'t> =
AttrBuilder<'t>.CreateProperty<TextRenderingMode>(
name = nameof TextRenderingMode,
value = mode,
getter = ValueSome RenderOptions.GetTextRenderingMode,
setter = ValueSome RenderOptions.SetTextRenderingMode,
comparer = ValueNone
)


type RenderOptions with
end
4 changes: 3 additions & 1 deletion src/Avalonia.FuncUI/DSL/Base/StyledElement.fs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@ module StyledElement =

static member classes<'t when 't :> StyledElement>(value: Classes) : IAttr<'t> =
let getter : ('t -> Classes) = (fun control -> control.Classes)
let setter : ('t * Classes -> unit) = (fun (control, value) -> control.Classes <- value)
let setter : ('t * Classes -> unit) = (fun (control, value) ->
control.Classes.Clear()
control.Classes.AddRange(value))

AttrBuilder<'t>.CreateProperty<Classes>("Classes", value, ValueSome getter, ValueSome setter, ValueNone, fun () -> Classes())

Expand Down
2 changes: 1 addition & 1 deletion src/Avalonia.FuncUI/DSL/DataGrid.fs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ module DataGrid =
AttrBuilder<'t>.CreateProperty<bool>(DataGrid.AutoGenerateColumnsProperty, autoGenerate, ValueNone)

static member items (items: #System.Collections.IEnumerable) : IAttr<DataGrid> =
AttrBuilder<DataGrid>.CreateProperty(DataGrid.ItemsProperty, items, ValueNone)
AttrBuilder<DataGrid>.CreateProperty(DataGrid.ItemsSourceProperty, items, ValueNone)

static member canUserReorderColumns<'t when 't :> DataGrid>(value: bool) : IAttr<'t> =
AttrBuilder<'t>.CreateProperty<bool>(DataGrid.CanUserReorderColumnsProperty, value, ValueNone)
Expand Down
6 changes: 4 additions & 2 deletions src/Avalonia.FuncUI/DSL/Flyout.fs
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,12 @@ module MenuFlyout =
type MenuFlyout with

static member viewItems<'t when 't :> MenuFlyout>(views: List<IView>): IAttr<'t> =
AttrBuilder<'t>.CreateContentMultiple(MenuFlyout.ItemsProperty, views)
let getter : ('t -> obj) = (fun control -> control.Items :> obj)

AttrBuilder<'t>.CreateContentMultiple("Items", ValueSome getter, ValueNone, views)

static member dataItems<'t when 't :> MenuFlyout>(data : IEnumerable): IAttr<'t> =
AttrBuilder<'t>.CreateProperty<IEnumerable>(MenuFlyout.ItemsProperty, data, ValueNone)
AttrBuilder<'t>.CreateProperty<IEnumerable>(MenuFlyout.ItemsSourceProperty, data, ValueNone)

static member itemTemplate<'t when 't :> MenuFlyout>(value : IDataTemplate): IAttr<'t> =
AttrBuilder<'t>.CreateProperty<IDataTemplate>(MenuFlyout.ItemTemplateProperty, value, ValueNone)
Expand Down
13 changes: 10 additions & 3 deletions src/Avalonia.FuncUI/DSL/ItemsControl.fs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
namespace Avalonia.FuncUI.DSL

open Avalonia

[<AutoOpen>]
module ItemsControl =
open Avalonia.Controls.Templates
Expand All @@ -14,7 +16,8 @@ module ItemsControl =
type ItemsControl with

static member viewItems<'t when 't :> ItemsControl>(views: IView list) : IAttr<'t> =
AttrBuilder<'t>.CreateContentMultiple(ItemsControl.ItemsProperty, views)
let getter : ('t -> obj) = (fun control -> control.Items :> obj)
AttrBuilder<'t>.CreateContentMultiple("Items", ValueSome getter, ValueNone, views)

static member dataItems<'t when 't :> ItemsControl>(data: IEnumerable) : IAttr<'t> =
AttrBuilder<'t>.CreateProperty<IEnumerable>(ItemsControl.ItemsSourceProperty, data, ValueNone)
Expand All @@ -31,5 +34,9 @@ module ItemsControl =
static member areVerticalSnapPointsRegular<'t when 't :> ItemsControl>(value: bool) : IAttr<'t> =
AttrBuilder<'t>.CreateProperty<bool>(ItemsControl.AreVerticalSnapPointsRegularProperty, value, ValueNone)

static member onItemsChanged<'t when 't :> ItemsControl>(func: IList -> unit, ?subPatchOptions) =
AttrBuilder<'t>.CreateSubscription<IList, _>(ItemsControl.ItemsProperty, func, ?subPatchOptions = subPatchOptions)
static member onItemsChanged<'t when 't :> ItemsControl>(func: IEnumerable -> unit, ?subPatchOptions) =
AttrBuilder<'t>.CreateSubscription(
ItemsControl.ItemsSourceProperty :> AvaloniaProperty<IEnumerable>,
func,
?subPatchOptions = subPatchOptions
)
20 changes: 4 additions & 16 deletions src/Avalonia.FuncUI/DSL/ScrollViewer.fs
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ module ScrollViewer =
open Avalonia.Controls
open Avalonia.FuncUI.Types
open Avalonia.FuncUI.Builder

let create (attrs: IAttr<ScrollViewer> list): IView<ScrollViewer> =
ViewBuilder.Create<ScrollViewer>(attrs)

type Control with
type Control with

/// <summary>
/// Sets the vertical scrollbar visibility.
Expand All @@ -29,7 +29,7 @@ module ScrollViewer =

static member allowAutoHide<'t when 't :> ScrollViewer>(value: bool) : IAttr<'t> =
AttrBuilder<'t>.CreateProperty<bool>(ScrollViewer.AllowAutoHideProperty, value, ValueNone)

/// <summary>
/// Sets the extent of the scrollable content.
/// </summary>
Expand Down Expand Up @@ -58,16 +58,4 @@ module ScrollViewer =
/// Sets the size of the viewport on the scrollable content.
/// </summary>
static member viewport<'t when 't :> ScrollViewer>(value: Size) : IAttr<'t> =
AttrBuilder<'t>.CreateProperty<Size>(ScrollViewer.ViewportProperty, value, ValueNone)

/// <summary>
/// Sets the vertical scrollbar value.
/// </summary>
static member verticalScrollBarValue<'t when 't :> ScrollViewer>(value: double) : IAttr<'t> =
AttrBuilder<'t>.CreateProperty<double>(ScrollViewer.VerticalScrollBarValueProperty, value, ValueNone)

/// <summary>
/// Sets the horizontal scrollbar value.
/// </summary>
static member horizontalScrollBarValue<'t when 't :> ScrollViewer>(value: double) : IAttr<'t> =
AttrBuilder<'t>.CreateProperty<double>(ScrollViewer.HorizontalScrollBarValueProperty, value, ValueNone)
AttrBuilder<'t>.CreateProperty<Size>(ScrollViewer.ViewportProperty, value, ValueNone)
5 changes: 1 addition & 4 deletions src/Avalonia.FuncUI/DSL/Spinner.fs
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,6 @@ module Spinner =
open Avalonia.Controls
open Avalonia.FuncUI.Types
open Avalonia.FuncUI.Builder

let create (attrs: IAttr<Spinner> list): IView<Spinner> =
ViewBuilder.Create<Spinner>(attrs)

type Spinner with

Expand All @@ -16,7 +13,7 @@ module Spinner =
/// </summary>
static member validSpinDirection<'t when 't :> Spinner>(value: ValidSpinDirections) : IAttr<'t> =
AttrBuilder<'t>.CreateProperty<ValidSpinDirections>(Spinner.ValidSpinDirectionProperty, value, ValueNone)

/// <summary>
/// Occurs when spinning is initiated by the end-user.
/// </summary>
Expand Down
1 change: 0 additions & 1 deletion src/Avalonia.FuncUI/DSL/ViewBuilder.fs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ open Avalonia.FuncUI.Types
[<AbstractClass; Sealed>]
type ViewBuilder() =

[<System.Obsolete "Use 'View.createGeneric' instead.">]
static member Create<[<DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)>]'view>(attrs: IAttr<'view> list) : IView<'view> =
{ View.ViewType = typeof<'view>
View.ViewKey = ValueNone
Expand Down
2 changes: 1 addition & 1 deletion src/Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project>
<PropertyGroup>
<AvaloniaVersion>11.0.0-preview6</AvaloniaVersion>
<AvaloniaVersion>11.0.0-preview8</AvaloniaVersion>
<FuncUIVersion>0.6.0-preview9.1</FuncUIVersion>
</PropertyGroup>
</Project>

0 comments on commit 57d4eb2

Please sign in to comment.