/* * Copyright (C) 2007 Google (Evan Stade) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "gdiplus.h" #include "gdiplus_private.h" GpStatus WINGDIPAPI GdipCreateMatrix2(REAL m11, REAL m12, REAL m21, REAL m22, REAL dx, REAL dy, GpMatrix **matrix) { if(!matrix) return InvalidParameter; *matrix = GdipAlloc(sizeof(GpMatrix)); if(!*matrix) return OutOfMemory; /* first row */ (*matrix)->matrix[0] = m11; (*matrix)->matrix[1] = m12; /* second row */ (*matrix)->matrix[2] = m21; (*matrix)->matrix[3] = m22; /* third row */ (*matrix)->matrix[4] = dx; (*matrix)->matrix[5] = dy; return Ok; } GpStatus WINGDIPAPI GdipDeleteMatrix(GpMatrix *matrix) { if(!matrix) return InvalidParameter; GdipFree(matrix); return Ok; } GpStatus WINGDIPAPI GdipTransformMatrixPoints(GpMatrix *matrix, GpPointF *pts, INT count) { REAL x, y; INT i; if(!matrix || !pts) return InvalidParameter; for(i = 0; i < count; i++) { x = pts[i].X; y = pts[i].Y; pts[i].X = x * matrix->matrix[0] + y * matrix->matrix[2] + matrix->matrix[4]; pts[i].Y = x * matrix->matrix[1] + y * matrix->matrix[3] + matrix->matrix[5]; } return Ok; }