在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    Rust-Druid概念

    druid-shell

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

    piet

    Druid依賴(lài) Piet 庫(kù)進(jìn)行繪圖和文本布局。Piet 是一個(gè)具有多個(gè)后端的2D 圖形抽象: Piet-direct2d、 Piet-coregraphy、 Piet-cairo、 Piet-web 和 Piet-svg 目前可用,并且計(jì)劃使用 GPU 后端。在通過(guò) Piet 對(duì) Druid 平臺(tái)的支持方面,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 (文本框、按鈕、布局組件等)是實(shí)現(xiàn) Widget 特性的對(duì)象。Trait 由關(guān)聯(lián)數(shù)據(jù)類(lèi)型(T)參數(shù)化。所有 trait 方法(事件、生命周期、更新、繪制和布局)都提供了對(duì)這些數(shù)據(jù)的訪問(wèn),并且在事件的情況下,引用是可變的,因此事件可以直接更新數(shù)據(jù)。

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

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

    此外,所有 trait 方法都提供了一個(gè)環(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 提供了許多基本的實(shí)用工具和布局小部件,并且很容易實(shí)現(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)烈的靈感來(lái)自撲動(dòng)的盒子布局模型。在 Druid 中,小部件被傳遞一個(gè) BoxConstraint,它為它們提供了布局的最小和最大大小。如果適用,小部件還負(fù)責(zé)為其子級(jí)計(jì)算適當(dāng)?shù)募s束。

    data

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

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

    Lens

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

    #[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宏來(lái)構(gòu)造:

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

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

    相關(guān)推薦

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

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

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

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

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

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

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

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

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

      淘寶是很多人喜歡的購(gòu)物【平臺(tái),里面的活躍用戶很多,流量很大,所以不少商家在上面開(kāi)店,為了提高銷(xiāo)量也會(huì)開(kāi)通直播帶貨,也有一些主播沒(méi)有貨源,那么淘寶直播沒(méi)有貨源怎么解決?下面小編為大家…

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

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

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

      寶可夢(mèng)朱紫中的奇魯莉安要怎么進(jìn)化呢?很多玩家都不知道,下面就給大家?guī)?lái)寶可夢(mèng)朱紫奇魯莉安進(jìn)化方法分享,感興趣的小伙伴一起來(lái)看看吧,希望能幫助到大家。 奇魯莉安進(jìn)化方法分享 奇魯莉安…

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

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

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

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

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

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

      2022年11月25日

    聯(lián)系我們

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