OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "printing/emf_win.h" | 5 #include "printing/emf_win.h" |
6 | 6 |
7 // For quick access. | 7 // For quick access. |
8 #include <wingdi.h> | 8 #include <wingdi.h> |
9 #include <winspool.h> | 9 #include <winspool.h> |
10 | 10 |
(...skipping 30 matching lines...) Expand all Loading... |
41 | 41 |
42 namespace printing { | 42 namespace printing { |
43 | 43 |
44 TEST(EmfTest, DC) { | 44 TEST(EmfTest, DC) { |
45 // Simplest use case. | 45 // Simplest use case. |
46 printing::Emf emf; | 46 printing::Emf emf; |
47 RECT rect = {100, 100, 200, 200}; | 47 RECT rect = {100, 100, 200, 200}; |
48 HDC hdc = CreateCompatibleDC(NULL); | 48 HDC hdc = CreateCompatibleDC(NULL); |
49 EXPECT_TRUE(hdc != NULL); | 49 EXPECT_TRUE(hdc != NULL); |
50 EXPECT_TRUE(emf.CreateDc(hdc, &rect)); | 50 EXPECT_TRUE(emf.CreateDc(hdc, &rect)); |
51 EXPECT_TRUE(emf.hdc() != NULL); | 51 EXPECT_TRUE(emf.context() != NULL); |
52 // In theory, you'd use the HDC with GDI functions here. | 52 // In theory, you'd use the HDC with GDI functions here. |
53 EXPECT_TRUE(emf.CloseDc()); | 53 EXPECT_TRUE(emf.Close()); |
54 uint32 size = emf.GetDataSize(); | 54 uint32 size = emf.GetDataSize(); |
55 EXPECT_EQ(size, EMF_HEADER_SIZE); | 55 EXPECT_EQ(size, EMF_HEADER_SIZE); |
56 std::vector<BYTE> data; | 56 std::vector<BYTE> data; |
57 EXPECT_TRUE(emf.GetData(&data)); | 57 EXPECT_TRUE(emf.GetData(&data)); |
58 EXPECT_EQ(data.size(), size); | 58 EXPECT_EQ(data.size(), size); |
59 emf.CloseEmf(); | 59 emf.CloseEmf(); |
60 EXPECT_TRUE(DeleteDC(hdc)); | 60 EXPECT_TRUE(DeleteDC(hdc)); |
61 | 61 |
62 // Playback the data. | 62 // Playback the data. |
63 hdc = CreateCompatibleDC(NULL); | 63 hdc = CreateCompatibleDC(NULL); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 EXPECT_TRUE(emf.Init(&emf_data[0], emf_data.size())); | 97 EXPECT_TRUE(emf.Init(&emf_data[0], emf_data.size())); |
98 | 98 |
99 // This will print to file. The reason is that when running inside a | 99 // This will print to file. The reason is that when running inside a |
100 // unit_test, printing::PrintingContext automatically dumps its files to the | 100 // unit_test, printing::PrintingContext automatically dumps its files to the |
101 // current directory. | 101 // current directory. |
102 // TODO(maruel): Clean the .PRN file generated in current directory. | 102 // TODO(maruel): Clean the .PRN file generated in current directory. |
103 context->NewDocument(L"EmfTest.Enumerate"); | 103 context->NewDocument(L"EmfTest.Enumerate"); |
104 context->NewPage(); | 104 context->NewPage(); |
105 // Process one at a time. | 105 // Process one at a time. |
106 printing::Emf::Enumerator emf_enum(emf, context->context(), | 106 printing::Emf::Enumerator emf_enum(emf, context->context(), |
107 &emf.GetBounds().ToRECT()); | 107 &emf.GetPageBounds(1).ToRECT()); |
108 for (printing::Emf::Enumerator::const_iterator itr = emf_enum.begin(); | 108 for (printing::Emf::Enumerator::const_iterator itr = emf_enum.begin(); |
109 itr != emf_enum.end(); | 109 itr != emf_enum.end(); |
110 ++itr) { | 110 ++itr) { |
111 // To help debugging. | 111 // To help debugging. |
112 ptrdiff_t index = itr - emf_enum.begin(); | 112 ptrdiff_t index = itr - emf_enum.begin(); |
113 // If you get this assert, you need to lookup iType in wingdi.h. It starts | 113 // If you get this assert, you need to lookup iType in wingdi.h. It starts |
114 // with EMR_HEADER. | 114 // with EMR_HEADER. |
115 EMR_HEADER; | 115 EMR_HEADER; |
116 EXPECT_TRUE(itr->SafePlayback(NULL)) << | 116 EXPECT_TRUE(itr->SafePlayback(NULL)) << |
117 " index: " << index << " type: " << itr->record()->iType; | 117 " index: " << index << " type: " << itr->record()->iType; |
118 } | 118 } |
119 context->PageDone(); | 119 context->PageDone(); |
120 context->DocumentDone(); | 120 context->DocumentDone(); |
121 } | 121 } |
122 | 122 |
123 // Disabled if no "UnitTest printer" exists. | 123 // Disabled if no "UnitTest printer" exists. |
124 TEST_F(EmfPrintingTest, PageBreak) { | 124 TEST_F(EmfPrintingTest, PageBreak) { |
125 base::win::ScopedHDC dc( | 125 base::win::ScopedHDC dc( |
126 CreateDC(L"WINSPOOL", L"UnitTest Printer", NULL, NULL)); | 126 CreateDC(L"WINSPOOL", L"UnitTest Printer", NULL, NULL)); |
127 if (!dc.Get()) | 127 if (!dc.Get()) |
128 return; | 128 return; |
129 printing::Emf emf; | 129 printing::Emf emf; |
130 EXPECT_TRUE(emf.CreateDc(dc.Get(), NULL)); | 130 EXPECT_TRUE(emf.CreateDc(dc.Get(), NULL)); |
131 EXPECT_TRUE(emf.hdc() != NULL); | 131 EXPECT_TRUE(emf.context() != NULL); |
132 int pages = 3; | 132 int pages = 3; |
133 while (pages) { | 133 while (pages) { |
134 EXPECT_TRUE(emf.StartPage()); | 134 EXPECT_TRUE(emf.StartPage()); |
135 ::Rectangle(emf.hdc(), 10, 10, 190, 190); | 135 ::Rectangle(emf.context(), 10, 10, 190, 190); |
136 EXPECT_TRUE(emf.EndPage()); | 136 EXPECT_TRUE(emf.FinishPage()); |
137 --pages; | 137 --pages; |
138 } | 138 } |
139 EXPECT_TRUE(emf.CloseDc()); | 139 EXPECT_TRUE(emf.Close()); |
140 uint32 size = emf.GetDataSize(); | 140 uint32 size = emf.GetDataSize(); |
141 std::vector<BYTE> data; | 141 std::vector<BYTE> data; |
142 EXPECT_TRUE(emf.GetData(&data)); | 142 EXPECT_TRUE(emf.GetData(&data)); |
143 EXPECT_EQ(data.size(), size); | 143 EXPECT_EQ(data.size(), size); |
144 emf.CloseEmf(); | 144 emf.CloseEmf(); |
145 | 145 |
146 // Playback the data. | 146 // Playback the data. |
147 DOCINFO di = {0}; | 147 DOCINFO di = {0}; |
148 di.cbSize = sizeof(DOCINFO); | 148 di.cbSize = sizeof(DOCINFO); |
149 di.lpszDocName = L"Test Job"; | 149 di.lpszDocName = L"Test Job"; |
(...skipping 15 matching lines...) Expand all Loading... |
165 printing::Emf emf; | 165 printing::Emf emf; |
166 RECT rect = {100, 100, 200, 200}; | 166 RECT rect = {100, 100, 200, 200}; |
167 HDC hdc = CreateCompatibleDC(NULL); | 167 HDC hdc = CreateCompatibleDC(NULL); |
168 EXPECT_TRUE(hdc != NULL); | 168 EXPECT_TRUE(hdc != NULL); |
169 ScopedTempDir scratch_metafile_dir; | 169 ScopedTempDir scratch_metafile_dir; |
170 ASSERT_TRUE(scratch_metafile_dir.CreateUniqueTempDir()); | 170 ASSERT_TRUE(scratch_metafile_dir.CreateUniqueTempDir()); |
171 FilePath metafile_path; | 171 FilePath metafile_path; |
172 EXPECT_TRUE(file_util::CreateTemporaryFileInDir(scratch_metafile_dir.path(), | 172 EXPECT_TRUE(file_util::CreateTemporaryFileInDir(scratch_metafile_dir.path(), |
173 &metafile_path)); | 173 &metafile_path)); |
174 EXPECT_TRUE(emf.CreateFileBackedDc(hdc, &rect, metafile_path)); | 174 EXPECT_TRUE(emf.CreateFileBackedDc(hdc, &rect, metafile_path)); |
175 EXPECT_TRUE(emf.hdc() != NULL); | 175 EXPECT_TRUE(emf.context() != NULL); |
176 // In theory, you'd use the HDC with GDI functions here. | 176 // In theory, you'd use the HDC with GDI functions here. |
177 EXPECT_TRUE(emf.CloseDc()); | 177 EXPECT_TRUE(emf.Close()); |
178 | 178 |
179 uint32 size = emf.GetDataSize(); | 179 uint32 size = emf.GetDataSize(); |
180 EXPECT_EQ(size, EMF_HEADER_SIZE); | 180 EXPECT_EQ(size, EMF_HEADER_SIZE); |
181 std::vector<BYTE> data; | 181 std::vector<BYTE> data; |
182 EXPECT_TRUE(emf.GetData(&data)); | 182 EXPECT_TRUE(emf.GetData(&data)); |
183 EXPECT_EQ(data.size(), size); | 183 EXPECT_EQ(data.size(), size); |
184 emf.CloseEmf(); | 184 emf.CloseEmf(); |
185 int64 file_size = 0; | 185 int64 file_size = 0; |
186 file_util::GetFileSize(metafile_path, &file_size); | 186 file_util::GetFileSize(metafile_path, &file_size); |
187 EXPECT_EQ(size, file_size); | 187 EXPECT_EQ(size, file_size); |
188 EXPECT_TRUE(DeleteDC(hdc)); | 188 EXPECT_TRUE(DeleteDC(hdc)); |
189 | 189 |
190 // Playback the data. | 190 // Playback the data. |
191 hdc = CreateCompatibleDC(NULL); | 191 hdc = CreateCompatibleDC(NULL); |
192 EXPECT_TRUE(hdc); | 192 EXPECT_TRUE(hdc); |
193 EXPECT_TRUE(emf.CreateFromFile(metafile_path)); | 193 EXPECT_TRUE(emf.CreateFromFile(metafile_path)); |
194 RECT output_rect = {0, 0, 10, 10}; | 194 RECT output_rect = {0, 0, 10, 10}; |
195 EXPECT_TRUE(emf.Playback(hdc, &output_rect)); | 195 EXPECT_TRUE(emf.Playback(hdc, &output_rect)); |
196 EXPECT_TRUE(DeleteDC(hdc)); | 196 EXPECT_TRUE(DeleteDC(hdc)); |
197 emf.CloseEmf(); | 197 emf.CloseEmf(); |
198 } | 198 } |
199 | 199 |
200 } // namespace printing | 200 } // namespace printing |
OLD | NEW |