DCHECK(GetBackgroundColor());
SkColor color = *GetBackgroundColor();
+ // Set transparent bg for Browser process
+ if (color == SK_ColorTRANSPARENT && GetCompositor()) {
+ GetCompositor()->SetBackgroundColor(SK_ColorTRANSPARENT);
+ }
+
bool opaque = SkColorGetA(color) == SK_AlphaOPAQUE;
window_->layer()->SetFillsBoundsOpaquely(opaque);
window_->layer()->SetColor(color);
void RWHVAuraOffscreenHelperEfl::ClearBrowserFrame() {
DCHECK(evas_gl_api_);
- evas_gl_api_->glClearColor(1.0, 1.0, 1.0, 1.0);
+ absl::optional<SkColor> bg_color = rwhva()->GetBackgroundColor();
+ if (bg_color) {
+ evas_gl_api_->glClearColor(
+ static_cast<float>(SkColorGetR(*bg_color)) / 255.0f,
+ static_cast<float>(SkColorGetG(*bg_color)) / 255.0f,
+ static_cast<float>(SkColorGetB(*bg_color)) / 255.0f,
+ static_cast<float>(SkColorGetA(*bg_color)) / 255.0f);
+ } else {
+ evas_gl_api_->glClearColor(1.0, 1.0, 1.0, 1.0);
+ }
evas_gl_api_->glClear(GL_COLOR_BUFFER_BIT);
}
evas_gl_make_current(evas_gl_, evas_gl_surface_, evas_gl_context_);
evas_gl_api_->glViewport(0, 0, width, height);
- evas_gl_api_->glClearColor(1.0, 1.0, 1.0, 1.0);
+ absl::optional<SkColor> bg_color = rwhva()->GetBackgroundColor();
+ if (bg_color && *bg_color == SK_ColorTRANSPARENT) {
+ LOG(INFO) << __func__ << " transparent bg";
+ evas_gl_api_->glClearColor(0.0, 0.0, 0.0, 0.0);
+ evas_gl_api_->glEnable(GL_BLEND);
+ evas_gl_api_->glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
+ } else {
+ evas_gl_api_->glClearColor(1.0, 1.0, 1.0, 1.0);
+ }
evas_gl_api_->glClear(GL_COLOR_BUFFER_BIT);
evas_gl_api_->glUseProgram(program_id_);
evas_gl_api_->glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, NULL);
evas_gl_api_->glBindTexture(GL_TEXTURE_2D, 0);
+ if (bg_color && *bg_color == SK_ColorTRANSPARENT) {
+ evas_gl_api_->glDisable(GL_BLEND);
+ }
evas_gl_make_current(evas_gl_, 0, 0);
// for snapshot