fixes buffer size and adds pixel size to paint event

This commit is contained in:
gellert 2016-08-03 13:28:19 +02:00
parent 230943d425
commit 50485a28d3
7 changed files with 20 additions and 8 deletions

View file

@ -1345,11 +1345,19 @@ bool WebContents::IsOffScreen() const {
void WebContents::OnPaint(const gfx::Rect& dirty_rect, void WebContents::OnPaint(const gfx::Rect& dirty_rect,
const gfx::Size& bitmap_size, const gfx::Size& bitmap_size,
const int pixel_size,
void* bitmap_pixels) { void* bitmap_pixels) {
v8::MaybeLocal<v8::Object> buffer = node::Buffer::New( v8::MaybeLocal<v8::Object> buffer = node::Buffer::New(
isolate(), reinterpret_cast<char*>(bitmap_pixels), sizeof(bitmap_pixels)); isolate(), reinterpret_cast<char*>(bitmap_pixels),
pixel_size * dirty_rect.width() * dirty_rect.height());
mate::Dictionary dict = mate::Dictionary::CreateEmpty(isolate());
dict.Set("width", bitmap_size.width());
dict.Set("height", bitmap_size.height());
dict.Set("pixel", pixel_size);
if (!buffer.IsEmpty()) if (!buffer.IsEmpty())
Emit("paint", dirty_rect, buffer.ToLocalChecked(), bitmap_size); Emit("paint", dirty_rect, buffer.ToLocalChecked(), dict);
} }
void WebContents::StartPainting() { void WebContents::StartPainting() {

View file

@ -160,6 +160,7 @@ class WebContents : public mate::TrackableObject<WebContents>,
bool IsOffScreen() const; bool IsOffScreen() const;
void OnPaint(const gfx::Rect& dirty_rect, void OnPaint(const gfx::Rect& dirty_rect,
const gfx::Size& bitmap_size, const gfx::Size& bitmap_size,
const int pixel_size,
void* bitmap_pixels); void* bitmap_pixels);
void StartPainting(); void StartPainting();
void StopPainting(); void StopPainting();

View file

@ -87,7 +87,7 @@ void OffScreenOutputDevice::OnPaint(const gfx::Rect& damage_rect) {
SkAutoLockPixels bitmap_pixels_lock(*bitmap_); SkAutoLockPixels bitmap_pixels_lock(*bitmap_);
callback_.Run(rect, gfx::Size(bitmap_->width(), bitmap_->height()), callback_.Run(rect, gfx::Size(bitmap_->width(), bitmap_->height()),
bitmap_->getPixels()); bitmap_->bytesPerPixel(), bitmap_->getPixels());
} }
} // namespace atom } // namespace atom

View file

@ -12,8 +12,8 @@
namespace atom { namespace atom {
typedef base::Callback<void(const gfx::Rect&, typedef base::Callback<void(const gfx::Rect&, const gfx::Size&,
const gfx::Size&, void*)> OnPaintCallback; const int, void*)> OnPaintCallback;
class OffScreenOutputDevice : public cc::SoftwareOutputDevice { class OffScreenOutputDevice : public cc::SoftwareOutputDevice {
public: public:

View file

@ -262,7 +262,7 @@ class AtomCopyFrameGenerator {
std::unique_ptr<SkAutoLockPixels> bitmap_pixels_lock) { std::unique_ptr<SkAutoLockPixels> bitmap_pixels_lock) {
view_->OnPaint(damage_rect, view_->OnPaint(damage_rect,
gfx::Size(bitmap.width(), bitmap.height()), gfx::Size(bitmap.width(), bitmap.height()),
bitmap.getPixels()); bitmap.bytesPerPixel(), bitmap.getPixels());
if (frame_retry_count_ > 0) if (frame_retry_count_ > 0)
frame_retry_count_ = 0; frame_retry_count_ = 0;
@ -791,11 +791,12 @@ void OffScreenRenderWidgetHostView::SetPaintCallback(
void OffScreenRenderWidgetHostView::OnPaint( void OffScreenRenderWidgetHostView::OnPaint(
const gfx::Rect& damage_rect, const gfx::Rect& damage_rect,
const gfx::Size& bitmap_size, const gfx::Size& bitmap_size,
const int pixel_size,
void* bitmap_pixels) { void* bitmap_pixels) {
TRACE_EVENT0("electron", "OffScreenRenderWidgetHostView::OnPaint"); TRACE_EVENT0("electron", "OffScreenRenderWidgetHostView::OnPaint");
if (!callback_.is_null()) if (!callback_.is_null())
callback_.Run(damage_rect, bitmap_size, bitmap_pixels); callback_.Run(damage_rect, bitmap_size, pixel_size, bitmap_pixels);
} }
void OffScreenRenderWidgetHostView::SetPainting(bool painting) { void OffScreenRenderWidgetHostView::SetPainting(bool painting) {

View file

@ -192,6 +192,7 @@ class OffScreenRenderWidgetHostView
void SetPaintCallback(const OnPaintCallback& callback); void SetPaintCallback(const OnPaintCallback& callback);
void OnPaint(const gfx::Rect& damage_rect, void OnPaint(const gfx::Rect& damage_rect,
const gfx::Size& bitmap_size, const gfx::Size& bitmap_size,
const int pixel_size,
void* bitmap_pixels); void* bitmap_pixels);
void SetPainting(bool painting); void SetPainting(bool painting);

View file

@ -352,7 +352,7 @@ Emitted when the cursor's type changes. The `type` parameter can be `default`,
`not-allowed`, `zoom-in`, `zoom-out`, `grab`, `grabbing`, `custom`. `not-allowed`, `zoom-in`, `zoom-out`, `grab`, `grabbing`, `custom`.
If the `type` parameter is `custom`, the `image` parameter will hold the custom If the `type` parameter is `custom`, the `image` parameter will hold the custom
cursor image in a `NativeImage`, and `scale`, `size` and `hotspot` will hold cursor image in a `NativeImage`, and `scale`, `size` and `hotspot` will hold
additional information about the custom cursor. additional information about the custom cursor.
#### Event: 'context-menu' #### Event: 'context-menu'
@ -471,6 +471,7 @@ Returns:
* `bitmapSize` Object * `bitmapSize` Object
* `width` Number - the width of the whole bitmap * `width` Number - the width of the whole bitmap
* `height` Number - the height of the whole bitmap * `height` Number - the height of the whole bitmap
* `pixel` Number - The number of bytes per pixel
Emitted when a new frame is generated. Only the dirty area is passed in the Emitted when a new frame is generated. Only the dirty area is passed in the
buffer. buffer.