自从进入到Nodejs这个生态后,体验到了更多的可能性。

Pencil是我从Linux时代就开始用的免费开源的原型/流程图软件,它之前版本是基于Firefox的XUL生态开发的,其作者从15年开始基于Electron生态开发新的版本,并于17年发布。

https://www.cnblogs.com/x3d/archive/2012/08/01/2617946.html

原版界面:

新版界面:

最近这一年,有很多要画流程图的需求,但找了一圈发现没有简单趁手的工具,就还是得继续依赖Pencil。

Pencil的UI个人品味感觉很一般,而在Mac下居然没有原生的菜单,这就让我知道Electron支持原生菜单的这颗心很不爽,学要以之致用,终于忍不住从Github上clone了代码自己来DIY一番。

js代码主要居然是加载基于html的script标签加载,而没有用纯粹的js以及模块式管理稍微有点出乎意料。

整个分析下来,可以发挥的地方主要有两点:一是菜单,包括主菜单和右键菜单,改为原生控件;另一个是语言包国际化。

语言包,则使用 Electron 的国际化方案,但Pencil本身没有建立i18n机制,那就意味着所有涉及语言翻译的地方,代码都得修改。

菜单相关的代码部分,它是构建了一套模拟的菜单组件,便于统一技术栈,基本思路是保留主体方法框架,替换其中逻辑代码即可。

在改动代码的过程中,最大的问题是要理解作者的思维方式,他这里有一定偏差,应用的入口虽然是js,但他又基于html去进行js的加载管理,而通过html加载的js的运行环境是在浏览器中,在对象访问过程中,原本的electron.Menu语境要改成remote.Menu才能访问到,其它对象也都要加上remote.。

菜单原本效果:

菜单初步调整的效果如下:

做完这件事,突然似乎有点明白无码科技在研发主线产品的同时,不断产出一些“无关”产品的情景了。

另外,一个人如何提升自己的厚重感呢,无非是用点心,积累、记录。

用了四年的MBP,换了一下起泡的电池和快要烧坏的芯片,就花费掉了一部小米8的价钱,真为小米不值,下一次就买小米笔记本吧。

自己动手DIY macos下的绘图软件Pencil之原生菜单的更多相关文章

  1. macOS 下安装SDKMAN 软件开发工具包管理器

    SDKMAN 软件开发工具包管理器的安装非常简单,只需要打开终端,执行: $ curl -s "https://get.sdkman.io" | bash 就OK了,输出类似如下: ...

  2. AutoCAD 2019 for mac 非常好用的CAD三维设计绘图软件

    macOS下用什么cad软件?mac在哪下载cad软件? AutoCAD 2019 for mac 是一款非常好用的CAD三维设计绘图软件,可应用三维建模.CAD.渲染.动画.视觉特效和数字图像. A ...

  3. gnuplot: 一种更为简洁的曲线,柱状图绘图软件

    gnuplot: 一种更为简洁的曲线,柱状图绘图软件 gnuplot: 一种更为简洁的曲线,柱状图绘图软件 Zhong Xiewei Wed Jun 25 gnuplot简单介绍 关于gnuplot的 ...

  4. 如何在redhat下安装办公软件(openoffice)

    在redhat的client版本中自带有办公软件libreoffice,而在server版的redhat中却没有自带的办公软件,那么,如何在redhat的server版下安装办公软件呢? 方法一:配置 ...

  5. Linux 下如何安装软件?

    http://zhidao.baidu.com/link?url=OkQCOZtVMXhasC8x9zFTZOumsFKf0WW25Ckr2wBF1xO08EsjrBpnMaTBlIAUYdxZ408 ...

  6. 一款好用的绘图软件gnuplot

    漂亮的图片在一篇报告中是必不可少的.这里推荐一款绘图软件Gnuplot. Gnuplot是一种免费分发的绘图工具,可以移植到各种主流平台,无论是在Linux还是在Windows都易于安装使用.最新的版 ...

  7. Mac 设计师必备的设计绘图软件 推荐与下载

    Mac设计师必备的设计绘图软件,为广大设计师推荐一些Mac上实用且强大的软件,使用好的软件,事半功倍,设计出精美的作品. Mac上优秀的设计类软件非常多,绝对不止这几款软件,看看以下内容,希望对你有帮 ...

  8. macOS下MySQL 8.0 安装与配置教程

    一.前言 1.本教程主要内容 适用Homebrew安装MySQL MySQL 8.0 基础适用于配置 MySQL shell管理常用语法示例(用户.权限等) MySQL字符编码配置 MySQL远程访问 ...

  9. macOS下appstore提示未能完成该操作的解决办法

    macOS下App Store下载软件,提示:未能完成该操作.(com.apple.commerce.client 错误 500.) 解决办法: 在终端输入 defaults write com.ap ...

随机推荐

  1. sql server分页存储过程

    因项目需要,一次性查询出来的数据过大,内存hold不住,所以特意写成分页查询,减小占用内存. 存储过程如下: USE [XXX] GO SET ANSI_NULLS ON GO SET QUOTED_ ...

  2. git 合并子工程

    一.关于合并代码合并带有子工程更改的代码1.先git merge master --no-ff origin/devlop(把develop分支代码合并到master) 解决冲突等 2.进入到子工程目 ...

  3. 洛谷.3805.[模板]manacher算法

    题目链接 之前做很早了没写这篇,补上. 记录当前ex[]最大的回文中心id和最远延伸范围mx! 关于串的构造: 应该是 @ #A#B#C#B#A# $ ,而不是 @ A#B#C#B#A $ 比如 @a ...

  4. windows安装channels报错的解决方案

    windows作为开发机真是让人又爱又恨,总是会遇到各种各样的问题 报错 以安装channels为例:如: pip install channels   时出现: error: Microsoft V ...

  5. 备份LeetCode OJ自己编写的代码

    常泡LC的朋友知道LC是不提供代码打包下载的,不像一般的OJ,可是我不备份代码就感觉不舒服- 其实我想说的是- 我自己写了抓取个人提交代码的小工具,放在GitCafe上了- 不知道大家有没有兴趣 ht ...

  6. 去重+排序板子(set+map)

    题意: 给定n个数,去重排序后输出个数和每个数 1.map实现 #pragma GCC optimize("O2") #include<iostream> #inclu ...

  7. JS_高程7.函数表达式(2)递归

    递归函数:一个函数通过名字调用自身的情况构成的.eg: //递归实现阶乘 function factorial(num){ if(num <= 1){ return 1; }else{ retu ...

  8. HTML5 学习05—— 拖放(Drag 和 Drop)

    拖放(Drag 和 drop)是 HTML5 标准的组成部分.即抓取对象以后拖到另一个位置. 例:将w3cschool图标拖动到矩形框中. <script> function allowD ...

  9. MySQL监控全部执行过的sql语句

    MySQL监控全部执行过的sql语句 查看是否开启日志记录show variables like “general_log%” ; +——————+———-+|Variable_name|Value| ...

  10. tp5.1的安装与运行流程

    今天安装tp5.1的时候出现问题,我这里使用的是将tp直接解压缩后放在项目里面,结果提示下面的错误:Warning: require(D:\workspace\zhiyuedu\vendor/topt ...