UNPKG

1.54 kBJavaScriptView Raw
1var e=require("fs")
2var r=require("path")
3var t=require("url")
4var n=require("child_process")
5var i=require("util")
6var a=require("electron")
7var o=require("./linux-scrot")
8const s=(0,i.promisify)(n.exec)
9const c=async()=>{const t=(0,r.join)(a.app.getPath("temp"),"temp-screenshot.png")
10await(async e=>{try{return await s(`gnome-screenshot --file ${e}`,{shell:!0})}catch(e){}try{return await s(`import -window root ${e}`,{shell:!0})}catch(e){}await(0,o.runLinuxSCROT)(e)})(t)
11const n=await((r,t="image/png")=>((e,r)=>`data:${r};base64,${e.toString("base64")}`)((0,e.readFileSync)(r),t))(t);(0,e.unlinkSync)(t)
12return n}
13const l=async({imageDataUrl:e})=>{const{width:n,height:i}=a.screen.getPrimaryDisplay().bounds
14if(!n||!i)throw new Error(`[pickColorWithBrowserWindow] invalid display bounds: ${JSON.stringify({width:n,height:i})}`)
15const o=new a.BrowserWindow({width:n,height:i,frame:!1,resizable:!1,scrollable:!1,fullscreen:!0,alwaysOnTop:!0,enableLargerThanScreen:!0,titleBarStyle:"hidden"})
16o.webContents.loadURL(((...e)=>(0,t.format)({pathname:(0,r.join)(...e),protocol:"file",slashes:!0}))(__dirname,"pick-color.html"))
17const s=await new Promise(r=>{o.on("closed",()=>{r("")})
18o.webContents.on("before-input-event",(e,t)=>{if("Escape"===t.key){e.preventDefault()
19r("")}})
20o.webContents.executeJavaScript(`window.PICK_COLOR({ IMAGE_DATA_URL: ${JSON.stringify(e)}, ZOOM: 10, GRID_COUNT: 17 })`).then(r)})
21o.close()
22return s}
23exports.runColorPicker=async()=>{const e=await c()
24return{possibleColorString:await l({imageDataUrl:e})}}