diff options
Diffstat (limited to 'gfx/webrender_bindings/WebRenderTypes.cpp')
-rw-r--r-- | gfx/webrender_bindings/WebRenderTypes.cpp | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/gfx/webrender_bindings/WebRenderTypes.cpp b/gfx/webrender_bindings/WebRenderTypes.cpp new file mode 100644 index 0000000000..3fa81d2a81 --- /dev/null +++ b/gfx/webrender_bindings/WebRenderTypes.cpp @@ -0,0 +1,110 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "WebRenderTypes.h" + +#include "mozilla/ipc/ByteBuf.h" +#include "nsStyleConsts.h" + +namespace mozilla { +namespace wr { + +WindowId NewWindowId() { + static uint64_t sNextId = 1; + + WindowId id; + id.mHandle = sNextId++; + return id; +} + +BorderStyle ToBorderStyle(StyleBorderStyle aStyle) { + switch (aStyle) { + case StyleBorderStyle::None: + return wr::BorderStyle::None; + case StyleBorderStyle::Solid: + return wr::BorderStyle::Solid; + case StyleBorderStyle::Double: + return wr::BorderStyle::Double; + case StyleBorderStyle::Dotted: + return wr::BorderStyle::Dotted; + case StyleBorderStyle::Dashed: + return wr::BorderStyle::Dashed; + case StyleBorderStyle::Hidden: + return wr::BorderStyle::Hidden; + case StyleBorderStyle::Groove: + return wr::BorderStyle::Groove; + case StyleBorderStyle::Ridge: + return wr::BorderStyle::Ridge; + case StyleBorderStyle::Inset: + return wr::BorderStyle::Inset; + case StyleBorderStyle::Outset: + return wr::BorderStyle::Outset; + } + return wr::BorderStyle::None; +} + +wr::RepeatMode ToRepeatMode(StyleBorderImageRepeat aRepeat) { + switch (aRepeat) { + case StyleBorderImageRepeat::Stretch: + return wr::RepeatMode::Stretch; + case StyleBorderImageRepeat::Repeat: + return wr::RepeatMode::Repeat; + case StyleBorderImageRepeat::Round: + return wr::RepeatMode::Round; + case StyleBorderImageRepeat::Space: + return wr::RepeatMode::Space; + default: + MOZ_ASSERT(false); + } + + return wr::RepeatMode::Stretch; +} + +ImageRendering ToImageRendering(StyleImageRendering aImageRendering) { + switch (aImageRendering) { + case StyleImageRendering::Auto: + case StyleImageRendering::Smooth: + case StyleImageRendering::Optimizequality: + return wr::ImageRendering::Auto; + case StyleImageRendering::CrispEdges: + // FIXME(bug 1728831): Historically we've returned Pixelated here, but + // this should arguably pass CrispEdges to WebRender? + // return wr::ImageRendering::CrispEdges; + [[fallthrough]]; + case StyleImageRendering::Optimizespeed: + case StyleImageRendering::Pixelated: + return wr::ImageRendering::Pixelated; + } + return wr::ImageRendering::Auto; +} + +void Assign_WrVecU8(wr::WrVecU8& aVec, mozilla::ipc::ByteBuf&& aOther) { + aVec.data = aOther.mData; + aVec.length = aOther.mLen; + aVec.capacity = aOther.mCapacity; + aOther.mData = nullptr; + aOther.mLen = 0; + aOther.mCapacity = 0; +} + +WrSpatialId RootScrollNode() { return wr_root_scroll_node_id(); } + +WrSpaceAndClipChain RootScrollNodeWithChain() { + WrSpaceAndClipChain sacc; + sacc.clip_chain = wr::ROOT_CLIP_CHAIN; + sacc.space = wr_root_scroll_node_id(); + return sacc; +} + +WrSpaceAndClipChain InvalidScrollNodeWithChain() { + WrSpaceAndClipChain sacc; + sacc.clip_chain = std::numeric_limits<uint64_t>::max(); + sacc.space = wr_root_scroll_node_id(); + return sacc; +} + +} // namespace wr +} // namespace mozilla |