xmake.repo/packages/n/noesis/latest/Include/NsGui/DrawingContext.h

101 lines
3.1 KiB
C
Raw Permalink Normal View History

2024-12-22 19:15:02 +08:00
////////////////////////////////////////////////////////////////////////////////////////////////////
// NoesisGUI - http://www.noesisengine.com
// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef __GUI_DRAWINGCONTEXT_H__
#define __GUI_DRAWINGCONTEXT_H__
#include <NsCore/Noesis.h>
#include <NsCore/BaseComponent.h>
#include <NsCore/ReflectionDeclare.h>
#include <NsCore/Ptr.h>
#include <NsGui/CoreApi.h>
#undef DrawText
namespace Noesis
{
struct Point;
struct Rect;
class Brush;
class Pen;
class Geometry;
class ImageSource;
class FormattedText;
class Transform;
class DrawingCommands;
enum BlendingMode: int32_t;
NS_WARNING_PUSH
NS_MSVC_WARNING_DISABLE(4251 4275)
////////////////////////////////////////////////////////////////////////////////////////////////////
/// Describes visual content using draw, push, and pop commands during UIElement *OnRender*.
///
/// When you use a DrawingContext object's draw commands, you are actually storing a set of
/// rendering instructions that will later be used by the graphics system; you are not drawing to
/// the screen in real-time.
///
/// https://docs.microsoft.com/en-us/dotnet/api/system.windows.media.drawingcontext
////////////////////////////////////////////////////////////////////////////////////////////////////
class NS_GUI_CORE_API DrawingContext: public BaseComponent
{
public:
DrawingContext();
~DrawingContext();
/// Draws a line between the specified points using the specified Pen
void DrawLine(Pen* pen, const Point& p0, const Point& p1);
/// Draws a rectangle with the specified Brush and Pen
void DrawRectangle(Brush* brush, Pen* pen, const Rect& rect);
/// Draws a rounded rectangle with the specified Brush and Pen
void DrawRoundedRectangle(Brush* brush, Pen* pen, const Rect& rect, float rX, float rY);
/// Draws an ellipse with the specified Brush and Pen
void DrawEllipse(Brush* brush, Pen* pen, const Point& center, float rX, float rY);
/// Draws the specified Geometry using the specified Brush and Pen
void DrawGeometry(Brush* brush, Pen* pen, Geometry* geometry);
/// Draws an image into the region defined by the specified Rect
void DrawImage(ImageSource* imageSource, const Rect& rect);
/// Draws formatted text at the specified location
void DrawText(FormattedText* formattedText, const Rect& bounds);
/// Pops the last opacity mask, opacity, clip, effect, or transform operation that was pushed
/// onto the drawing context
void Pop();
/// Pushes the specified clip region onto the drawing context
void PushClip(Geometry* clipGeometry);
/// Pushes the specified Transform onto the drawing context
void PushTransform(Transform* transform);
/// Pushes the specified Blending mode
void PushBlendingMode(BlendingMode mode);
private:
friend class UIElement;
friend class DrawingContextTestBase;
Ptr<DrawingCommands> mCommands;
NS_DECLARE_REFLECTION(DrawingContext, BaseComponent)
};
NS_WARNING_POP
}
#endif