Adds Tizen backend (#2360)
* [Tizen] Add Resizetizer Tizen Implementation * Treat nullablity for buidling net6 project * Bump to latest and fix build error * Fix Tizen Handlers * Fix font and SingleProject to locate manifest * Update tizen manifest path * Bump to latest - Adds the GraphicsViewHandler and ShapeViewHandler - Apply one stop shop UseMauiControls (#1157) - Implements new APIs for each IView - and so on * Bump to latest - Including register images and set Compat Service Provider (#1306), and so on * [SingleProject] Update intermediate asset path * Bump to latest - Apply to start adding in APIs for adding legacy renderers via assembly scanning (#1333) - Update to IMauiContext (#1357) - and so on * Remove duplicate type for legacy compat renderers * Fix Color Extension * Adds Microsoft.Maui.Tizen.sln * Rebase to upstream latest main * InitialzationOption for MauiApp * Bump to latest - Apply to patch related to Animation (#1436) - Apply to register Microsoft.Maui.Graphics Platforms (#1441) - and so on. * Enable to DisplayResolutionUnit * Implement Clip * Implement ModalNavigationService * Update build targets for single project * Remove comment * Remove image resource on Tizen project * Remove space * Bump to latest - Added GestureManager.Tizen.cs (#1489) - Set handler to shimmed handler so it doesn't get reshimmed (#1483) - Turn XamlC on by default (#1422) - and so on * Fix SwitchHandler * Fix compatibility issue (#41) * Fix compatibility issue * Fix Compatibility Resource path * Fix Transformations (#42) * Fix the compat LayoutRenderer (#43) * Bump to latest - Modal Navigation Manager (#1563) - Implement the basic WindowHandler (#1468) - Don't extract native defaults, meaning users can no longer reset a color back to a platform theme (#1485) - Implement Alerts (Alert, Prompt and ActionSheet) (#1328) - And so on. * Fix Layout margin issue (#44) * [SingleProject] Fix Issues (#50) * Fix RefreshView related issue (#51) * Fix RefreshView related issue * Fix StreamImageSourceService.Tizen * Bumt to latest - Effects (#1574) - Improve Window and AnimationManager (#1653) - and so on * Add Microsoft.Maui.Graphics.Skia as PackageReference * Update Compatibility projects (*.csproj) for Tizen * Add AlertManager on Tizen (#57) * Add AlertManager on Tizen * Add null check and remove whitespace * Remove watch profile code * Change subscriber object * Add Essentials.Samples.Tizen (#24) * Add Essentials.Samples.Tizen * Add guard for null exception * Fix Essentials.Samples for Tizen * Fix csproj for net6 * Remove Forms.Init * Fix build error (#60) * Update referenced Tizen.UIExtensions version (#61) * Add BlazorWebView skeleton code (#62) * Bump to latest (#71) - Window lifecycle (#1754) - Move New Navigation Handler to Core and make it internal (#1800) - Scrollview handler (#1669) - ScrollView Resize + Window Handler Resize (#1676) - Font AutoScalingEnabled (#1774) - Rename Font Properties (#1755) - Update layout system to ensure native measure/arrange are called for all controls, even from Page subclasses (#1819) - IContainer as IList<IView> (#1724) - Implement Layout padding for new StackLayouts and GridLayout (#1749) - Delete all the TabIndex, TabStop, Focusable things! (#1777) - Introduce SetSemanticFocus API via SemanticExtensions (#1829) - Improve Window and AnimationManager (#1653) - And so on * Remove IPage on Tizen (#72) - Merge IFrameworkElement and IView and Remove IPage (#1875) * Remove obsolete methods from Controls (#73) - [Controls] Remove obsolete methods from Controls (#1644) * Fix issue related rebase (#74) * Add Blazor webview (#67) * Add Blazor webview * Replace space to tab * remove space * Fix AlertManager prompt layout issue (#76) * Fix entry cursor error (#68) * Fix entry cursor error * Update code referring to android extension * Remove duplicate code & Add exception cases * Code fixes for consistency * Fix nullable issue (#77) * Fix Image loading (#78) * Fix nested layout issue (#79) Co-authored-by: 허강호/Common Platform Lab(SR)/Principal Engineer/삼성전자 <kangho.hur@samsung.com> * Fix issues caused by bump up (#75) * Fix issues caused by bump up * Update Tizen file provider * Update file provider with proper path * Replace StackLayout from Compatibility.StackLayout (#82) * Fix unmatched partial method (#84) * Bump to latest * Fix GetDesiredSize (#87) * Fix GetDesiredSize * update for readability * Fix ScrollView content absolute position (#89) * Fixes incorrect parameter type for ILayoutManager.ArrangeChildren (Rectangle -> Size). (#91) * Make the HandlerToRendererShim simple * Revert "Fixes incorrect parameter type for ILayoutManager.ArrangeChildren (Rectangle -> Size). (#91)" (#97) This reverts commit c54ac836ef961d647989a34fa83208b9883142ef. * Add GestureManager (#96) * Add GestureManager * Fix DragGestureHandler * Fix GestureManager * Check nullable enable * Fix Label LineBreakMode using workaround (#98) * Refactor the LayoutHandler (#99) * Fix layout measure issue (#100) * Bump to latest * Fix LayoutHandler Update issue (#103) * Fix LayoutHandler Update issue * Implement InvalidateMeasure propagation * Update MapBackground * Fix default font size issue (#113) * Add InitializationOptions (#107) * Add InitializationOptions * Set UseSkiaSharp true as default * Apply DP as default * Fix SKClipperView to have proper size (#115) * Fix Essentials sample (#108) * Fix Essentials sample for Tizen * Remove UseSkiaSharp flag * Remove MaterialComponents * Fix Tizen flag * Remove CustomRenderer * Add ShellHandler (#64) * Add ShellHandler * Move ShellView into Platform/Tizen * Update ShellView * Move the code for embedded tizen resources to csproj * Add UIExtenstions for shell * fix ViewHandlerOfT dispose (#120) * MAUI workload for Tizen (#66) * Fix build and runtime error after bumping to latest code * Fix HandlerToRendererShim dispose (#127) * Add ShellSearchView (#121) * Add ShellSearchView * Fix the layout issue in ShellSearchResultList * Enable nullable * Fix maximum height of ShellSearchResultList * Fix scaling issue on Clip (#130) * Fix Shell build error on net6 project (#133) * Fix DisplayResolutionUnit sync issue (#134) * Fix build error (#137) * Replace SkiaGraphicsView with local patch (#135) This commit will be revert when upstream code is updated * Fix GraphicsView scaling issue (#136) * Support Min/Max Height/Width on IView and applying MauiApp/MauiAppBuilder pattern - Support Min/Max Height/Width on IView (#2265) - Updating .NET MAUI to use MauiApp/MauiAppBuilder pattern and use MS.Extensions.DependencyInjection (#2137) * Fix Tizen Templates (#144) * Fix webview break caused by updated dependency (#143) * Update the Tizen.UIExtension.ElmSharp version (#145) * Fix Essentials (#146) * Fix Essentials sample for tizen * Add SemanticScreenReader for Tizen * Fix Startup * Reomve internal UIExtensions compoments for Shell (#147) * Implement PlaceholderColor property in SearchBarHandlers - Implement PlaceholderColor property in SearchBarHandlers (#1512) * Adds missing implementation after bumping to latest main * Fix Control.Samples.Singleproject Main correctly (#150) * [Tizen] Add support for JS root components in BlazorWebView (#151) * [Tizen] Adds BoxView Handler * [Tizen] Update project templates to work with safe characters - Update project templates to work with safe characters (#2368) * [Tizen] Implement ProgressColor property in ProgressBarHandlers - Implement ProgressColor property in ProgressBarHandlers (#600) * [Tizen] Fix project template's tizne-manifest.xml correctly * [Tizen] Handle ContentViews and templated content in new layout system * [Tizen] WebView Handlers * [Tizen] Use Color.IsDefault in Compat renderers * Fix Essentials DeviceDisplay (#156) * Fix Essentials.DeviceDisplay * Fix DeviceDisplay * [Tizen] Fix build error on net6 * Fix Layout remove issue (#164) * Fix Layout remove issue * Fix layout remove on Dispose * Bump to latest (rc1) - ImageButtonHandler and Handler Re-usability (#2352) - Remove IBoxView (#2619) - Add SupportedOSPlatformVersion (#2565) - Merge all the .NET 6 projects/solutions (#2505) - Shadow Support (#570) - Add IndicatorView handler(#2038) * [Tizen] Initial Border control * [Tizen] Apply graphics related code review feedback * [Tizen] Remove Device.OpenUri impl and Device.Flags/SetFlags * [Tizen] Fix Display Prompt Alerts * [Tizen] Fix WebView Handler * [Tizen] Fix ShapeViewHandler * [Tizen] Port H/V TextAlignment to Editor/Picker Handler * [Tizen] Add TVShellView (#183) * [Tizen] Add TVShellView * [Tizen] Update TVShellView * [Tizen] Update NativeView for Shell * [Tizen] Update ShellView * [Tizen] Change default FlyoutBackgroundColor for TV * [Tizen] Enable nullable * Refactor WrapperView to draw drawable features (#186) * Refactor WrapperView to draw drawable features * Update class names and devide files * Override NeesContainer to remove duplicated code * Update class names * [Tizen] Adds ApplicationHandler * Remove dispose action on ImageSourceServiceResult (#192) * Fix Background issue of Frame (#193) * Fix UpdateBackground (#194) * Fix UpdateBackground * Add ContentView Background mapper * Fix Editor/Entry/Label/Layout Background * Add IWrapperViewCanvas.Content * Add PageHandler Background mapper * Restore WrapperView * Remove unnecessary namespace * [Tizen] Fix build error on PageHandler * [Tizen] Fix ButtonHandler events * [Tizen] Use new dispatcher instance in Tizen's BlazorWebView * [Tizen] Fix DpiPath correctly * [Tizen] Fix Compatibility and Controls.Sample build error * [Tizen] Initial CollectionViewHandler * [Tizen] Apply ITextButton related changes * [Tizen] Add Shadows (#233) * [Tizen] Add Shadows * [Tizen] Apply review comments * [Tizen] Move updating shape in proper position * [Tizen] Update BackgroundDrawable * [Tizen] Apply review comments * [Tizen] Add BorderDrawable (#224) * Move to platform specific * Fix border handler for Tizen * Rename ToDrawable method * Fix border content layout * Fix BorderView * Apply rebase * [Tizen] Fix entry cursor issue (#222) * Fix entry cursor issue * Fix UpdateSelectionLength method * [Tizen] Remove TVNavigationDrawer TVNavigationView (#223) * [Tizen] Remove TVNavigationDrawer TVNavigationView * [Elmsharp] Update Tizen.UIExtensions version * [Tizen] Remove Forms DeviceInfo and use Essentials * [Tizen] Initial Multi Window support * [Tizen] Fix MauiContext * [Tizen] Refactor Border by defining MauiDrawable (#248) * [Tizen] Refactor Border by defining MauiDrawable * [Tizen] Apply review comments * [Tizen] Remove unnecessary type casting * [Tizen] Move getting path logic to drawable * [Tizen] Obsolete AndExpand & Remove IsolatedStorage * Fix layout measure issue (#254) * Fix layout measure issue * Update src/Compatibility/Core/src/Tizen/Platform.cs Co-authored-by: 허강호/Common Platform Lab(SR)/Principal Engineer/삼성전자 <kangho.hur@samsung.com> Co-authored-by: 허강호/Common Platform Lab(SR)/Principal Engineer/삼성전자 <kangho.hur@samsung.com> * Fix tizen solution (.sln) correctly * [Tizen] Add VerticalTextAlignment * [Tizen] Move IDispatcher logic out of IPlatformServices * [Tizen] Fix Scoping of MauiContext * Fix NavigationPage navigating issue (#263) * [Tizen] Add ImageButton handler (#261) * [Tizen] Add ImageButton handler * Add comment * Fix Compatibility build error (#265) * Fix catch exception for sample (#262) * Fix catch exception for control sample * Fix exception type for Tizen * Add bracket * [Tizen] Use CoreApplication as native app type * Fix ScrollView (#269) * [Tizen] Add Collectionview adaptor (#271) * [Tizen] Add CollectionView Adaptors * Remove unnecessary override * Fix ConvertToScaledDP * Fix flag * Fix item selected event * Apply review comments * Move to extension for CollectionView * [Tizen] Remove legacy Log and use ILogger * [Tizen] Applying upstream changes * [Tizen] Add ContainerView to Layout if it's present * [Tizen] Initial Reloadyfy support * [Tizen] Initial IVisualDiagnosticOveraly support * [Tizen] Setup first set of Automation Properties * [Tizen] Move types in the Platform folder into the Platform namespaces * Fix CollectionView layout issue (#288) * Fix CollectionView layout issue * Remove unnecessary code * [Tizen] ZIndex proof-of-concept * Fix ScrollView ContentSize and Padding margin (#291) * Fix ScrollView ContentSize and Padding margin * Fix MapRequestScrollTo * Update src/Core/src/Handlers/ScrollView/ScrollViewHandler.Tizen.cs Co-authored-by: 허강호/Common Platform Lab(SR)/Principal Engineer/삼성전자 <kangho.hur@samsung.com> * Update src/Core/src/Handlers/ScrollView/ScrollViewHandler.Tizen.cs Co-authored-by: 허강호/Common Platform Lab(SR)/Principal Engineer/삼성전자 <kangho.hur@samsung.com> * Remove MapContentSize Co-authored-by: 허강호/Common Platform Lab(SR)/Principal Engineer/삼성전자 <kangho.hur@samsung.com> * Implements WindowOverlay and VisualDiagnosticsOverlay (#294) * Implements WindowOverlay and VisualDiagnosticsOverlay * Apply code review * [Tizen] Fix Image Handler * Remove GetDesiredSize (#295) * [Tizen] Fix ButtonHandler * Fix UpdateSemantics (#299) * Fix UpdateSemantics * Fix Semantics mapping * Apply comment * [Tizen] Organize and centralize HandlerExtensions * Refactor WrapperView and Fix Issue (#302) * Refactor WrapperView * Use Thickness type for Shadow margin * Update variable name * Update class name to GraphicsExtensions * Fix essentials sample for Tizen (#305) * [Tizen] Fix NativeView casting issue * [Tizen] Update the UIExtensions package version * [Templates] Update Tizen Template (#311) * [Tizen] Initial Flyout handler * Fix BlazorWebview binary resource issue (#317) * [Tizen] Handle query strings in Blazor static assets by trimming them out * Refactor MauiContext (#330) * [Tizen] Adds PaintExtensions * [Tizen] Update compat's Platform * [Tizen] Fix controls build error * [Tizen] Adds RadioButton Handler * [Tizen] Implement CursorPosition in IEditor/ITextInput Handlers * [Tizen] Initial SwipeView Handler * [Tizen] Remove GetNative * [Tizen] Update Microsoft.NET.Sdk.Maui/WorkloadManifest * [Tizen] Add FormattedText property support to Label in Controls * [Tizen] Bump to latest * [Tizen] Use legacy compat renderers temporarily * [Tizen] Use BorderView * [SingleProject] Update splash updator (#353) * [singleproject] update splash updator * [singleproject] update icon updator * [singleproject] Fix default icon path * [Tizen] Fix BlazorWebView build error (#355) * [Tizen] Fix BlazorWebView build error * [Tizen] Update tizen handler * [Tizen] Implement IPlatformApplication.Current * [Tizen] Implements missing WebViewHandler APIs * [Tizen] Refactor AppInfo/PhoneDialer into interface * [Tizen] Fix INativeViewHandler to return more expected NativeView * [Tizen] Remove legacy TFMs * [Tizen] Refactor DeviceInfo and Flashlight to use an interface * [Tizen] Remove `IPlatformInvalidate` and `Device.Invalidate() * [Tizen] Refactored Geocoding to an interface * [Tizen] Adds Microsoft.Maui.Graphics.Skia as package reference * [Tizen] Refactored Map, SMS, Contacts to an interface * [Tizen] Bump to latest * [Tizen] Fix Essential sample build error * [Tizen] Fix Workload build error * Add Platform code on Controls.Sample.Sandbox for tizen (#382) * Fix processing MauiAssets (#383) Co-authored-by: Jay Cho <chojoong@gmail.com> * [Tizen] Refactor Essential's implementations * [Tizen] Renaming public APIs Native -> Platform * [Tizen] Update template & sample's tizen-manifest.xml * Fix DotNet.csproj to build tizen (#372) * [Tizen] Update ImageHandler and ImageButtonHandler * [Tizen] Add handling for TextTransform for SearchBar/Editor/Entry * [Tizen] Interfaced Handler for Label, Page, NavigationView, Picker, ProgressBar, SwipeView * [Tizen] Initial MenuBar * [Tizen] Moved GetPlatformSize logic into a new service * [Tizen] Interfaced handler for Switch, TimePicker, WebView, Slider, SearchBar, RefreshView, RadioButton * [Tizen] Fix build error after rebasing * [Tizen] Use StringComparison.Ordinal everywhere * [Tizen] Move TabbedPageHandler to TabbedViewHandler * [Tizen] Add more APIs to IDispatcher * [Tizen] Remove Application.Properties implementation * [Tizen] Backport p14 changes * [Tizen] Implement InputTransparent * [Tizen] Loaded/Unloaded events and propagate Window * [Tizen] Fix Path shapes rendering issues * [Tizen] Fix CI build error on ImageButtonHandler * [Tizen] Optimize ConfigureFonts and Logging during startup * [Tizen] Make sure StrokeDashArray property invalidate the Shape * [Tizen] Implement FillRule property in Polygon/PolylineHandler * [Tizen] Add install tizen to provision.yml * [Tizen] Simplify OnPlatformExtension * [Tizen] Use interface on mappers of shapes * [Tizen] Install tizen workload on dotnet-local-workloads * [Tizen] Move package version into Versions.props * [Tizen] Move 'UseMauiApp' call into "Controls" * [Tizen] update template description of localized string files * [Tizen] Update the package reference of Microsoft.Maui.Dependencies * [Tizen] Add IWindow.DisplayDensity * [Tizen] Initial VisualDiagnostic Image APIs * [Tizen] Mark all the Device [Obsolete] * [Tizen] Mark renderers and related base classes as obsolete * [Tizen] Platform behavior implementation * [Tizen] Clean unnecessary resource files * [Tizen] Graphics events * [Tizen] Modernize Essentials Namepsaces * [Tizen] Fix Compat's control gallery build error * Fix ClipperView background color issue (#447) * Fix typo (#450) * [Tizen] Initial support for configuring the underlying Web view settings * [Tizen] BlazorWebView public API tracking * [Tizen] use latest tizen workload as default * [Tizen] specify sdk version to avoid ci build error * [Tizen] Keep the text wrapping/truncation and max lines stuff in Controls * [Tizen] Remove downcasts in BlazorWebView * [Tizen] BlazorWebView API review changes: Shared sources * [Tizen] add tizen TFM optional * [Tizen] adding informative comments for template * [Tizen] Set IncludeTizenTargetFrameworks correctly * [Tizen] install maui-tizen Co-authored-by: JoonghyunCho <jh5.cho@samsung.com> Co-authored-by: Seungkeun Lee <sngn.lee@samsung.com> Co-authored-by: 김성수/Common Platform Lab(SR)/Staff Engineer/삼성전자 <sung-su.kim@samsung.com> Co-authored-by: 박인서/Common Platform Lab(SR)/Associate/삼성전자 <inseo9.park@samsung.com> Co-authored-by: 민성현/Common Platform Lab(SR)/Staff Engineer/삼성전자 <shyun.min@samsung.com> Co-authored-by: Jay Cho <chojoong@gmail.com>
|
@ -59,6 +59,12 @@
|
|||
<Compile Remove="**\*.uwp.cs" />
|
||||
<None Include="**\*.uwp.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(_MauiTargetPlatformIsTizen)' != 'True' ">
|
||||
<Compile Remove="**\**\*.Tizen.cs" />
|
||||
<None Include="**\**\*.Tizen.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
|
||||
<Compile Remove="**\Tizen\**\*.cs" />
|
||||
<None Include="**\Tizen\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Remove="bin\**;obj\**" />
|
||||
<None Remove="bin\**;obj\**" />
|
||||
|
@ -99,6 +105,11 @@
|
|||
<DefineConstants>$(DefineConstants);MACCATALYST;IOS</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Tizen -->
|
||||
<PropertyGroup Condition=" '$(_MauiTargetPlatformIsTizen)' == 'True' ">
|
||||
<DefineConstants>$(DefineConstants);TIZEN</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- If this becomes part of the product we will remove these but for now it's useful having them all in one place -->
|
||||
<ItemGroup Condition=" '$(_MauiTargetPlatformIsAndroid)' == 'True' ">
|
||||
<PackageReference Include="Xamarin.AndroidX.Lifecycle.LiveData" />
|
||||
|
@ -120,4 +131,8 @@
|
|||
<PackageReference Include="Microsoft.Graphics.Win2D" />
|
||||
<PackageReference Include="Microsoft.Maui.Graphics.Win2D.WinUI.Desktop" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(_MauiTargetPlatformIsTizen)' == 'True' ">
|
||||
<PackageReference Include="Tizen.UIExtensions.ElmSharp" />
|
||||
<PackageReference Include="Microsoft.Maui.Graphics.Skia" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
|
@ -16,4 +16,10 @@
|
|||
<_MauiUsingDefaultRuntimeIdentifier>true</_MauiUsingDefaultRuntimeIdentifier>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Tizen -->
|
||||
<ItemGroup Condition=" '$(EnableDefaultItems)' == 'true' and '$(SingleProject)' == 'true' and '$(TargetPlatformIdentifier)' == 'tizen' and '$(TizenProjectFolder)' != '' ">
|
||||
<TizenResource Include="$(TizenResourcePrefix)\**\*" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder);@(TizenTpkUserExcludeFiles)" />
|
||||
<TizenSharedResource Include="$(TizenSharedPrefix)\**\*" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder);@(TizenTpkUserExcludeFiles)" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
@ -22,6 +22,10 @@
|
|||
<EnableDefaultWindowsItems>false</EnableDefaultWindowsItems>
|
||||
<WindowsProjectFolder Condition=" '$(WindowsProjectFolder)' == '' ">$(PlatformsProjectFolder)Windows\</WindowsProjectFolder>
|
||||
<WindowsProjectFolder>$([MSBuild]::EnsureTrailingSlash('$(WindowsProjectFolder)'))</WindowsProjectFolder>
|
||||
<!-- Tizen -->
|
||||
<EnableDefaultTizenItems>false</EnableDefaultTizenItems>
|
||||
<TizenProjectFolder Condition=" '$(TizenProjectFolder)' == '' ">$(PlatformsProjectFolder)Tizen\</TizenProjectFolder>
|
||||
<TizenProjectFolder>$([MSBuild]::EnsureTrailingSlash('$(TizenProjectFolder)'))</TizenProjectFolder>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@ -29,6 +33,7 @@
|
|||
<MauiPlatformSpecificFolder Include="$(iOSProjectFolder)" TargetPlatformIdentifier="ios" />
|
||||
<MauiPlatformSpecificFolder Include="$(MacCatalystProjectFolder)" TargetPlatformIdentifier="maccatalyst" />
|
||||
<MauiPlatformSpecificFolder Include="$(WindowsProjectFolder)" TargetPlatformIdentifier="windows" />
|
||||
<MauiPlatformSpecificFolder Include="$(TizenProjectFolder)" TargetPlatformIdentifier="tizen" />
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(SingleProject)' == 'true' and '$([MSBuild]::GetTargetPlatformIdentifier($(TargetFramework)))' == 'android' ">
|
||||
|
@ -57,6 +62,12 @@
|
|||
<_SingleProjectWindowsExcludes>$(WindowsProjectFolder)/**/.*/**</_SingleProjectWindowsExcludes>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(SingleProject)' == 'true' and '$([MSBuild]::GetTargetPlatformIdentifier($(TargetFramework)))' == 'tizen' ">
|
||||
<TizenManifestFile Condition=" Exists('$(TizenProjectFolder)tizen-manifest.xml') ">$(TizenProjectFolder)tizen-manifest.xml</TizenManifestFile>
|
||||
<TizenResourcePrefix>$(TizenProjectFolder)res</TizenResourcePrefix>
|
||||
<TizenSharedPrefix>$(TizenProjectFolder)shared</TizenSharedPrefix>
|
||||
</PropertyGroup>
|
||||
|
||||
<!--
|
||||
Run before both _MauiInjectXamlCssAdditionalFiles and GenerateMSBuildEditorConfigFileShouldRun because
|
||||
if for some reason the _MauiInjectXamlCssAdditionalFiles target is not run, we still get in at the
|
||||
|
@ -82,6 +93,9 @@
|
|||
<Compile
|
||||
Condition=" '$(TargetPlatformIdentifier)' == 'windows' and '$(WindowsProjectFolder)' != '' "
|
||||
Include="$(WindowsProjectFolder)**/*$(DefaultLanguageSourceExtension)" />
|
||||
<Compile
|
||||
Condition=" '$(TargetPlatformIdentifier)' == 'tizen' and '$(TizenProjectFolder)' != '' "
|
||||
Include="$(TizenProjectFolder)**/*$(DefaultLanguageSourceExtension)" />
|
||||
|
||||
<!-- Remove all Windows (WinUI) XAML Files from the Windows folder -->
|
||||
<_MauiXamlToRemove
|
||||
|
@ -127,4 +141,4 @@
|
|||
<ProjectCapability Include="LaunchProfilesGroupByPlatformFilters" Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' >= '17.0' " />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
</Project>
|
||||
|
|
|
@ -33,6 +33,10 @@
|
|||
AssemblyFile="$(_ResizetizerTaskAssemblyName)"
|
||||
TaskName="Microsoft.Maui.Resizetizer.GenerateSplashStoryboard" />
|
||||
|
||||
<UsingTask
|
||||
AssemblyFile="$(_ResizetizerTaskAssemblyName)"
|
||||
TaskName="Microsoft.Maui.Resizetizer.TizenSplashUpdater" />
|
||||
|
||||
<UsingTask
|
||||
AssemblyFile="$(_ResizetizerTaskAssemblyName)"
|
||||
TaskName="Microsoft.Maui.Resizetizer.GenerateSplashAssets" />
|
||||
|
@ -76,6 +80,7 @@
|
|||
<_ResizetizerPlatformIsmacOS Condition="'$(_ResizetizerPlatformIdentifier)' == 'macos'">True</_ResizetizerPlatformIsmacOS>
|
||||
<_ResizetizerPlatformIstvOS Condition="'$(_ResizetizerPlatformIdentifier)' == 'tvos'">True</_ResizetizerPlatformIstvOS>
|
||||
<_ResizetizerPlatformIsWindows Condition="$(_ResizetizerPlatformIdentifier.Contains('windows')) == 'True'">True</_ResizetizerPlatformIsWindows>
|
||||
<_ResizetizerPlatformIsTizen Condition="'$(_ResizetizerPlatformIdentifier)' == 'tizen'">True</_ResizetizerPlatformIsTizen>
|
||||
|
||||
<ResizetizerIncludeSelfProject Condition="'$(ResizetizerIncludeSelfProject)' == ''">False</ResizetizerIncludeSelfProject>
|
||||
|
||||
|
@ -90,9 +95,10 @@
|
|||
<_ResizetizerIsiOSApp Condition="( '$(_ResizetizerPlatformIsiOS)' == 'True' OR '$(_ResizetizerPlatformIsMacCatalyst)' == 'True' ) And ('$(OutputType)' == 'Exe' Or '$(IsAppExtension)' == 'True')">True</_ResizetizerIsiOSApp>
|
||||
<_ResizetizerIsWPFApp Condition="'$(IsApplication)' == 'True' And '$(NuGetRuntimeIdentifier)' == 'win' And '$(_ResizetizerPlatformIsWindows)' == 'True'">True</_ResizetizerIsWPFApp>
|
||||
<_ResizetizerIsWindowsAppSdk Condition="('$(ProjectReunionWinUI)'=='True' Or '$(WindowsAppSDKWinUI)'=='True') And '$(_ResizetizerPlatformIsWindows)' == 'True' And ('$(OutputType)' == 'WinExe' Or '$(OutputType)' == 'Exe')">True</_ResizetizerIsWindowsAppSdk>
|
||||
<_ResizetizerIsTizenApp Condition="'$(_ResizetizerPlatformIsTizen)' == 'True'">True</_ResizetizerIsTizenApp>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(_ResizetizerIsAndroidApp)' == 'True' Or '$(_ResizetizerIsiOSApp)' == 'True' Or '$(_ResizetizerIsWPFApp)' == 'True' Or '$(_ResizetizerIsWindowsAppSdk)' == 'True'">
|
||||
<PropertyGroup Condition="'$(_ResizetizerIsAndroidApp)' == 'True' Or '$(_ResizetizerIsiOSApp)' == 'True' Or '$(_ResizetizerIsWPFApp)' == 'True' Or '$(_ResizetizerIsWindowsAppSdk)' == 'True' Or '$(_ResizetizerIsTizenApp)' == 'True'">
|
||||
<_ResizetizerIsCompatibleApp>True</_ResizetizerIsCompatibleApp>
|
||||
|
||||
<ResizetizeDependsOnTargets>
|
||||
|
@ -190,10 +196,29 @@
|
|||
</ProcessMauiFontsBeforeTargets>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Tizen -->
|
||||
<PropertyGroup Condition="'$(_ResizetizerIsTizenApp)' == 'True'">
|
||||
<ResizetizerPlatformType>tizen</ResizetizerPlatformType>
|
||||
|
||||
<ResizetizeBeforeTargets>
|
||||
$(ResizetizeBeforeTargets);
|
||||
PrepareResources;
|
||||
</ResizetizeBeforeTargets>
|
||||
|
||||
<ResizetizeAfterTargets>
|
||||
$(ResizetizeAfterTargets);
|
||||
ResizetizeCollectItems;
|
||||
</ResizetizeAfterTargets>
|
||||
|
||||
<ProcessMauiFontsAfterTargets>
|
||||
$(ProcessMauiFontsAfterTargets);
|
||||
ResizetizeCollectItems;
|
||||
</ProcessMauiFontsAfterTargets>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Finds absolute paths to any MauiImage in this project -->
|
||||
<!-- App head projects will invoke this target on their project references to collect images -->
|
||||
<Target Name="GetMauiItems" Outputs="@(ExportedMauiItem)">
|
||||
|
||||
<ItemGroup>
|
||||
<MauiItem Include="@(MauiImage)" ItemGroupName="MauiImage" Condition="'%(MauiImage.ForegroundFile)' == ''" />
|
||||
<MauiItem Include="@(MauiImage)" ItemGroupName="MauiImage" Condition="'%(MauiImage.ForegroundFile)' != ''" ForegroundFile="$([System.IO.Path]::GetFullPath('%(MauiImage.ForegroundFile)'))" />
|
||||
|
@ -295,6 +320,12 @@
|
|||
<!-- Windows does not recognize %(LogicalName), so we must copy it to %(Link) -->
|
||||
<MauiAsset Update="@(MauiAsset)" Link="%(MauiAsset.LogicalName)" Condition="'%(MauiAsset.Link)' == '' And '%(MauiAsset.LogicalName)' != ''" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup Condition="'$(_ResizetizerIsTizenApp)' == 'True'">
|
||||
<_MauiAssetItemMetadata>TizenTpkFileName</_MauiAssetItemMetadata>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition="'$(_ResizetizerIsTizenApp)' == 'True'">
|
||||
<MauiAsset Update="@(MauiAsset)" Link="%(MauiAsset.LogicalName)" Condition="'%(MauiAsset.Link)' == '' And '%(MauiAsset.LogicalName)' != ''" />
|
||||
</ItemGroup>
|
||||
<GetMauiAssetPath
|
||||
ProjectDirectory="$(MSBuildProjectDirectory)"
|
||||
ItemMetadata="$(_MauiAssetItemMetadata)"
|
||||
|
@ -302,6 +333,7 @@
|
|||
<Output ItemName="AndroidAsset" TaskParameter="Output" Condition="'$(_ResizetizerIsAndroidApp)' == 'True'" />
|
||||
<Output ItemName="Content" TaskParameter="Output" Condition="'$(_ResizetizerIsiOSApp)' == 'True'" />
|
||||
<Output ItemName="ContentWithTargetPath" TaskParameter="Output" Condition="'$(_ResizetizerIsUWPApp)' == 'True' Or '$(_ResizetizerIsWindowsAppSdk)' == 'True'" />
|
||||
<Output ItemName="TizenResource" TaskParameter="Output" Condition="'$(_ResizetizerIsTizenApp)' == 'True'" />
|
||||
</GetMauiAssetPath>
|
||||
</Target>
|
||||
|
||||
|
@ -348,7 +380,7 @@
|
|||
<GenerateSplashAssets
|
||||
Condition="'$(_ResizetizerIsUWPApp)' == 'True' Or '$(_ResizetizerIsWindowsAppSdk)' == 'True'"
|
||||
IntermediateOutputPath="$(_MauiIntermediateSplashScreen)"
|
||||
MauiSplashScreen="@(MauiSplashScreen)"
|
||||
MauiSplashScreen="@(MauiSplashScreen)"
|
||||
/>
|
||||
<ItemGroup Condition="'$(_ResizetizerIsUWPApp)' == 'True' Or '$(_ResizetizerIsWindowsAppSdk)' == 'True'">
|
||||
<_MauiSplashAssets Include="$(_MauiIntermediateSplashScreen)**\*" />
|
||||
|
@ -358,6 +390,11 @@
|
|||
<FileWrites Include="@(_MauiSplashAssets)" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Tizen -->
|
||||
<ItemGroup Condition="'$(_ResizetizerIsTizenApp)' == 'True'">
|
||||
<MauiImage Include="@(MauiSplashScreen)" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Stamp file for Outputs -->
|
||||
<Touch Files="$(_MauiSplashStampFile)" AlwaysCreate="True" />
|
||||
<ItemGroup>
|
||||
|
@ -437,6 +474,11 @@
|
|||
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Tizen -->
|
||||
<ItemGroup Condition="'$(_ResizetizerIsTizenApp)' == 'True'">
|
||||
<TizenTpkUserIncludeFiles Include="@(_MauiFontCopied)" Condition="'@(_MauiFontCopied)' != ''" TizenTpkSubDir="res\fonts\" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- iOS Only -->
|
||||
<!-- If on Windows, using build host, copy the files over to build server host too -->
|
||||
<ItemGroup Condition="'$(BuildSessionId)' != '' And '$(_ResizetizerIsiOSApp)' == 'True' And '$(IsMacEnabled)'=='true'">
|
||||
|
@ -479,6 +521,13 @@
|
|||
Images="@(MauiImage->Distinct())">
|
||||
</ResizetizeImages>
|
||||
|
||||
<!-- Tizen - Move splash images to a specific location -->
|
||||
<TizenSplashUpdater
|
||||
Condition="'$(_ResizetizerIsTizenApp)' == 'True' And '@(MauiSplashScreen)' != ''"
|
||||
IntermediateOutputPath="$(_MauiIntermediateImages)"
|
||||
ManifestFile="$(TizenManifestFile)"
|
||||
MauiSplashScreen="@(MauiSplashScreen)" />
|
||||
|
||||
<ItemGroup>
|
||||
<!-- Get Images that were generated -->
|
||||
<!-- Either from the task, or if the task was skipped (up to date), use the wildcard lookup -->
|
||||
|
@ -548,6 +597,20 @@
|
|||
<FileWrites Include="@(_ResizetizerCollectedImages)" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Tizen -->
|
||||
<PropertyGroup>
|
||||
<ResizetizerIntermediateOutputAbsolutePath>$([System.IO.Path]::GetFullPath('$(_MauiIntermediateImages)'))</ResizetizerIntermediateOutputAbsolutePath>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition="'$(_ResizetizerIsTizenApp)' == 'True' And '@(_ResizetizerCollectedImages)' != ''">
|
||||
<TizenTpkUserIncludeFiles Include="$(ResizetizerIntermediateOutputAbsolutePath)res\res.xml" TizenTpkSubDir="res\" />
|
||||
<FileWrites Include="$(ResizetizerIntermediateOutputAbsolutePath)res\res.xml)" />
|
||||
|
||||
<TizenTpkUserIncludeFiles Include="@(_ResizetizerCollectedImages)">
|
||||
<TizenTpkSubDir>$([MSBuild]::MakeRelative($(ResizetizerIntermediateOutputAbsolutePath), $([System.IO.Path]::GetFullPath('%(_ResizetizerCollectedImages.RelativeDir)'))))</TizenTpkSubDir>
|
||||
</TizenTpkUserIncludeFiles>
|
||||
<FileWrites Include="@(_ResizetizerCollectedImages)" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Touch/create our stamp file for outputs -->
|
||||
<Touch Files="$(_ResizetizerStampFile)" AlwaysCreate="True" />
|
||||
|
||||
|
@ -602,4 +665,4 @@
|
|||
<RemoveDir Directories="$(_ResizetizerIntermediateOutputRoot)" Condition="Exists ('$(_ResizetizerIntermediateOutputRoot)' )" />
|
||||
</Target>
|
||||
|
||||
</Project>
|
||||
</Project>
|
||||
|
|
|
@ -12,8 +12,12 @@
|
|||
<_MauiTargetPlatformIsmacOS Condition="'$(_MauiTargetPlatformIdentifier)' == 'macos'">True</_MauiTargetPlatformIsmacOS>
|
||||
<_MauiTargetPlatformIstvOS Condition="'$(_MauiTargetPlatformIdentifier)' == 'tvos'">True</_MauiTargetPlatformIstvOS>
|
||||
<_MauiTargetPlatformIsWindows Condition="$(_MauiTargetPlatformIdentifier.Contains('windows')) == 'True'">True</_MauiTargetPlatformIsWindows>
|
||||
<_MauiTargetPlatformIsTizen Condition="'$(_MauiTargetPlatformIdentifier)' == 'tizen'">True</_MauiTargetPlatformIsTizen>
|
||||
|
||||
<IncludeWindowsTargetFrameworks Condition="($([MSBuild]::IsOSPlatform('windows')) and '$(MSBuildRuntimeType)' == 'Full') or ('$(Packing)' == 'true')">true</IncludeWindowsTargetFrameworks>
|
||||
<IncludeTizenTargetFrameworks Condition="'$(CI)' == 'true' or '$(TF_BUILD)' == 'true' or
|
||||
Exists('$(DOTNET_ROOT)\sdk-manifests\$(DotNetVersionBand)\samsung.net.sdk.tizen\WorkloadManifest.json') or
|
||||
Exists('$(ProgramFiles)\dotnet\sdk-manifests\$(DotNetVersionBand)\samsung.net.sdk.tizen\WorkloadManifest.json')">true</IncludeTizenTargetFrameworks>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
|
@ -34,6 +38,7 @@
|
|||
<AndroidTargetFrameworkVersion>30.0</AndroidTargetFrameworkVersion>
|
||||
<WindowsTargetFrameworkVersion>10.0.19041</WindowsTargetFrameworkVersion>
|
||||
<Windows2TargetFrameworkVersion>10.0.20348</Windows2TargetFrameworkVersion>
|
||||
<TizenTargetFrameworkVersion>6.5</TizenTargetFrameworkVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
|
@ -41,6 +46,7 @@
|
|||
<MauiPlatforms>net$(_MauiDotNetVersion)-ios;net$(_MauiDotNetVersion)-maccatalyst;net$(_MauiDotNetVersion)-android</MauiPlatforms>
|
||||
<WindowsMauiPlatforms Condition="'$(WindowsMauiPlatforms)' == ''">net$(_MauiDotNetVersion)-windows$(WindowsTargetFrameworkVersion);net$(_MauiDotNetVersion)-windows$(Windows2TargetFrameworkVersion)</WindowsMauiPlatforms>
|
||||
<MauiPlatforms Condition="'$(IncludeWindowsTargetFrameworks)' == 'true'">$(MauiPlatforms);$(WindowsMauiPlatforms)</MauiPlatforms>
|
||||
<MauiPlatforms Condition="'$(IncludeTizenTargetFrameworks)' == 'true'">$(MauiPlatforms);net$(_MauiDotNetVersion)-tizen</MauiPlatforms>
|
||||
|
||||
<!-- Work around the IDE not properly handling the NU1703 warning -->
|
||||
<MauiPlatformsNoMacCat>net$(_MauiDotNetVersion)-ios;net$(_MauiDotNetVersion)-android</MauiPlatformsNoMacCat>
|
||||
|
|
|
@ -33,6 +33,10 @@
|
|||
<SupportedOSPlatformVersion>21.0</SupportedOSPlatformVersion>
|
||||
<TargetPlatformMinVersion>21.0</TargetPlatformMinVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(_MauiTargetPlatformIsTizen)' == 'True'">
|
||||
<SupportedOSPlatformVersion>6.5</SupportedOSPlatformVersion>
|
||||
<TargetPlatformMinVersion>6.5</TargetPlatformMinVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<!--
|
||||
NOTE: The Contains('-windows10') is a bit of a hack
|
||||
|
|
|
@ -109,5 +109,9 @@
|
|||
Update="Microsoft.CodeAnalysis.PublicApiAnalyzers"
|
||||
Version="$(MicrosoftCodeAnalysisPublicApiAnalyzersVersion)"
|
||||
/>
|
||||
<PackageReference
|
||||
Update="Tizen.UIExtensions.ElmSharp"
|
||||
Version="$(TizenUIExtensionsVersion)"
|
||||
/>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
<MicrosoftMacCatalystSdkPackageVersion>15.4.200-rc.2.159</MicrosoftMacCatalystSdkPackageVersion>
|
||||
<MicrosoftmacOSSdkPackageVersion>12.3.200-rc.2.159</MicrosoftmacOSSdkPackageVersion>
|
||||
<MicrosofttvOSSdkPackageVersion>15.4.200-rc.2.159</MicrosofttvOSSdkPackageVersion>
|
||||
<SamsungTizenSdkPackageVersion>7.0.100-preview.13.30</SamsungTizenSdkPackageVersion>
|
||||
<!-- emsdk -->
|
||||
<MicrosoftNETWorkloadEmscriptenManifest60300PackageVersion>6.0.4</MicrosoftNETWorkloadEmscriptenManifest60300PackageVersion>
|
||||
<MicrosoftNETWorkloadEmscriptenPackageVersion>$(MicrosoftNETWorkloadEmscriptenManifest60300PackageVersion)</MicrosoftNETWorkloadEmscriptenPackageVersion>
|
||||
|
@ -49,6 +50,7 @@
|
|||
<MicrosoftDotNetXHarnessTestRunnersCommonVersion>1.0.0-prerelease.22211.4</MicrosoftDotNetXHarnessTestRunnersCommonVersion>
|
||||
<MicrosoftDotNetXHarnessTestRunnersXunitVersion>1.0.0-prerelease.22211.4</MicrosoftDotNetXHarnessTestRunnersXunitVersion>
|
||||
<MicrosoftDotNetXHarnessCLIVersion>1.0.0-prerelease.22211.4</MicrosoftDotNetXHarnessCLIVersion>
|
||||
<TizenUIExtensionsVersion>0.6.0-pre1</TizenUIExtensionsVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<!-- Match the first three version numbers and append 00 -->
|
||||
|
@ -60,5 +62,6 @@
|
|||
<DotNetEmscriptenManifestVersionBand>$(DotNetVersionBand)</DotNetEmscriptenManifestVersionBand>
|
||||
<DotNetAndroidManifestVersionBand>$(DotNetVersionBand)</DotNetAndroidManifestVersionBand>
|
||||
<DotNetMaciOSManifestVersionBand>$(DotNetVersionBand)</DotNetMaciOSManifestVersionBand>
|
||||
<DotNetTizenManifestVersionBand>$(DotNetVersionBand)</DotNetTizenManifestVersionBand>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
|
@ -107,6 +107,14 @@ steps:
|
|||
displayName: 'Setup MSBuild Paths'
|
||||
condition: eq(variables['provisioningVS'], 'true')
|
||||
|
||||
- pwsh: |
|
||||
[xml] $fileXml = Get-Content "eng\Versions.props"
|
||||
$DotNetVersionBand = $fileXml.SelectSingleNode("Project/PropertyGroup/DotNetVersionBand").InnerText
|
||||
echo "Installing .NET $DotNetVersion"
|
||||
Invoke-WebRequest 'https://raw.githubusercontent.com/Samsung/Tizen.NET/main/workload/scripts/workload-install.ps1' -OutFile 'workload-install.ps1'
|
||||
.\workload-install.ps1 -t $DotNetVersion
|
||||
displayName: 'Install Tizen'
|
||||
|
||||
# Prepare Both
|
||||
- pwsh: ./build.ps1 --target provision
|
||||
displayName: 'Cake Provision'
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
#nullable enable
|
|
@ -0,0 +1,63 @@
|
|||
#nullable enable
|
||||
Microsoft.AspNetCore.Components.WebView.BlazorWebViewInitializedEventArgs
|
||||
Microsoft.AspNetCore.Components.WebView.BlazorWebViewInitializedEventArgs.BlazorWebViewInitializedEventArgs() -> void
|
||||
Microsoft.AspNetCore.Components.WebView.BlazorWebViewInitializingEventArgs
|
||||
Microsoft.AspNetCore.Components.WebView.BlazorWebViewInitializingEventArgs.BlazorWebViewInitializingEventArgs() -> void
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.BlazorWebView() -> void
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.BlazorWebViewInitialized -> System.EventHandler<Microsoft.AspNetCore.Components.WebView.BlazorWebViewInitializedEventArgs!>?
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.BlazorWebViewInitializing -> System.EventHandler<Microsoft.AspNetCore.Components.WebView.BlazorWebViewInitializingEventArgs!>?
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.HostPage.get -> string?
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.HostPage.set -> void
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.RootComponents.get -> Microsoft.AspNetCore.Components.WebView.Maui.RootComponentsCollection!
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.UrlLoading -> System.EventHandler<Microsoft.AspNetCore.Components.WebView.UrlLoadingEventArgs!>?
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.BlazorWebViewHandler() -> void
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.BlazorWebViewHandler(Microsoft.Maui.PropertyMapper? mapper) -> void
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.BlazorWebViewInitialized(Microsoft.AspNetCore.Components.WebView.BlazorWebViewInitializedEventArgs! args) -> void
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.BlazorWebViewInitializing(Microsoft.AspNetCore.Components.WebView.BlazorWebViewInitializingEventArgs! args) -> void
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.CreateFileProvider(string! contentRootDir) -> Microsoft.Extensions.FileProviders.IFileProvider!
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.HostPage.get -> string?
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.JSComponents.get -> Microsoft.AspNetCore.Components.Web.JSComponentConfigurationStore!
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.RootComponents.get -> Microsoft.AspNetCore.Components.WebView.Maui.RootComponentsCollection!
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView.UrlLoading(Microsoft.AspNetCore.Components.WebView.UrlLoadingEventArgs! args) -> void
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.IMauiBlazorWebViewBuilder
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.IMauiBlazorWebViewBuilder.Services.get -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.RootComponent
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.RootComponent.ComponentType.get -> System.Type?
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.RootComponent.ComponentType.set -> void
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.RootComponent.Parameters.get -> System.Collections.Generic.IDictionary<string!, object?>?
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.RootComponent.Parameters.set -> void
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.RootComponent.RootComponent() -> void
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.RootComponent.Selector.get -> string?
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.RootComponent.Selector.set -> void
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.RootComponentsCollection
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.RootComponentsCollection.JSComponents.get -> Microsoft.AspNetCore.Components.Web.JSComponentConfigurationStore!
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.RootComponentsCollection.RootComponentsCollection(Microsoft.AspNetCore.Components.Web.JSComponentConfigurationStore! jsComponents) -> void
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.TizenWebViewManager
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.TizenWebViewManager.TizenWebViewManager(Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler! blazorMauiWebViewHandler, Tizen.WebView.WebView! webview, System.IServiceProvider! provider, Microsoft.AspNetCore.Components.Dispatcher! dispatcher, Microsoft.Extensions.FileProviders.IFileProvider! fileProvider, Microsoft.AspNetCore.Components.Web.JSComponentConfigurationStore! jsComponents, string! contentRootRelativeToAppRoot, string! hostPageRelativePath) -> void
|
||||
override Microsoft.AspNetCore.Components.WebView.Maui.TizenWebViewManager.NavigateCore(System.Uri! absoluteUri) -> void
|
||||
override Microsoft.AspNetCore.Components.WebView.Maui.TizenWebViewManager.SendMessage(string! message) -> void
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.WebViewContainer
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.WebViewContainer.WebViewContainer(ElmSharp.EvasObject! parent) -> void
|
||||
Microsoft.AspNetCore.Components.WebView.Maui.WebViewContainer.WebView.get -> Tizen.WebView.WebView!
|
||||
Microsoft.AspNetCore.Components.WebView.UrlLoadingEventArgs
|
||||
Microsoft.AspNetCore.Components.WebView.UrlLoadingEventArgs.Url.get -> System.Uri!
|
||||
Microsoft.AspNetCore.Components.WebView.UrlLoadingEventArgs.UrlLoadingStrategy.get -> Microsoft.AspNetCore.Components.WebView.UrlLoadingStrategy
|
||||
Microsoft.AspNetCore.Components.WebView.UrlLoadingEventArgs.UrlLoadingStrategy.set -> void
|
||||
Microsoft.AspNetCore.Components.WebView.UrlLoadingStrategy
|
||||
Microsoft.AspNetCore.Components.WebView.UrlLoadingStrategy.CancelLoad = 2 -> Microsoft.AspNetCore.Components.WebView.UrlLoadingStrategy
|
||||
Microsoft.AspNetCore.Components.WebView.UrlLoadingStrategy.OpenExternally = 0 -> Microsoft.AspNetCore.Components.WebView.UrlLoadingStrategy
|
||||
Microsoft.AspNetCore.Components.WebView.UrlLoadingStrategy.OpenInWebView = 1 -> Microsoft.AspNetCore.Components.WebView.UrlLoadingStrategy
|
||||
Microsoft.Extensions.DependencyInjection.BlazorWebViewServiceCollectionExtensions
|
||||
override Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.CreatePlatformView() -> Microsoft.AspNetCore.Components.WebView.Maui.WebViewContainer!
|
||||
override Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.ConnectHandler(Microsoft.AspNetCore.Components.WebView.Maui.WebViewContainer! platformView) -> void
|
||||
override Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.DisconnectHandler(Microsoft.AspNetCore.Components.WebView.Maui.WebViewContainer! platformView) -> void
|
||||
static Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.MapHostPage(Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler! handler, Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView! webView) -> void
|
||||
static Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.MapRootComponents(Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler! handler, Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView! webView) -> void
|
||||
static Microsoft.Extensions.DependencyInjection.BlazorWebViewServiceCollectionExtensions.AddBlazorWebViewDeveloperTools(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
|
||||
static Microsoft.Extensions.DependencyInjection.BlazorWebViewServiceCollectionExtensions.AddMauiBlazorWebView(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.AspNetCore.Components.WebView.Maui.IMauiBlazorWebViewBuilder!
|
||||
static Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler.BlazorWebViewMapper -> Microsoft.Maui.PropertyMapper<Microsoft.AspNetCore.Components.WebView.Maui.IBlazorWebView!, Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebViewHandler!>!
|
||||
virtual Microsoft.AspNetCore.Components.WebView.Maui.BlazorWebView.CreateFileProvider(string! contentRootDir) -> Microsoft.Extensions.FileProviders.IFileProvider!
|
||||
~Microsoft.AspNetCore.Components.WebView.BlazorWebViewInitializedEventArgs.WebView.get -> Tizen.WebView.WebView
|
|
@ -0,0 +1,192 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.FileProviders;
|
||||
using Microsoft.Maui;
|
||||
using Microsoft.Maui.Dispatching;
|
||||
using Microsoft.Maui.Handlers;
|
||||
using Tizen.WebView;
|
||||
using TChromium = Tizen.WebView.Chromium;
|
||||
using TWebView = Tizen.WebView.WebView;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.WebView.Maui
|
||||
{
|
||||
/// <summary>
|
||||
/// The Tizen <see cref="ViewHandler"/> for <see cref="BlazorWebView"/>.
|
||||
/// </summary>
|
||||
public partial class BlazorWebViewHandler : ViewHandler<IBlazorWebView, WebViewContainer>
|
||||
{
|
||||
private const string AppOrigin = "http://0.0.0.0/";
|
||||
private const string BlazorInitScript = @"
|
||||
window.__receiveMessageCallbacks = [];
|
||||
window.__dispatchMessageCallback = function(message) {
|
||||
window.__receiveMessageCallbacks.forEach(function(callback) { callback(message); });
|
||||
};
|
||||
window.external = {
|
||||
sendMessage: function(message) {
|
||||
window.BlazorHandler.postMessage(message);
|
||||
},
|
||||
receiveMessage: function(callback) {
|
||||
window.__receiveMessageCallbacks.push(callback);
|
||||
}
|
||||
};
|
||||
|
||||
Blazor.start();
|
||||
|
||||
(function () {
|
||||
window.onpageshow = function(event) {
|
||||
if (event.persisted) {
|
||||
window.location.reload();
|
||||
}
|
||||
};
|
||||
})();
|
||||
";
|
||||
|
||||
private TizenWebViewManager? _webviewManager;
|
||||
private WebViewExtensions.InterceptRequestCallback? _interceptRequestCallback;
|
||||
|
||||
private TWebView NativeWebView => PlatformView.WebView;
|
||||
|
||||
private bool RequiredStartupPropertiesSet =>
|
||||
//_webview != null &&
|
||||
HostPage != null &&
|
||||
Services != null;
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override WebViewContainer CreatePlatformView()
|
||||
{
|
||||
TChromium.Initialize();
|
||||
MauiApplication.Current.Terminated += (s, e) => TChromium.Shutdown();
|
||||
|
||||
return new WebViewContainer(NativeParent!);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void ConnectHandler(WebViewContainer platformView)
|
||||
{
|
||||
_interceptRequestCallback = OnRequestInterceptCallback;
|
||||
NativeWebView.LoadFinished += OnLoadFinished;
|
||||
NativeWebView.AddJavaScriptMessageHandler("BlazorHandler", PostMessageFromJS);
|
||||
NativeWebView.SetInterceptRequestCallback(_interceptRequestCallback);
|
||||
NativeWebView.GetSettings().JavaScriptEnabled = true;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void DisconnectHandler(WebViewContainer platformView)
|
||||
{
|
||||
NativeWebView.LoadFinished -= OnLoadFinished;
|
||||
base.DisconnectHandler(platformView);
|
||||
}
|
||||
|
||||
private void PostMessageFromJS(JavaScriptMessage message)
|
||||
{
|
||||
if (message is null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(message));
|
||||
}
|
||||
|
||||
if (message.Name.Equals("BlazorHandler", StringComparison.Ordinal))
|
||||
{
|
||||
_webviewManager!.MessageReceivedInternal(new Uri(NativeWebView.Url), message.GetBodyAsString());
|
||||
}
|
||||
}
|
||||
|
||||
private void StartWebViewCoreIfPossible()
|
||||
{
|
||||
if (!RequiredStartupPropertiesSet ||
|
||||
_webviewManager != null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (PlatformView == null)
|
||||
{
|
||||
throw new InvalidOperationException($"Can't start {nameof(BlazorWebView)} without platform web view instance.");
|
||||
}
|
||||
|
||||
// We assume the host page is always in the root of the content directory, because it's
|
||||
// unclear there's any other use case. We can add more options later if so.
|
||||
var contentRootDir = Path.GetDirectoryName(HostPage!) ?? string.Empty;
|
||||
var hostPageRelativePath = Path.GetRelativePath(contentRootDir, HostPage!);
|
||||
|
||||
var fileProvider = VirtualView.CreateFileProvider(contentRootDir);
|
||||
|
||||
_webviewManager = new TizenWebViewManager(
|
||||
this,
|
||||
NativeWebView,
|
||||
Services!,
|
||||
new MauiDispatcher(Services!.GetRequiredService<IDispatcher>()),
|
||||
fileProvider,
|
||||
VirtualView.JSComponents,
|
||||
contentRootDir,
|
||||
hostPageRelativePath);
|
||||
|
||||
StaticContentHotReloadManager.AttachToWebViewManagerIfEnabled(_webviewManager);
|
||||
|
||||
VirtualView.BlazorWebViewInitializing(new BlazorWebViewInitializingEventArgs());
|
||||
VirtualView.BlazorWebViewInitialized(new BlazorWebViewInitializedEventArgs
|
||||
{
|
||||
WebView = NativeWebView,
|
||||
});
|
||||
|
||||
if (RootComponents != null)
|
||||
{
|
||||
foreach (var rootComponent in RootComponents)
|
||||
{
|
||||
// Since the page isn't loaded yet, this will always complete synchronously
|
||||
_ = rootComponent.AddToWebViewManagerAsync(_webviewManager);
|
||||
}
|
||||
}
|
||||
_webviewManager.Navigate("/");
|
||||
}
|
||||
|
||||
private void OnRequestInterceptCallback(IntPtr context, IntPtr request, IntPtr userdata)
|
||||
{
|
||||
if (request == IntPtr.Zero)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var url = NativeWebView.GetInterceptRequestUrl(request);
|
||||
|
||||
if (url.StartsWith(AppOrigin))
|
||||
{
|
||||
var allowFallbackOnHostPage = url.EndsWith("/");
|
||||
url = QueryStringHelper.RemovePossibleQueryString(url);
|
||||
if (_webviewManager!.TryGetResponseContentInternal(url, allowFallbackOnHostPage, out var statusCode, out var statusMessage, out var content, out var headers))
|
||||
{
|
||||
var header = $"HTTP/1.0 200 OK\r\n";
|
||||
foreach (var item in headers)
|
||||
{
|
||||
header += $"{item.Key}:{item.Value}\r\n";
|
||||
}
|
||||
header += "\r\n";
|
||||
|
||||
using (MemoryStream memstream = new MemoryStream())
|
||||
{
|
||||
content.CopyTo(memstream);
|
||||
var body = memstream.ToArray();
|
||||
NativeWebView.SetInterceptRequestResponse(request, header, body, (uint)body.Length);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
NativeWebView.IgnoreInterceptRequest(request);
|
||||
}
|
||||
|
||||
private void OnLoadFinished(object? sender, EventArgs e)
|
||||
{
|
||||
NativeWebView.SetFocus(true);
|
||||
var url = NativeWebView.Url;
|
||||
|
||||
if (url == AppOrigin)
|
||||
NativeWebView.Eval(BlazorInitScript);
|
||||
}
|
||||
|
||||
internal IFileProvider CreateFileProvider(string contentRootDir)
|
||||
{
|
||||
return new TizenMauiAssetFileProvider(contentRootDir);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using Microsoft.Extensions.FileProviders;
|
||||
using Microsoft.Extensions.Primitives;
|
||||
using Tizen.Applications;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.WebView.Maui
|
||||
{
|
||||
/// <summary>
|
||||
/// A minimal implementation of an IFileProvider to be used by the BlazorWebView and WebViewManager types.
|
||||
/// </summary>
|
||||
internal sealed class TizenMauiAssetFileProvider : IFileProvider
|
||||
{
|
||||
private readonly string _resDir;
|
||||
|
||||
public TizenMauiAssetFileProvider(string contentRootDir)
|
||||
{
|
||||
_resDir = Path.Combine(Application.Current.DirectoryInfo.Resource, contentRootDir);
|
||||
}
|
||||
|
||||
public IDirectoryContents GetDirectoryContents(string subpath)
|
||||
=> new TizenMauiAssetDirectoryContents(Path.Combine(_resDir, subpath));
|
||||
|
||||
public IFileInfo GetFileInfo(string subpath)
|
||||
=> new TizenMauiAssetFileInfo(Path.Combine(_resDir, subpath));
|
||||
|
||||
public IChangeToken? Watch(string filter)
|
||||
=> null;
|
||||
|
||||
private sealed class TizenMauiAssetFileInfo : IFileInfo
|
||||
{
|
||||
private readonly string _filePath;
|
||||
|
||||
public TizenMauiAssetFileInfo(string filePath)
|
||||
{
|
||||
_filePath = filePath;
|
||||
|
||||
Name = Path.GetFileName(_filePath);
|
||||
|
||||
var fileInfo = new FileInfo(_filePath);
|
||||
Exists = fileInfo.Exists;
|
||||
Length = Exists ? fileInfo.Length : -1;
|
||||
}
|
||||
|
||||
public bool Exists { get; }
|
||||
public long Length { get; }
|
||||
public string PhysicalPath { get; } = null!;
|
||||
public string Name { get; }
|
||||
public DateTimeOffset LastModified { get; } = DateTimeOffset.FromUnixTimeSeconds(0);
|
||||
public bool IsDirectory => false;
|
||||
|
||||
public Stream CreateReadStream()
|
||||
=> File.OpenRead(_filePath);
|
||||
}
|
||||
|
||||
// This is never used by BlazorWebView or WebViewManager
|
||||
private sealed class TizenMauiAssetDirectoryContents : IDirectoryContents
|
||||
{
|
||||
public TizenMauiAssetDirectoryContents(string filePath)
|
||||
{
|
||||
}
|
||||
|
||||
public bool Exists => false;
|
||||
|
||||
public IEnumerator<IFileInfo> GetEnumerator()
|
||||
=> throw new NotImplementedException();
|
||||
|
||||
IEnumerator IEnumerable.GetEnumerator()
|
||||
=> throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text.Encodings.Web;
|
||||
using Microsoft.AspNetCore.Components.Web;
|
||||
using Microsoft.Extensions.FileProviders;
|
||||
using TWebView = Tizen.WebView.WebView;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.WebView.Maui
|
||||
{
|
||||
/// <summary>
|
||||
/// An implementation of <see cref="WebViewManager"/> that uses the Tizen WebView browser control
|
||||
/// to render web content.
|
||||
/// </summary>
|
||||
public class TizenWebViewManager : WebViewManager
|
||||
{
|
||||
private const string AppOrigin = "http://0.0.0.0/";
|
||||
|
||||
private readonly BlazorWebViewHandler _blazorMauiWebViewHandler;
|
||||
private readonly TWebView _webview;
|
||||
private readonly string _contentRootRelativeToAppRoot;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of <see cref="TizenWebViewManager"/>
|
||||
/// </summary>
|
||||
/// <param name="blazorMauiWebViewHandler">The <see cref="BlazorWebViewHandler"/>.</param>
|
||||
/// <param name="webview">A wrapper to access platform-specific WebView APIs.</param>
|
||||
/// <param name="provider">The <see cref="IServiceProvider"/> for the application.</param>
|
||||
/// <param name="dispatcher">A <see cref="Dispatcher"/> instance instance that can marshal calls to the required thread or sync context.</param>
|
||||
/// <param name="fileProvider">Provides static content to the webview.</param>
|
||||
/// <param name="jsComponents">Describes configuration for adding, removing, and updating root components from JavaScript code.</param>
|
||||
/// <param name="contentRootRelativeToAppRoot">Path to the directory containing application content files.</param>
|
||||
/// <param name="hostPageRelativePath">Path to the host page within the fileProvider.</param>
|
||||
public TizenWebViewManager(BlazorWebViewHandler blazorMauiWebViewHandler, TWebView webview, IServiceProvider provider, Dispatcher dispatcher, IFileProvider fileProvider, JSComponentConfigurationStore jsComponents, string contentRootRelativeToAppRoot, string hostPageRelativePath)
|
||||
: base(provider, dispatcher, new Uri(AppOrigin), fileProvider, jsComponents, hostPageRelativePath)
|
||||
{
|
||||
_blazorMauiWebViewHandler = blazorMauiWebViewHandler ?? throw new ArgumentNullException(nameof(blazorMauiWebViewHandler));
|
||||
_webview = webview ?? throw new ArgumentNullException(nameof(webview));
|
||||
_contentRootRelativeToAppRoot = contentRootRelativeToAppRoot;
|
||||
|
||||
}
|
||||
|
||||
internal bool TryGetResponseContentInternal(string uri, bool allowFallbackOnHostPage, out int statusCode, out string statusMessage, out Stream content, out IDictionary<string, string> headers)
|
||||
{
|
||||
var defaultResult = TryGetResponseContent(uri, allowFallbackOnHostPage, out statusCode, out statusMessage, out content, out headers);
|
||||
var hotReloadedResult = StaticContentHotReloadManager.TryReplaceResponseContent(_contentRootRelativeToAppRoot, uri, ref statusCode, ref content, headers);
|
||||
return defaultResult || hotReloadedResult;
|
||||
}
|
||||
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void NavigateCore(Uri absoluteUri)
|
||||
{
|
||||
_webview.LoadUrl(absoluteUri.ToString());
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void SendMessage(string message)
|
||||
{
|
||||
var messageJSStringLiteral = JavaScriptEncoder.Default.Encode(message);
|
||||
_webview.Eval($"__dispatchMessageCallback(\"{messageJSStringLiteral}\")");
|
||||
}
|
||||
|
||||
internal void MessageReceivedInternal(Uri uri, string message)
|
||||
{
|
||||
MessageReceived(uri, message);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
using System;
|
||||
using Tizen.UIExtensions.ElmSharp;
|
||||
using ElmSharp;
|
||||
using TWebView = Tizen.WebView.WebView;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.WebView.Maui
|
||||
{
|
||||
/// <summary>
|
||||
/// A Tizen WebView browser control container.
|
||||
/// </summary>
|
||||
public class WebViewContainer : WidgetLayout
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// A Tizen WebView.
|
||||
/// </summary>
|
||||
public TWebView WebView { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of <see cref="WebViewContainer"/>
|
||||
/// </summary>
|
||||
/// <param name="parent">The <see cref="EvasObject"/>.</param>
|
||||
public WebViewContainer(EvasObject parent) : base(parent)
|
||||
{
|
||||
WebView = new TWebView(parent);
|
||||
SetContent(WebView);
|
||||
AllowFocus(true);
|
||||
Focused += OnFocused;
|
||||
Unfocused += OnUnfocused;
|
||||
}
|
||||
|
||||
void OnFocused(object? sender, EventArgs e)
|
||||
{
|
||||
WebView.SetFocus(true);
|
||||
}
|
||||
|
||||
void OnUnfocused(object? sender, EventArgs e)
|
||||
{
|
||||
WebView.SetFocus(false);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,79 @@
|
|||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using TWebView = Tizen.WebView.WebView;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.WebView.Maui
|
||||
{
|
||||
/// <summary>
|
||||
/// WebViewExtension
|
||||
/// </summary>
|
||||
internal static class WebViewExtensions
|
||||
{
|
||||
public const string ChromiumEwk = "libchromium-ewk.so";
|
||||
|
||||
public static void SetInterceptRequestCallback(this TWebView webView, InterceptRequestCallback callback)
|
||||
{
|
||||
var context = webView.GetContext();
|
||||
var handleField = context.GetType().GetField("_handle", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
|
||||
var contextHandle = (IntPtr?)handleField?.GetValue(context);
|
||||
if (contextHandle != null)
|
||||
ewk_context_intercept_request_callback_set(contextHandle.Value, callback, IntPtr.Zero);
|
||||
}
|
||||
|
||||
public static void SetInspectorStart(this TWebView webView, uint port)
|
||||
{
|
||||
var context = webView.GetContext();
|
||||
var handleField = context.GetType().GetField("_handle", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
|
||||
var contextHandle = (IntPtr?)handleField?.GetValue(context);
|
||||
if (contextHandle != null)
|
||||
ewk_context_inspector_server_start(contextHandle.Value, port);
|
||||
}
|
||||
|
||||
public static bool SetInterceptRequestResponse(this TWebView webView, IntPtr request, string header, byte[] body, uint length)
|
||||
{
|
||||
return ewk_intercept_request_response_set(request, header, body, length);
|
||||
}
|
||||
|
||||
public static bool IgnoreInterceptRequest(this TWebView webView, IntPtr request)
|
||||
{
|
||||
return ewk_intercept_request_ignore(request);
|
||||
}
|
||||
|
||||
public static string GetInterceptRequestUrl(this TWebView webView, IntPtr request)
|
||||
{
|
||||
return Marshal.PtrToStringAnsi(_ewk_intercept_request_url_get(request)) ?? string.Empty;
|
||||
}
|
||||
|
||||
[DllImport(ChromiumEwk)]
|
||||
internal static extern IntPtr ewk_view_context_get(IntPtr obj);
|
||||
|
||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||
public delegate void InterceptRequestCallback(IntPtr context, IntPtr request, IntPtr userData);
|
||||
|
||||
[DllImport(ChromiumEwk)]
|
||||
internal static extern void ewk_context_intercept_request_callback_set(IntPtr context, InterceptRequestCallback callback, IntPtr userData);
|
||||
|
||||
[DllImport(ChromiumEwk, EntryPoint = "ewk_intercept_request_url_get")]
|
||||
internal static extern IntPtr _ewk_intercept_request_url_get(IntPtr request);
|
||||
|
||||
[DllImport(ChromiumEwk, EntryPoint = "ewk_intercept_request_http_method_get")]
|
||||
internal static extern IntPtr _ewk_intercept_request_http_method_get(IntPtr request);
|
||||
|
||||
internal static string ewk_intercept_request_http_method_get(IntPtr request)
|
||||
{
|
||||
return Marshal.PtrToStringAnsi(_ewk_intercept_request_http_method_get(request)) ?? string.Empty;
|
||||
}
|
||||
|
||||
[DllImport(ChromiumEwk)]
|
||||
public static extern uint ewk_context_inspector_server_start(IntPtr context, uint port);
|
||||
|
||||
[DllImport(ChromiumEwk)]
|
||||
internal static extern bool ewk_intercept_request_ignore(IntPtr request);
|
||||
|
||||
[DllImport(ChromiumEwk)]
|
||||
internal static extern bool ewk_intercept_request_response_set(IntPtr request, string header, string body, uint length);
|
||||
|
||||
[DllImport(ChromiumEwk)]
|
||||
internal static extern bool ewk_intercept_request_response_set(IntPtr request, string header, byte[] body, uint length);
|
||||
}
|
||||
}
|
|
@ -13,6 +13,8 @@ using WebView2Control = Microsoft.UI.Xaml.Controls.WebView2;
|
|||
using AWebView = Android.Webkit.WebView;
|
||||
#elif IOS || MACCATALYST
|
||||
using WebKit;
|
||||
#elif TIZEN
|
||||
using TWebView = Tizen.WebView.WebView;
|
||||
#endif
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.WebView
|
||||
|
@ -39,6 +41,11 @@ namespace Microsoft.AspNetCore.Components.WebView
|
|||
/// the default values to allow further configuring additional options.
|
||||
/// </summary>
|
||||
public WKWebView WebView { get; internal set; }
|
||||
#elif TIZEN
|
||||
/// <summary>
|
||||
/// Gets the <see cref="TWebView"/> instance that was initialized.
|
||||
/// </summary>
|
||||
public TWebView WebView { get; internal set; }
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,6 +12,8 @@ using WebView2Control = Microsoft.UI.Xaml.Controls.WebView2;
|
|||
using AWebView = Android.Webkit.WebView;
|
||||
#elif IOS || MACCATALYST
|
||||
using WebKit;
|
||||
#elif TIZEN
|
||||
using TWebView = Tizen.WebView.WebView;
|
||||
#endif
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.WebView
|
||||
|
|
|
@ -4,6 +4,7 @@ using Microsoft.Maui;
|
|||
using Microsoft.Maui.Controls.Compatibility;
|
||||
using Microsoft.Maui.Controls.Compatibility.Hosting;
|
||||
using Microsoft.Maui.Controls.Hosting;
|
||||
using Microsoft.Maui.Devices;
|
||||
using Microsoft.Maui.Hosting;
|
||||
|
||||
namespace Microsoft.Maui.Controls.Compatibility.ControlGallery
|
||||
|
@ -41,6 +42,12 @@ namespace Microsoft.Maui.Controls.Compatibility.ControlGallery
|
|||
effects.AddCompatibilityEffects(AppDomain.CurrentDomain.GetAssemblies());
|
||||
});
|
||||
|
||||
if (DeviceInfo.Platform == DevicePlatform.Tizen)
|
||||
{
|
||||
//Some controls still need to use legacy renderers on Tizen.
|
||||
builder.UseMauiCompatibility();
|
||||
}
|
||||
|
||||
DependencyService.Register(AppDomain.CurrentDomain.GetAssemblies());
|
||||
|
||||
return builder;
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
using System.ComponentModel;
|
||||
using Microsoft.Maui.Controls;
|
||||
using Microsoft.Maui.Controls.Compatibility.ControlGallery.Tizen;
|
||||
using Microsoft.Maui.Controls.Compatibility.Platform.Tizen;
|
||||
using Microsoft.Maui.Controls.Platform;
|
||||
using ElmSharp;
|
||||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.ControlGallery.Tizen;
|
||||
using Xamarin.Forms.Platform.Tizen;
|
||||
using EColor = ElmSharp.Color;
|
||||
|
||||
[assembly: ExportEffect(typeof(BorderEffect), "BorderEffect")]
|
||||
namespace Xamarin.Forms.ControlGallery.Tizen
|
||||
namespace Microsoft.Maui.Controls.Compatibility.ControlGallery.Tizen
|
||||
{
|
||||
public class BorderEffect : PlatformEffect
|
||||
{
|
|
@ -0,0 +1,38 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>$(_MauiDotNetTfm)-tizen</TargetFramework>
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>Microsoft.Maui.Controls.Compatibility.ControlGallery.Tizen</RootNamespace>
|
||||
<AssemblyName>Microsoft.Maui.Controls.Compatibility.ControlGallery.Tizen</AssemblyName>
|
||||
<IsPackable>false</IsPackable>
|
||||
<Nullable>disable</Nullable>
|
||||
<!--<DefineConstants>$(DefineConstants);HAVE_OPENTK</DefineConstants>-->
|
||||
<!--<MtouchLink Condition="'$(CI)' == 'true'">Full</MtouchLink>-->
|
||||
<NoWarn>0612</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Tizen.NET.MaterialComponents" Version="0.9.9-pre2" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\..\..\Compatibility\Maps\src\Tizen\Compatibility.Maps.Tizen.csproj" />
|
||||
<ProjectReference Include="..\..\..\..\Controls\tests\CustomAttributes\Controls.CustomAttributes.csproj" />
|
||||
<ProjectReference Include="..\..\..\..\Controls\Maps\src\Controls.Maps.csproj" />
|
||||
<ProjectReference Include="..\..\..\..\Controls\src\Core\Controls.Core.csproj" />
|
||||
<ProjectReference Include="..\..\..\..\Core\src\Core.csproj" />
|
||||
<ProjectReference Include="..\..\..\..\Compatibility\Core\src\Compatibility.csproj" />
|
||||
<ProjectReference Include="..\Core\Compatibility.ControlGallery.Core.csproj" />
|
||||
|
||||
<!-- <ProjectReference Include="..\Xamarin.Forms.Core\Xamarin.Forms.Core.csproj" />
|
||||
<ProjectReference Include="..\Xamarin.Forms.Material.Tizen\Xamarin.Forms.Material.Tizen.csproj" />
|
||||
<ProjectReference Include="..\Xamarin.Forms.Platform\Xamarin.Forms.Platform.csproj" />
|
||||
<ProjectReference Include="..\Xamarin.Forms.Xaml\Xamarin.Forms.Xaml.csproj" />
|
||||
<ProjectReference Include="..\Xamarin.Forms.Platform.Tizen\Xamarin.Forms.Platform.Tizen.csproj" />
|
||||
<ProjectReference Include="..\Xamarin.Forms.Maps\Xamarin.Forms.Maps.csproj" />
|
||||
<ProjectReference Include="..\Xamarin.Forms.Maps.Tizen\Xamarin.Forms.Maps.Tizen.csproj" />
|
||||
<ProjectReference Include="..\Xamarin.Forms.Controls\Xamarin.Forms.Controls.csproj" /> -->
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
|
@ -0,0 +1,32 @@
|
|||
using ElmSharp;
|
||||
using Tizen.Applications;
|
||||
using Tizen.NET.MaterialComponents;
|
||||
using Microsoft.Maui.Controls.Compatibility.ControlGallery;
|
||||
using Microsoft.Maui.Controls.Compatibility.ControlGallery.Issues;
|
||||
using Microsoft.Maui.Controls.Compatibility.Platform.Tizen;
|
||||
using Microsoft.Maui.Controls.Internals;
|
||||
using Microsoft.Maui.Handlers;
|
||||
using Microsoft.Maui.Hosting;
|
||||
using Microsoft.Maui.Platform;
|
||||
|
||||
namespace Microsoft.Maui.Controls.Compatibility.ControlGallery.Tizen
|
||||
{
|
||||
class MainApplication : MauiApplication
|
||||
{
|
||||
protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
|
||||
|
||||
protected override void OnCreate()
|
||||
{
|
||||
base.OnCreate();
|
||||
MaterialComponents.Init(DirectoryInfo.Resource);
|
||||
}
|
||||
|
||||
static void Main(string[] args)
|
||||
{
|
||||
var app = new MainApplication();
|
||||
FormsMaps.Init("HERE", "write-your-API-key-here");
|
||||
//FormsMaterial.Init();
|
||||
app.Run(args);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
using Microsoft.Maui.Controls.Compatibility;
|
||||
using Microsoft.Maui.Controls.Compatibility.ControlGallery;
|
||||
using Microsoft.Maui.Controls.Compatibility.ControlGallery.Tizen;
|
||||
using Microsoft.Maui.Controls.Compatibility.Platform.Tizen;
|
||||
|
||||
[assembly: ExportRenderer(typeof(DisposeLabel), typeof(DisposeLabelRenderer))]
|
||||
namespace Microsoft.Maui.Controls.Compatibility.ControlGallery.Tizen
|
||||
{
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
public class DisposeLabelRenderer : LabelRenderer
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
{
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
((DisposeLabel)Element).SendRendererDisposed();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
using Microsoft.Maui.Controls.Compatibility;
|
||||
using Microsoft.Maui.Controls.Compatibility.ControlGallery;
|
||||
using Microsoft.Maui.Controls.Compatibility.ControlGallery.Tizen;
|
||||
using Microsoft.Maui.Controls.Compatibility.Platform.Tizen;
|
||||
|
||||
[assembly: ExportRenderer(typeof(DisposePage), typeof(DisposePageRenderer))]
|
||||
namespace Microsoft.Maui.Controls.Compatibility.ControlGallery.Tizen
|
||||
{
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
public class DisposePageRenderer : PageRenderer
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
{
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
((DisposePage)Element).SendRendererDisposed();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,12 +1,13 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.ControlGallery.Tizen;
|
||||
using Xamarin.Forms.Controls;
|
||||
using Microsoft.Maui.Controls;
|
||||
using Microsoft.Maui.Controls.Compatibility;
|
||||
using Microsoft.Maui.Controls.Compatibility.ControlGallery.Tizen;
|
||||
using Microsoft.Maui.Controls.Internals;
|
||||
|
||||
[assembly: Dependency(typeof(PlatformSpecificCoreGalleryFactory))]
|
||||
|
||||
namespace Xamarin.Forms.ControlGallery.Tizen
|
||||
namespace Microsoft.Maui.Controls.Compatibility.ControlGallery.Tizen
|
||||
{
|
||||
public class PlatformSpecificCoreGalleryFactory : IPlatformSpecificCoreGalleryFactory
|
||||
{
|
|
@ -1,10 +1,11 @@
|
|||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.ControlGallery.Tizen;
|
||||
using Xamarin.Forms.Controls;
|
||||
using Xamarin.Forms.Platform.Tizen;
|
||||
using Microsoft.Maui.Controls;
|
||||
using Microsoft.Maui.Controls.Compatibility;
|
||||
using Microsoft.Maui.Controls.Compatibility.ControlGallery.Tizen;
|
||||
using Microsoft.Maui.Controls.Compatibility.Platform.Tizen;
|
||||
using Microsoft.Maui.Controls.Internals;
|
||||
|
||||
[assembly: Dependency(typeof(RegistrarValidationService))]
|
||||
namespace Xamarin.Forms.ControlGallery.Tizen
|
||||
namespace Microsoft.Maui.Controls.Compatibility.ControlGallery.Tizen
|
||||
{
|
||||
public class RegistrarValidationService : IRegistrarValidationService
|
||||
{
|
|
@ -0,0 +1,27 @@
|
|||
using Microsoft.Maui.Controls;
|
||||
using Microsoft.Maui.Controls.Compatibility;
|
||||
using Microsoft.Maui.Controls.Compatibility.ControlGallery.Tizen;
|
||||
using Microsoft.Maui.Controls.Compatibility.ControlGallery.Issues.Helpers;
|
||||
using Microsoft.Maui.Controls.Compatibility.Platform.Tizen;
|
||||
using Microsoft.Maui.Controls.Internals;
|
||||
using Microsoft.Maui.Platform;
|
||||
using ELabel = ElmSharp.Label;
|
||||
|
||||
[assembly: Dependency(typeof(SampleNativeControl))]
|
||||
namespace Microsoft.Maui.Controls.Compatibility.ControlGallery.Tizen
|
||||
{
|
||||
public class SampleNativeControl : ISampleNativeControl
|
||||
{
|
||||
public View View
|
||||
{
|
||||
get
|
||||
{
|
||||
var label = new ELabel(CoreAppExtensions.MainWindow)
|
||||
{
|
||||
Text = "Sample Native Control"
|
||||
};
|
||||
return label.ToView();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
До Ширина: | Высота: | Размер: 4.9 KiB После Ширина: | Высота: | Размер: 4.9 KiB |
До Ширина: | Высота: | Размер: 10 KiB После Ширина: | Высота: | Размер: 10 KiB |
До Ширина: | Высота: | Размер: 2.4 KiB После Ширина: | Высота: | Размер: 2.4 KiB |
До Ширина: | Высота: | Размер: 8.1 KiB После Ширина: | Высота: | Размер: 8.1 KiB |
До Ширина: | Высота: | Размер: 206 KiB После Ширина: | Высота: | Размер: 206 KiB |
До Ширина: | Высота: | Размер: 6.1 KiB После Ширина: | Высота: | Размер: 6.1 KiB |
До Ширина: | Высота: | Размер: 5.2 KiB После Ширина: | Высота: | Размер: 5.2 KiB |
До Ширина: | Высота: | Размер: 615 B После Ширина: | Высота: | Размер: 615 B |
До Ширина: | Высота: | Размер: 1.4 KiB После Ширина: | Высота: | Размер: 1.4 KiB |
До Ширина: | Высота: | Размер: 1.2 KiB После Ширина: | Высота: | Размер: 1.2 KiB |
До Ширина: | Высота: | Размер: 232 B После Ширина: | Высота: | Размер: 232 B |
До Ширина: | Высота: | Размер: 629 B После Ширина: | Высота: | Размер: 629 B |
До Ширина: | Высота: | Размер: 629 B После Ширина: | Высота: | Размер: 629 B |
До Ширина: | Высота: | Размер: 1.5 KiB После Ширина: | Высота: | Размер: 1.5 KiB |
До Ширина: | Высота: | Размер: 480 B После Ширина: | Высота: | Размер: 480 B |
До Ширина: | Высота: | Размер: 404 B После Ширина: | Высота: | Размер: 404 B |
До Ширина: | Высота: | Размер: 490 B После Ширина: | Высота: | Размер: 490 B |
До Ширина: | Высота: | Размер: 5.0 KiB После Ширина: | Высота: | Размер: 5.0 KiB |
До Ширина: | Высота: | Размер: 1.5 KiB После Ширина: | Высота: | Размер: 1.5 KiB |
До Ширина: | Высота: | Размер: 77 KiB После Ширина: | Высота: | Размер: 77 KiB |
До Ширина: | Высота: | Размер: 4.9 KiB После Ширина: | Высота: | Размер: 4.9 KiB |
До Ширина: | Высота: | Размер: 317 B После Ширина: | Высота: | Размер: 317 B |
До Ширина: | Высота: | Размер: 5.1 KiB После Ширина: | Высота: | Размер: 5.1 KiB |
До Ширина: | Высота: | Размер: 923 B После Ширина: | Высота: | Размер: 923 B |
До Ширина: | Высота: | Размер: 923 B После Ширина: | Высота: | Размер: 923 B |
До Ширина: | Высота: | Размер: 1.1 KiB После Ширина: | Высота: | Размер: 1.1 KiB |
До Ширина: | Высота: | Размер: 1.1 KiB После Ширина: | Высота: | Размер: 1.1 KiB |
До Ширина: | Высота: | Размер: 671 B После Ширина: | Высота: | Размер: 671 B |
До Ширина: | Высота: | Размер: 320 B После Ширина: | Высота: | Размер: 320 B |
До Ширина: | Высота: | Размер: 1.2 KiB После Ширина: | Высота: | Размер: 1.2 KiB |
До Ширина: | Высота: | Размер: 1.2 KiB После Ширина: | Высота: | Размер: 1.2 KiB |
До Ширина: | Высота: | Размер: 936 B После Ширина: | Высота: | Размер: 936 B |
До Ширина: | Высота: | Размер: 15 KiB После Ширина: | Высота: | Размер: 15 KiB |
До Ширина: | Высота: | Размер: 7.8 KiB После Ширина: | Высота: | Размер: 7.8 KiB |
До Ширина: | Высота: | Размер: 544 B После Ширина: | Высота: | Размер: 544 B |
До Ширина: | Высота: | Размер: 255 B После Ширина: | Высота: | Размер: 255 B |
До Ширина: | Высота: | Размер: 605 B После Ширина: | Высота: | Размер: 605 B |
До Ширина: | Высота: | Размер: 219 B После Ширина: | Высота: | Размер: 219 B |
До Ширина: | Высота: | Размер: 227 B После Ширина: | Высота: | Размер: 227 B |
До Ширина: | Высота: | Размер: 430 B После Ширина: | Высота: | Размер: 430 B |
До Ширина: | Высота: | Размер: 1.1 KiB После Ширина: | Высота: | Размер: 1.1 KiB |
До Ширина: | Высота: | Размер: 5.6 KiB После Ширина: | Высота: | Размер: 5.6 KiB |
До Ширина: | Высота: | Размер: 1.1 KiB После Ширина: | Высота: | Размер: 1.1 KiB |
До Ширина: | Высота: | Размер: 3.0 KiB После Ширина: | Высота: | Размер: 3.0 KiB |
До Ширина: | Высота: | Размер: 5.4 KiB После Ширина: | Высота: | Размер: 5.4 KiB |
До Ширина: | Высота: | Размер: 484 B После Ширина: | Высота: | Размер: 484 B |
До Ширина: | Высота: | Размер: 484 B После Ширина: | Высота: | Размер: 484 B |
До Ширина: | Высота: | Размер: 5.3 KiB После Ширина: | Высота: | Размер: 5.3 KiB |
До Ширина: | Высота: | Размер: 122 KiB После Ширина: | Высота: | Размер: 122 KiB |
До Ширина: | Высота: | Размер: 3.0 KiB После Ширина: | Высота: | Размер: 3.0 KiB |
До Ширина: | Высота: | Размер: 708 B После Ширина: | Высота: | Размер: 708 B |
До Ширина: | Высота: | Размер: 111 KiB После Ширина: | Высота: | Размер: 111 KiB |
До Ширина: | Высота: | Размер: 6.6 KiB После Ширина: | Высота: | Размер: 6.6 KiB |
До Ширина: | Высота: | Размер: 1.5 KiB После Ширина: | Высота: | Размер: 1.5 KiB |
До Ширина: | Высота: | Размер: 21 KiB После Ширина: | Высота: | Размер: 21 KiB |
До Ширина: | Высота: | Размер: 380 B После Ширина: | Высота: | Размер: 380 B |
До Ширина: | Высота: | Размер: 4.9 KiB После Ширина: | Высота: | Размер: 4.9 KiB |
До Ширина: | Высота: | Размер: 5.6 KiB После Ширина: | Высота: | Размер: 5.6 KiB |
До Ширина: | Высота: | Размер: 151 KiB После Ширина: | Высота: | Размер: 151 KiB |
До Ширина: | Высота: | Размер: 53 KiB После Ширина: | Высота: | Размер: 53 KiB |
До Ширина: | Высота: | Размер: 7.0 KiB После Ширина: | Высота: | Размер: 7.0 KiB |
До Ширина: | Высота: | Размер: 4.0 KiB После Ширина: | Высота: | Размер: 4.0 KiB |
До Ширина: | Высота: | Размер: 181 B После Ширина: | Высота: | Размер: 181 B |
До Ширина: | Высота: | Размер: 671 B После Ширина: | Высота: | Размер: 671 B |
До Ширина: | Высота: | Размер: 1.5 KiB После Ширина: | Высота: | Размер: 1.5 KiB |
До Ширина: | Высота: | Размер: 9.5 KiB После Ширина: | Высота: | Размер: 9.5 KiB |
До Ширина: | Высота: | Размер: 3.4 KiB После Ширина: | Высота: | Размер: 3.4 KiB |
До Ширина: | Высота: | Размер: 463 B После Ширина: | Высота: | Размер: 463 B |
До Ширина: | Высота: | Размер: 6.6 KiB После Ширина: | Высота: | Размер: 6.6 KiB |
До Ширина: | Высота: | Размер: 539 B После Ширина: | Высота: | Размер: 539 B |
До Ширина: | Высота: | Размер: 539 B После Ширина: | Высота: | Размер: 539 B |
До Ширина: | Высота: | Размер: 20 KiB После Ширина: | Высота: | Размер: 20 KiB |