51 строка
1.3 KiB
Markdown
51 строка
1.3 KiB
Markdown
|
SkiaSharp provides the same features as the native C++ library through a method of wrapping
|
||
|
the C++ API with a C API that we P/Invoke into.
|
||
|
|
||
|
Then C# wraps the C API to provide an API similar to the object oriented binding provided by C++.
|
||
|
|
||
|
For example, given this C++ API:
|
||
|
|
||
|
```cpp
|
||
|
class SK_API SkPaint {
|
||
|
public:
|
||
|
bool isAntiAlias() const;
|
||
|
void setAntiAlias(bool aa);
|
||
|
};
|
||
|
```
|
||
|
|
||
|
This is then wrapped in a C API:
|
||
|
|
||
|
```cpp
|
||
|
bool sk_paint_is_antialias(const sk_paint_t* cpaint) {
|
||
|
return AsPaint(cpaint)->isAntiAlias();
|
||
|
}
|
||
|
void sk_paint_set_antialias(sk_paint_t* cpaint, bool aa) {
|
||
|
AsPaint(cpaint)->setAntiAlias(aa);
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Which is then pulled into the C# project via P/Invoke:
|
||
|
|
||
|
```csharp
|
||
|
public extern static bool sk_paint_is_antialias (sk_paint_t t);
|
||
|
public extern static void sk_paint_set_antialias (sk_paint_t t, bool aa);
|
||
|
```
|
||
|
|
||
|
Finally, this is wrapped into a neat C# class:
|
||
|
|
||
|
```csharp
|
||
|
public class SKPaint : SKObject
|
||
|
{
|
||
|
public bool IsAntialias {
|
||
|
get { return SkiaApi.sk_paint_is_antialias (Handle); }
|
||
|
set { SkiaApi.sk_paint_set_antialias (Handle, value); }
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
As a result, the C# API functions and appears the same as the C++ API.
|
||
|
|
||
|
Since the C API is currently a work in progress of the Skia project, we
|
||
|
maintain a fork in github.com/mono/skia that has our additions. We intend
|
||
|
to upstream those changes to Google.
|