Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(733)

Unified Diff: components/exo/surface.cc

Issue 1962473002: exo: Add support for alpha_compositing interface to wayland bindings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@wayland-protocols-alpha-compositing
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/exo/surface.cc
diff --git a/components/exo/surface.cc b/components/exo/surface.cc
index 4fb268038ebcc2e73b902b5552ccb751aeb466f4..b95f1bb0f728ea99f9ba5eb122ee3e56b10ea6e3 100644
--- a/components/exo/surface.cc
+++ b/components/exo/surface.cc
@@ -136,6 +136,8 @@ Surface::Surface()
pending_input_region_(SkIRect::MakeLargest()),
pending_buffer_scale_(1.0f),
pending_only_visible_on_secure_output_(false),
+ pending_blend_mode_(SkXfermode::kSrcOver_Mode),
+ pending_alpha_(1.0f),
input_region_(SkIRect::MakeLargest()),
needs_commit_surface_hierarchy_(false),
update_contents_after_successful_compositing_(false),
@@ -314,6 +316,18 @@ void Surface::SetOnlyVisibleOnSecureOutput(bool only_visible_on_secure_output) {
pending_only_visible_on_secure_output_ = only_visible_on_secure_output;
}
+void Surface::SetBlendMode(SkXfermode::Mode blend_mode) {
+ TRACE_EVENT1("exo", "Surface::SetBlendMode", "blend_mode", blend_mode);
+
+ pending_blend_mode_ = blend_mode;
+}
+
+void Surface::SetAlpha(float alpha) {
+ TRACE_EVENT1("exo", "Surface::SetAlpha", "alpha", alpha);
+
+ pending_alpha_ = alpha;
+}
+
void Surface::Commit() {
TRACE_EVENT0("exo", "Surface::Commit");
@@ -363,8 +377,6 @@ void Surface::CommitSurfaceHierarchy() {
contents_size);
layer()->SetTextureFlipped(false);
layer()->SetBounds(gfx::Rect(layer()->bounds().origin(), contents_size));
- layer()->SetFillsBoundsOpaquely(pending_opaque_region_.contains(
- gfx::RectToSkIRect(gfx::Rect(contents_size))));
} else {
// Show solid color content if no buffer is attached or we failed
// to produce a texture mailbox for the currently attached buffer.
@@ -386,6 +398,16 @@ void Surface::CommitSurfaceHierarchy() {
// Move pending frame callbacks to the end of |frame_callbacks_|.
frame_callbacks_.splice(frame_callbacks_.end(), pending_frame_callbacks_);
+ // Update alpha compositing properties.
+ // TODO(reveman): Use a more reliable way to force blending off than setting
+ // fills-bounds-opaquely.
+ layer()->SetFillsBoundsOpaquely(
+ pending_blend_mode_ == SkXfermode::kSrc_Mode ||
+ pending_opaque_region_.contains(
+ gfx::RectToSkIRect(gfx::Rect(layer()->size()))));
+ if (layer()->has_external_content())
+ layer()->SetTextureAlpha(pending_alpha_);
+
// Synchronize window hierarchy. This will position and update the stacking
// order of all sub-surfaces after committing all pending state of sub-surface
// descendants.

Powered by Google App Engine
This is Rietveld 408576698