@@ -136,6 +136,49 @@ void GraphicsWebViewCmdExecutor::GetScreenShot(std::string* png, Error** error)
136
136
qobject_cast<QGraphicsObject*>(view_)->paint (&painter, &styleOption);
137
137
painter.end ();
138
138
139
+ saveScreenshot (image, png, error);
140
+ }
141
+
142
+ void GraphicsWebViewCmdExecutor::GetElementScreenShot (const ElementId& element, std::string* png, Error** error) {
143
+ CHECK_VIEW_EXISTANCE
144
+
145
+ Point location;
146
+ *error = webkitProxy_->GetElementLocationInView (element, &location);
147
+ if (*error)
148
+ return ;
149
+
150
+ Size size;
151
+ *error = webkitProxy_->GetElementSize (element, &size);
152
+ if (*error)
153
+ return ;
154
+
155
+ QImage image (view_->boundingRect ().size ().toSize (), QImage::Format_RGB32);
156
+ image.fill (QColor (0 , 0 , 0 ).rgb ());
157
+ QPainter painter (&image);
158
+ QStyleOptionGraphicsItem styleOption;
159
+ qobject_cast<QGraphicsObject*>(view_)->paint (&painter, &styleOption);
160
+ painter.end ();
161
+
162
+ QRect viewRect = image.rect ();
163
+ QRect elementRect (location.x (), location.y (), size.width (), size.height ());
164
+ QRect intersectedRect = viewRect.intersected (elementRect);
165
+
166
+ session_->logger ().Log (kFineLogLevel , base::StringPrintf (" GetElementScreenShot, view: (%2d;%2d : %4d;%4d)" , viewRect.x (), viewRect.y (), viewRect.width (), viewRect.height ()));
167
+ session_->logger ().Log (kFineLogLevel , base::StringPrintf (" GetElementScreenShot, elem: (%2d;%2d : %4d;%4d)" , elementRect.x (), elementRect.y (), elementRect.width (), elementRect.height ()));
168
+ session_->logger ().Log (kFineLogLevel , base::StringPrintf (" GetElementScreenShot, res: (%2d;%2d : %4d;%4d)" , intersectedRect.x (), intersectedRect.y (), intersectedRect.width (), intersectedRect.height ()));
169
+
170
+ if ((0 == intersectedRect.width ()) || (0 == intersectedRect.height ())) {
171
+ *error = new Error (kMoveTargetOutOfBounds );
172
+ session_->logger ().Log (kWarningLogLevel , " GetElementScreenShot, element is not in view." );
173
+ return ;
174
+ }
175
+
176
+ QImage elementImage = image.copy (intersectedRect);
177
+
178
+ saveScreenshot (elementImage, png, error);
179
+ }
180
+
181
+ void GraphicsWebViewCmdExecutor::saveScreenshot (QImage& image, std::string* png, Error** error) {
139
182
const FilePath::CharType kPngFileName [] = FILE_PATH_LITERAL (" ./screen.png" );
140
183
FilePath path = session_->temp_dir ().Append (kPngFileName );;
141
184
@@ -156,7 +199,7 @@ void GraphicsWebViewCmdExecutor::GetScreenShot(std::string* png, Error** error)
156
199
}
157
200
158
201
if (!file_util::ReadFileToString (path, png))
159
- *error = new Error (kUnknownError , " Could not read screenshot file" );
202
+ *error = new Error (kUnknownError , " Could not read screenshot file" );
160
203
}
161
204
162
205
void GraphicsWebViewCmdExecutor::GoForward (Error** error) {
0 commit comments