diff options
author | Jon Leighton <j@jonathanleighton.com> | 2018-02-12 12:18:53 +0100 |
---|---|---|
committer | Jon Leighton <j@jonathanleighton.com> | 2018-02-22 16:36:09 +0100 |
commit | e4acb3f77f12e0d42fb8084dafbf5de59f7a1c1b (patch) | |
tree | 32b59e3a88fffc1226f6eae8e879a09fc0cf2317 /components/layout/inline.rs | |
parent | f22e5ef3bdef97daa7b38cf642f24766cab6c488 (diff) | |
download | servo-e4acb3f77f12e0d42fb8084dafbf5de59f7a1c1b.tar.gz servo-e4acb3f77f12e0d42fb8084dafbf5de59f7a1c1b.zip |
Add test for FontContext/FontGroup functionality
Unfortunately, this required quite a bit of changes to the non-test
code. That's because FontContext depends on a FontCacheThread, which in
turn depends on a CoreResourceThread and therefore lots of other data
structures.
It seemed like it would be very difficult to instantiate a FontContext
as it was, and even if we could it seems like overkill to have all these
data structures present for a relatively focused test.
Therefore, I created a FontSource trait which represents the interface
which FontContext uses to talk to FontCacheThread. FontCacheThread then
implements FontSource. Then, in the test, we can create a dummy
implementation of FontSource rather than using FontCacheThread.
This actually has the advantage that we can make our dummy
implementation behave in certain specific way which are useful for
testing, for example it can count the number of times
find_font_template() is called, which helps us verify that
caching/lazy-loading is working as intended.
Diffstat (limited to 'components/layout/inline.rs')
-rw-r--r-- | components/layout/inline.rs | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/components/layout/inline.rs b/components/layout/inline.rs index e2e4ad280fd..1918b2920a9 100644 --- a/components/layout/inline.rs +++ b/components/layout/inline.rs @@ -7,7 +7,7 @@ use ServoArc; use app_units::{Au, MIN_AU}; use block::AbsoluteAssignBSizesTraversal; -use context::LayoutContext; +use context::{LayoutContext, LayoutFontContext}; use display_list::{DisplayListBuildState, InlineFlowDisplayListBuilding}; use display_list::StackingContextCollectionState; use euclid::{Point2D, Size2D}; @@ -20,7 +20,6 @@ use fragment::FragmentFlags; use fragment::SpecificFragmentInfo; use gfx::display_list::OpaqueNode; use gfx::font::FontMetrics; -use gfx::font_context::FontContext; use gfx_traits::print_tree::PrintTree; use layout_debug; use model::IntrinsicISizesContribution; @@ -1132,7 +1131,7 @@ impl InlineFlow { /// Computes the minimum metrics for each line. This is done during flow construction. /// /// `style` is the style of the block. - pub fn minimum_line_metrics(&self, font_context: &mut FontContext, style: &ComputedValues) + pub fn minimum_line_metrics(&self, font_context: &mut LayoutFontContext, style: &ComputedValues) -> LineMetrics { InlineFlow::minimum_line_metrics_for_fragments(&self.fragments.fragments, font_context, @@ -1144,7 +1143,7 @@ impl InlineFlow { /// /// `style` is the style of the block that these fragments belong to. pub fn minimum_line_metrics_for_fragments(fragments: &[Fragment], - font_context: &mut FontContext, + font_context: &mut LayoutFontContext, style: &ComputedValues) -> LineMetrics { // As a special case, if this flow contains only hypothetical fragments, then the entire |