亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

                Rust-Druid概念

                druid-shell

                Druid 工具包使用 Druid-shell 作為平臺抽象應(yīng)用程序 shell。Druid-shell 負(fù)責(zé)啟動本機(jī)平臺運(yùn)行循環(huán),監(jiān)聽事件,將它們轉(zhuǎn)換為與平臺無關(guān)的表示,并用它們調(diào)用用戶提供的處理程序。

                piet

                Druid依賴 Piet 庫進(jìn)行繪圖和文本布局。Piet 是一個具有多個后端的2D 圖形抽象: Piet-direct2d、 Piet-coregraphy、 Piet-cairo、 Piet-web 和 Piet-svg 目前可用,并且計劃使用 GPU 后端。在通過 Piet 對 Druid 平臺的支持方面,macOS 使用 Piet-coregraph,Linux 和 OpenBSD 使用 Piet-cairo,Windows 使用 Piet-direct2d,web 使用 Piet-web。

                use druid::kurbo::{BezPath, Point, Rect};use druid::piet::Color;// Create an arbitrary bezier path// (ctx.size() returns the size of the layout rect we’re painting in)let mut path = BezPath::new();path.move_to(Point::ORIGIN);path.quad_to( (80.0, 90.0), (ctx.size().width, ctx.size().height),);// Create a colorlet stroke_color = Color::rgb8(0x00, 0x80, 0x00);// Stroke the path with thickness 1.0ctx.stroke(path, &stroke_color, 1.0);// Rectangles: the path for practical peoplelet rect = Rect::from_origin_size((10., 10.), (100., 100.));// Note the Color:rgba8 which includes an alpha channel (7F in this case)let fill_color = Color::rgba8(0x00, 0x00, 0x00, 0x7F);ctx.fill(rect, &fill_color);

                widgets

                Druid 中的 Widget (文本框、按鈕、布局組件等)是實現(xiàn) Widget 特性的對象。Trait 由關(guān)聯(lián)數(shù)據(jù)類型(T)參數(shù)化。所有 trait 方法(事件、生命周期、更新、繪制和布局)都提供了對這些數(shù)據(jù)的訪問,并且在事件的情況下,引用是可變的,因此事件可以直接更新數(shù)據(jù)。

                只要應(yīng)用程序數(shù)據(jù)發(fā)生變化,框架就會使用 update 方法遍歷小部件層次結(jié)構(gòu)。

                所有小部件 trait 方法都提供了相應(yīng)的上下文(EventCtx、 LifeCycleCtx、 UpdateCtx、 LayoutCtx、 PaintCtx)。小部件可以通過調(diào)用上下文中的方法來請求事物并導(dǎo)致操作。

                此外,所有 trait 方法都提供了一個環(huán)境 Env,其中包括當(dāng)前主題參數(shù)(顏色、尺寸等)。

                impl Widget for Button { fn event(&mut self, ctx: &mut EventCtx, event: &Event, data: &mut T, env: &Env) { … } fn lifecycle(&mut self, ctx: &mut LifeCycleCtx, event: &LifeCycle, data: &T, env: &Env) { … } fn update(&mut self, ctx: &mut UpdateCtx, old_data: &T, data: &T, env: &Env) { … } fn layout(&mut self, ctx: &mut LayoutCtx, bc: &BoxConstraints, data: &T, env: &Env) -> Size { … } fn paint(&mut self, ctx: &mut PaintCtx, data: &T, env: &Env) { … }}

                Druid 提供了許多基本的實用工具和布局小部件,并且很容易實現(xiàn)自己的小部件。您還可以將小部件組裝成新的小部件:

                fn build_widget() -> impl Widget { let mut col = Flex::column(); for i in 0..30 { let button = Button::new(format!(“Button {}”, i).padding(5.0); col.add_child(button); } Scroll::new(col)}

                layout

                Druid的布局協(xié)議是強(qiáng)烈的靈感來自撲動的盒子布局模型。在 Druid 中,小部件被傳遞一個 BoxConstraint,它為它們提供了布局的最小和最大大小。如果適用,小部件還負(fù)責(zé)為其子級計算適當(dāng)?shù)募s束。

                data

                Druid 使用數(shù)據(jù)特征來表示值類型。這些值類型應(yīng)該比較便宜,克隆起來也便宜。通常,可以使用派生為類型生成 Data impl。

                #[derive(Clone, Data)]struct AppState { which: bool, value: f64,}

                Lens

                Lens 數(shù)據(jù)類型提供了對更大數(shù)據(jù)結(jié)構(gòu)的一部分的訪問。和 Data 一樣,這也可以派生出來。Derive lens 作為與字段同名的關(guān)聯(lián)常數(shù)訪問。

                #[derive(Clone, Data, Lens)]struct AppState { which: bool, value: f64,}

                要使用Lens,用 LensWrap (注意 CamelCase 到 Snake _ case 的轉(zhuǎn)換)包裝你的小部件:

                LensWrap::new(WidgetThatExpectsf64::new(), AppState::value);

                或者,用于結(jié)構(gòu)、元組和可轉(zhuǎn)位容器的Lens可以根據(jù)需要用Lens宏來構(gòu)造:

                LensWrap::new(WidgetThatExpectsf64::new(), lens!(AppState, value));

                鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
                用戶投稿
                上一篇 2022年6月28日 17:26
                下一篇 2022年6月28日 17:26

                相關(guān)推薦

                • 分享4條發(fā)微商朋友圈的方法(微商朋友圈應(yīng)該怎么發(fā))

                  對于微商朋友來說,朋友圈的重要性不言而喻了。 那么微商的朋友圈到底該怎么發(fā)呢? 為什么同樣是經(jīng)營一個朋友圈,有的微商看起來逼格滿滿,實際效果也不錯;而有的卻動都不動就被屏蔽甚至拉黑…

                  2022年11月27日
                • 京東快遞跨省幾天能到(京東一般多久到貨)

                  由于覺得京東平臺的物流效勞十分的不錯,而且商品的質(zhì)量都比擬有保證。在京東平臺購物的話,普通多久時間會到貨?下面的內(nèi)容停止引見。 京東普通多久到貨? 詳細(xì)要看發(fā)貨地址和你所在的地址的…

                  2022年11月26日
                • 游戲平臺有哪些(游戲平臺有哪些)

                  簡要回答 游戲平臺指的是多人通過互聯(lián)網(wǎng)在線游戲的平臺,例如qq游戲,聯(lián)眾世界,浩方電競平臺,VS競技游戲平臺等,只要你下載平臺,下載相關(guān)游戲,就能實現(xiàn)對戰(zhàn),擺脫了局域網(wǎng)的限制。 詳…

                  2022年11月25日
                • 淘寶直播庫存哪里拿貨(淘寶哪里看庫存)

                  近年倆直播帶貨越來越火爆,抖音、淘寶、拼多多等平臺都有直播帶貨功能,其中淘寶直播時主流帶貨平臺,一些小伙伴也紛紛加入,但是作為新手不知道淘寶直播庫存哪里拿貨?下面小編為大家?guī)硖詫殹?/p>

                  2022年11月25日
                • 淘寶直播沒有貨源怎么解決(淘寶直播沒有貨源怎么辦)

                  淘寶是很多人喜歡的購物【平臺,里面的活躍用戶很多,流量很大,所以不少商家在上面開店,為了提高銷量也會開通直播帶貨,也有一些主播沒有貨源,那么淘寶直播沒有貨源怎么解決?下面小編為大家…

                  2022年11月25日
                • 《寶可夢朱紫》夢特性怎么獲得?隱藏特性獲取方法推薦

                  寶可夢朱紫里有很多寶可夢都是擁有夢特性會變強(qiáng)的寶可夢,很多玩家不知道夢特性怎么獲得,下面就給大家?guī)韺毧蓧糁熳想[藏特性獲取方法推薦,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 …

                  2022年11月25日
                • 《寶可夢朱紫》奇魯莉安怎么進(jìn)化?奇魯莉安進(jìn)化方法分享

                  寶可夢朱紫中的奇魯莉安要怎么進(jìn)化呢?很多玩家都不知道,下面就給大家?guī)韺毧蓧糁熳掀骠斃虬策M(jìn)化方法分享,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 奇魯莉安進(jìn)化方法分享 奇魯莉安…

                  2022年11月25日
                • 4308米!“探索二號”科考船攜深海浮游式作業(yè)平臺完成海試

                  近日,我國“探索二號”科考船攜深海浮游式移動作業(yè)平臺與中繼器,赴南海開展海上試驗。該平臺完成了1500米級、2500米級、4500米級三個由淺到深級別的海試驗證,最大工作深度達(dá)到4…

                  2022年11月25日
                • 手機(jī)上怎么買世界杯彩票(手機(jī)上怎么買世界杯輸贏)

                  現(xiàn)在手機(jī)已經(jīng)成為大家生活中非常重要的工具之一,只要一部手機(jī)就可以解決衣食住行,最近世界杯火熱進(jìn)行,一些小伙伴想要買彩票,那么,手機(jī)上可以買世界杯彩票嗎?世界杯買球軟件是真的嗎?手機(jī)…

                  2022年11月25日
                • 什么是推廣cpa一篇文章帶你看懂CPA推廣渠道

                  CPA渠道 CPA指的是按照指定的行為結(jié)算,可以是搜索,可以是注冊,可以是激活,可以是搜索下載激活,可以是綁卡,實名認(rèn)證,可以是付費(fèi),可以是瀏覽等等。甲乙雙方可以根據(jù)自己的情況來定…

                  2022年11月25日

                聯(lián)系我們

                聯(lián)系郵箱:admin#wlmqw.com
                工作時間:周一至周五,10:30-18:30,節(jié)假日休息