#pragma once
#include "gdkrectangle.h"
#include <math.h>
G_BEGIN_DECLS
/*
* gdk_rectangle_transform_affine :
* @ src : the rectangle to transform
* @ scale_x : scale factor in the X direction . The scale factor
* may be negative or 0 .
* @ scale_y : scale factor in the Y direction . The scale factor
* may be negative or 0 .
* @ offset_x : offset of result in X direction .
* @ offset_y : offset of result in Y direction .
* @ dest : ( out caller - allocates ) : destination rectangle , may be
* identical to @ src
*
* Does an affine transform of the source rectangle and stores the
* result in the dest rectangle . If the destination rectangle does
* not fit on integer bounds , the result will be enlarged to make it
* fit .
* ( Fun fact : This means with a scale of 0 and an offset of 0 . 5 ,
* the resulting rect will have a width of 1 . )
*
* The width and height of the result will be positive , even if the
* src rectangle or the scale were negative .
*
* This function can be used with the output of
* gsk_transform_to_affine ( ) .
**/
static inline void
gdk_rectangle_transform_affine (const GdkRectangle *src,
float scale_x,
float scale_y,
float offset_x,
float offset_y,
GdkRectangle *dest)
{
float x1, x2, y1, y2;
x1 = offset_x + src->x * scale_x;
x2 = offset_x + (src->x + src->width) * scale_x;
y1 = offset_y + src->y * scale_y;
y2 = offset_y + (src->y + src->height) * scale_y;
dest->x = floorf (MIN (x1, x2));
dest->y = floorf (MIN (y1, y2));
dest->width = ceilf (MAX (x1, x2)) - dest->x;
dest->height = ceilf (MAX (y1, y2)) - dest->y;
}
static inline gboolean
gdk_rectangle_contains (const GdkRectangle *rect,
const GdkRectangle *contained)
{
return contained->x >= rect->x
&& contained->y >= rect->y
&& contained->x + contained->width <= rect->x + rect->width
&& contained->y + contained->height <= rect->y + rect->height;
}
G_END_DECLS
Messung V0.5 in Prozent C=98 H=96 G=96
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-07-02)
¤
*© Formatika GbR, Deutschland