Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
a97911fd
Commit
a97911fd
authored
Dec 01, 2022
by
Bartosz Kosiorek
Committed by
Alexandre Julliard
Dec 06, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
gdiplus: Improve performance of GdipScaleMatrix.
Wine-Bug:
https://bugs.winehq.org/show_bug.cgi?id=53947
parent
96692a2c
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
55 additions
and
11 deletions
+55
-11
matrix.c
dlls/gdiplus/matrix.c
+14
-11
matrix.c
dlls/gdiplus/tests/matrix.c
+41
-0
No files found.
dlls/gdiplus/matrix.c
View file @
a97911fd
...
...
@@ -287,24 +287,27 @@ GpStatus WINGDIPAPI GdipRotateMatrix(GpMatrix *matrix, REAL angle,
GpStatus
WINGDIPAPI
GdipScaleMatrix
(
GpMatrix
*
matrix
,
REAL
scaleX
,
REAL
scaleY
,
GpMatrixOrder
order
)
{
REAL
scale
[
6
];
TRACE
(
"(%p, %.2f, %.2f, %d)
\n
"
,
matrix
,
scaleX
,
scaleY
,
order
);
if
(
!
matrix
)
return
InvalidParameter
;
scale
[
0
]
=
scaleX
;
scale
[
1
]
=
0
.
0
;
scale
[
2
]
=
0
.
0
;
scale
[
3
]
=
scaleY
;
scale
[
4
]
=
0
.
0
;
scale
[
5
]
=
0
.
0
;
if
(
order
==
MatrixOrderAppend
)
matrix_multiply
(
matrix
->
matrix
,
scale
,
matrix
->
matrix
);
{
matrix
->
matrix
[
0
]
*=
scaleX
;
matrix
->
matrix
[
1
]
*=
scaleY
;
matrix
->
matrix
[
2
]
*=
scaleX
;
matrix
->
matrix
[
3
]
*=
scaleY
;
matrix
->
matrix
[
4
]
*=
scaleX
;
matrix
->
matrix
[
5
]
*=
scaleY
;
}
else
if
(
order
==
MatrixOrderPrepend
)
matrix_multiply
(
scale
,
matrix
->
matrix
,
matrix
->
matrix
);
{
matrix
->
matrix
[
0
]
*=
scaleX
;
matrix
->
matrix
[
1
]
*=
scaleX
;
matrix
->
matrix
[
2
]
*=
scaleY
;
matrix
->
matrix
[
3
]
*=
scaleY
;
}
else
return
InvalidParameter
;
...
...
dlls/gdiplus/tests/matrix.c
View file @
a97911fd
...
...
@@ -110,6 +110,46 @@ static void test_transform(void)
GdipDeleteMatrix
(
matrix
);
}
static
void
test_scale
(
void
)
{
GpStatus
status
;
GpMatrix
*
matrix
=
NULL
;
REAL
elems
[
6
];
int
i
;
static
const
REAL
expected_elem
[]
=
{
3
.
0
,
-
4
.
0
,
90
.
0
,
80
.
0
,
-
1500
.
0
,
1200
.
0
};
static
const
REAL
expected_elem2
[]
=
{
3
.
0
,
-
6
.
0
,
60
.
0
,
80
.
0
,
-
500
.
0
,
600
.
0
};
GdipCreateMatrix2
(
1
.
0
,
-
2
.
0
,
30
.
0
,
40
.
0
,
-
500
.
0
,
600
.
0
,
&
matrix
);
status
=
GdipScaleMatrix
(
NULL
,
3
,
2
,
MatrixOrderAppend
);
expect
(
InvalidParameter
,
status
);
status
=
GdipScaleMatrix
(
matrix
,
3
,
2
,
MatrixOrderAppend
);
expect
(
Ok
,
status
);
status
=
GdipGetMatrixElements
(
matrix
,
elems
);
expect
(
Ok
,
status
);
GdipDeleteMatrix
(
matrix
);
for
(
i
=
0
;
i
<
6
;
i
++
)
ok
(
expected_elem
[
i
]
==
elems
[
i
],
"Expected #%d to be (%.1f) but got (%.1f)
\n
"
,
i
,
expected_elem
[
i
],
elems
[
i
]);
GdipCreateMatrix2
(
1
.
0
,
-
2
.
0
,
30
.
0
,
40
.
0
,
-
500
.
0
,
600
.
0
,
&
matrix
);
status
=
GdipScaleMatrix
(
matrix
,
3
,
2
,
MatrixOrderPrepend
);
expect
(
Ok
,
status
);
status
=
GdipGetMatrixElements
(
matrix
,
elems
);
expect
(
Ok
,
status
);
GdipDeleteMatrix
(
matrix
);
for
(
i
=
0
;
i
<
6
;
i
++
)
ok
(
expected_elem2
[
i
]
==
elems
[
i
],
"Expected #%d to be (%.1f) but got (%.1f)
\n
"
,
i
,
expected_elem2
[
i
],
elems
[
i
]);
}
static
void
test_isinvertible
(
void
)
{
GpStatus
status
;
...
...
@@ -390,6 +430,7 @@ START_TEST(matrix)
GdiplusStartup
(
&
gdiplusToken
,
&
gdiplusStartupInput
,
NULL
);
test_constructor_destructor
();
test_scale
();
test_transform
();
test_isinvertible
();
test_invert
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment