From 910f9a1abc930ba8115701d280f59904491b1f01 Mon Sep 17 00:00:00 2001 From: Xpl0itR Date: Thu, 6 Jun 2019 23:23:58 +0100 Subject: [PATCH] Added GTK to process path, fixed a bug and minor edits --- Ryujinx/ApplicationLibrary.cs | 2 +- Ryujinx/ControlSettings.cs | 55 ---------------------------------- Ryujinx/GeneralSettings.cs | 32 +++++++++----------- Ryujinx/GeneralSettings.glade | 8 ++--- Ryujinx/MainMenu.cs | 9 ++---- Ryujinx/MainMenu.glade | 1 - Ryujinx/Program.cs | 3 +- Ryujinx/Theme.css | 5 ++++ Ryujinx/ryujinxROMIcon.png | Bin 3430 -> 4561 bytes 9 files changed, 29 insertions(+), 86 deletions(-) delete mode 100644 Ryujinx/ControlSettings.cs diff --git a/Ryujinx/ApplicationLibrary.cs b/Ryujinx/ApplicationLibrary.cs index 25f4233a0d..62ae8e7ffd 100644 --- a/Ryujinx/ApplicationLibrary.cs +++ b/Ryujinx/ApplicationLibrary.cs @@ -94,7 +94,7 @@ namespace Ryujinx byte[] IconData = Read(AssetOffset + IconOffset, (int)IconSize); - return new Gdk.Pixbuf(IconData, 50, 50); + return new Gdk.Pixbuf(IconData, 75, 75); } else { return RyujinxROMIcon; } } diff --git a/Ryujinx/ControlSettings.cs b/Ryujinx/ControlSettings.cs deleted file mode 100644 index ef379e8efd..0000000000 --- a/Ryujinx/ControlSettings.cs +++ /dev/null @@ -1,55 +0,0 @@ -using Gtk; -using System; -using System.IO; -using System.Reflection; - -namespace Ryujinx -{ - public class ControlSettings - { - public static void ControlSettingsMenu() - { - Window CSWin = new Window(WindowType.Toplevel); - CSWin.Title = "Control Settings"; - CSWin.Icon = new Gdk.Pixbuf("./ryujinxIcon.png"); - CSWin.Resizable = false; - CSWin.WindowPosition = WindowPosition.Center; - CSWin.SetDefaultSize(854, 360); - - VBox box = new VBox(false, 2); - - //settings stuff will replace this block - Label myLabel = new Label { Text = "Control Settings" }; - box.PackStart(myLabel, true, true, 3); - - HBox ButtonBox = new HBox(true, 3); - Alignment BoxAlign = new Alignment(1, 0, 0, 0); - - Button Save = new Button("Save"); - Save.Pressed += (o, args) => Save_Pressed(o, args, CSWin); - ButtonBox.Add(Save); - - Button Cancel = new Button("Cancel"); - Cancel.Pressed += (o, args) => Cancel_Pressed(o, args, CSWin); - ButtonBox.Add(Cancel); - - BoxAlign.SetPadding(0, 5, 0, 7); - BoxAlign.Add(ButtonBox); - box.PackStart(BoxAlign, false, false, 3); - - CSWin.Add(box); - CSWin.ShowAll(); - } - - static void Save_Pressed(object o, EventArgs args, Window window) - { - //save settings stuff will go here - window.Destroy(); - } - - static void Cancel_Pressed(object o, EventArgs args, Window window) - { - window.Destroy(); - } - } -} diff --git a/Ryujinx/GeneralSettings.cs b/Ryujinx/GeneralSettings.cs index abc937fe5d..99c47f39a0 100644 --- a/Ryujinx/GeneralSettings.cs +++ b/Ryujinx/GeneralSettings.cs @@ -29,8 +29,8 @@ namespace Ryujinx [GUI] CheckButton CustThemeToggle; [GUI] Entry CustThemeDir; [GUI] TextView GameDirsBox; - [GUI] Button SaveButton; - [GUI] Button CancelButton; + [GUI] ToggleButton SaveToggle; + [GUI] ToggleButton CloseToggle; public static void ConfigureSettings(Configuration Instance) { SwitchConfig = Instance; } @@ -42,8 +42,8 @@ namespace Ryujinx builder.Autoconnect(this); - SaveButton.Activated += SaveButton_Activated; - CancelButton.Activated += CancelButton_Activated; + SaveToggle.Toggled += SaveToggle_Activated; + CloseToggle.Toggled += CloseToggle_Activated; CustThemeToggle.Clicked += CustThemeToggle_Activated; if (SwitchConfig.LoggingEnableError) { ErrorLogToggle.Click(); } @@ -69,23 +69,19 @@ namespace Ryujinx } //Events - private void SaveButton_Activated(object obj, EventArgs args) - { - //Saving code is about to make this a BIG boi - - File.WriteAllText("./GameDirs.dat", GameDirsBox.Buffer.Text); - - Destroy(); - } - - private void CancelButton_Activated(object obj, EventArgs args) - { - Destroy(); - } - private void CustThemeToggle_Activated(object obj, EventArgs args) { if (CustThemeToggle.Active == false) { CustThemeDir.Sensitive = false; } else { CustThemeDir.Sensitive = true; } } + + private void CloseToggle_Activated(object obj, EventArgs args) + { + Destroy(); + } + + private void SaveToggle_Activated(object obj, EventArgs args) + { + File.WriteAllText("./GameDirs.dat", GameDirsBox.Buffer.Text); + } } } diff --git a/Ryujinx/GeneralSettings.glade b/Ryujinx/GeneralSettings.glade index c6a4da0d23..c8012370e5 100644 --- a/Ryujinx/GeneralSettings.glade +++ b/Ryujinx/GeneralSettings.glade @@ -404,8 +404,8 @@ - - Save + + Toggle to Save True True True @@ -417,8 +417,8 @@ - - Cancel + + Toggle to Close True True True diff --git a/Ryujinx/MainMenu.cs b/Ryujinx/MainMenu.cs index acf468080e..1426ecbfab 100644 --- a/Ryujinx/MainMenu.cs +++ b/Ryujinx/MainMenu.cs @@ -16,6 +16,7 @@ namespace Ryujinx //UI Controls [GUI] MenuItem NFC; + [GUI] MenuItem ControlSettingsMenu; [GUI] TreeView GameTable; public MainMenu(HLE.Switch _device, Application _gtkapp) : this(new Builder("Ryujinx.MainMenu.glade"), _device, _gtkapp) { } @@ -40,7 +41,8 @@ namespace Ryujinx DeleteEvent += Window_Close; //disable some buttons - NFC.Sensitive = false; + NFC.Sensitive = false; + ControlSettingsMenu.Sensitive = false; //Games grid thing GameTable.AppendColumn("Icon", new CellRendererPixbuf(), "pixbuf", 0); @@ -203,11 +205,6 @@ namespace Ryujinx GSWin.Show(); } - private void Control_Settings_Pressed(object o, EventArgs args) - { - ControlSettings.ControlSettingsMenu(); - } - private void NFC_Pressed(object o, EventArgs args) { FileChooserDialog fc = new FileChooserDialog("Choose the file to open", this, FileChooserAction.Open, "Cancel", ResponseType.Cancel, "Open", ResponseType.Accept); diff --git a/Ryujinx/MainMenu.glade b/Ryujinx/MainMenu.glade index 572f5b31ba..6bd0fe52c2 100644 --- a/Ryujinx/MainMenu.glade +++ b/Ryujinx/MainMenu.glade @@ -94,7 +94,6 @@ False Control Settings True - diff --git a/Ryujinx/Program.cs b/Ryujinx/Program.cs index f55675d22d..3123782acd 100644 --- a/Ryujinx/Program.cs +++ b/Ryujinx/Program.cs @@ -8,7 +8,6 @@ using Ryujinx.Profiler; using System; using System.IO; using System.Linq; -using System.Reflection; namespace Ryujinx { @@ -24,6 +23,8 @@ namespace Ryujinx { Console.Title = "Ryujinx Console"; + Environment.SetEnvironmentVariable("Path", $"{new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory).Parent}\\bin;{Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine)}"); + IGalRenderer renderer = new OglRenderer(); IAalOutput audioOut = InitializeAudioEngine(); diff --git a/Ryujinx/Theme.css b/Ryujinx/Theme.css index c4e0f677b0..63cf860e9a 100644 --- a/Ryujinx/Theme.css +++ b/Ryujinx/Theme.css @@ -67,6 +67,11 @@ button { color: #F4F6F7; } +filechooser #pathbarbox { + background-color: #272b2e; + border-bottom: 1px solid #595c5f; +} + scrollbar { -GtkScrollbar-has-backward-stepper: false; -GtkScrollbar-has-forward-stepper: false; diff --git a/Ryujinx/ryujinxROMIcon.png b/Ryujinx/ryujinxROMIcon.png index afdec7c78706f0a94a9d010f42300297b292198d..84dd5906c5de238dba70da34a1e0e3018723917f 100644 GIT binary patch literal 4561 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 TezfNfXwb#e)z4*}Q$iB}GTFiG literal 3430 zcmeAS@N?(olHy`uVBq!ia0y~yU@!t<4mJh`208nVjSLLDx}GkMAsLNtXH^%(UM)RV zUp@bN?aRc-Z7GtsC&@M{MF!}I#|TSvSU9k4_c>9~w(RYLEt~<{1LX94*`1_jc`j46 zIhJy3%9aV4wvB$#9Ibv_nP*ow%)S+2W@L8s1pmzk?3+s7+rBUU_D=r0*S6Hxi8*a2 zefH0^{ywkxd}MZQ_S?-q&W4CX8u`4(A{A}|#ySV$ry8V}U{cY_@4$*7> z{dK)?d709q8J!Cl+`X=yndMq;cYgho&k;@uekGFym=smpridP1eQdd>)1oPo$3AX3 zQ99deo%QZFm1|SaXY20D%f9*fS(T%~Y5pe3KpF8zCbFs;tIiqlE>3H4`8h4x!^&FF z(Lk}YGl5AWD9Nicgex+1nReV+mp~I;j>FS7JwGd{H{H7H>8EtBdFI!@{=FF|VA2{G zBCp;#QLFV@)s=`y(;ZnR6304cJ+`>m*IfPitV(Pw$Nm2|RNOjwrk{S^x~|&qV(Ig# zvD>%4`JJnJe)jWU|8(p*(pm~*rmJwilvv**TU?qExW5sKOSn8?`~0L zIag@q+wj~hr($V{*4dD#`ENosCq^Z&WQl&6yzPeB#tAMN4$6$u2SZ+T7^v*{^=kH_ zqut@Bf?jUn;7|zas<$ahF}V2a{jSY7m%DYUcs}CL+}L9A(ru=T#^tmPTW2o_VE0N~ z!nxDdI+NcyExF-ZMaH(}hWj*6a&_8yUMjpG_0VE7kK!!W1Dap_+RAPG>#l#^cOfTI zZNt4aCj?)vbUA5pD0|jn>-e2>S8S83t`N}WJ@x!d`aAx252tUwM=6ask zdr+a;$JMPzUOG22#VogK$G1t|a#M75C#VE(j>`_2l#rzxCHwq(oUGix-=*w)cZ|KB zga~*|w358H?_>W-S(yii-2aQ5)}3_a+UNV_b}T_bf$QBn=cK3ZXs^oSV!ya7CB{Bl z?APD#{m1z2Z4&MkFh_{3;7pF_OgiRxZk}(lo_lxd+u3=u?pq1C<{tR*GW?jJ`?+|h zDY_dn{yJCmZtjqZUSVls&}ek@XIfj|i4^NuXMThz%by%YqQSn|0QPBrFKChLx?T^^^}hl z9E^o?;$$_Al5(Qt!q<4TUbDV?cJ}|w`{(PH+5NWO9~&5Uw1ri0t)RoJlnZ6cl=P=J zcgjEY{I}L2vvy^hxBqiTai@fo&GvUbKRRDu|L@e)C<(SDng)`B3R`7gmF1>C?Efdz zl5lIC-M#H^H)<`*Im59fXhoK_i6*0hXo5!XgiqQJFD~4D_~FCEiD&!bj5P%rbXAS3 z{&P>%dUWfTFt2!%c=Gi5t0t_URVgNUZpo(_&7FA`4?gXc7jWU6p%(I5{FlqejNZ(d zG9@{3d2>A@J8n!0>gjzlrGsHf8C&4mH_8(jqCPek%-GIzK~rbaw)~sLcBbt>p z;j*+x+)a*s)*DZ7=1vjP<-L$~>0yw7s6Nx=@6m-lS1ThmkxykhNfUC5c)6&Ox4S(5cIQSii z5#y5ib-MjV?dzyhzrPpeM5*-gp1ms{+PBhV-60Vbr~cO$3OhAUFDtz5Rx~~C___PL znpyvUGQZK-e<~&L@wdQ9+k@uY1(pE>lidbFDbJcH7*Jr1X zg-S}QMtv{p{_K9U<6&6U`#APYCXY+Atd;~xgqkY92vxlAd3x#``*o+dT2d1u%1l4c z)p))n`*_WKF+qmZC<|xz9S_#OUu?2{?v7i>xYwSLyK|g7=(4yx>w)WCZ?)8}aJiol z-m)yyYu2)iwT6DC(Kg%`jUJO!mSlEalG0?^mb=)8d&{y7)$9wOFDzXe>cKnN_9oA6 z*R9($dU>DdN-w?gqNydQYu7HTW#%Rc)_g}FCjR1=|M#RLV{K+$)}oCYC+3))F4%Zt zUF>d;%OZ*_olU3L{ZpF1{}I=xoieqxwKjjx81wM)FcKyWgk1ytGte*-2x6`?GuR|Gua0?4sG4d)wy20p=}RxAvy>g~wO6=HDxq z-}k=wx@`G}r=hDkYUZ2xMpm6vjVXLObxrKE&Zzw@n3Z~vd7 zeS5M*^Y{I;(hgtu5m_E>n#e=+F0^3 zNauFiaqIUC6HY%Dbdq_!_MF*7K^|V-jhUC#%JzPj3+TKS8Xn7f;BmkGxrhCBNd*-% z)a(8vZwdPI>d{dXGqXu2LvH<9dwbi$tmMtWnWh`ubM7-mCo{dn+p1^YILRyB`fc%Z%PzSA0;I_da;V%7yFJ z<(Vj1m%m9!EH{shjV&oFxp4F9(b@TX4&Jk^W;l_udB(I>tCLeSA5V$=p>kcK&GGb` zn@_k|fBpWgxjRplS(0s8>cZ9DZrgH`BgH&rgj*F&O-&iz*cUY9-ri=od1Ytzx}9vd zw^hDeI$fh$j^U;c+v!bqHy1v&;JdvoFZJrG&^Pbir+-GER_4V;xTOWUZYIxkqx8-*n7cOI4Dzg9k*7b}Z z_+MWaZd2U4b*sbDAGt5zs`?7OdiA>U?bUEe35f;i7nK$mZCR6*a$ZfvAZkZdb@j{l z?~iZGy;t+um+#Ge|LSV%y?giGDSyA0hnKhTb?)|$?%VJC$sD)&@}Sw~|DVrKiY%q1 zq_l*#rhR{R_sy-X+zr>`s(F`+6qdeSwQbw97`^rouHPp1lecL&aZFNqxNd9q#Gs(~ z`18klrFVWjCe4_Uk@3LZEGOafG~F%dX17n7RLjgPV^xx25^ekI#bTe?X1#lVe@l!M zyT9*$-K^QODt52$zjZ6>+q;{GC)@wzT$VY>MX=egt(==x$+B{{k(0ud$J;+KB^>P% zm1lLlU{DprvE|y-_86~}tq#jFqdu;=He*?5rkwQ5M2ShuG-vv-9X4?5mpy*afM=45 z;)mLnDNl+l7pbWBJo56LskG$U3lrHbpMJ7VUt67$k*s#vT!tlgw*DT2@0loO3ZzWwmU5js)9Jr^JwL7j}J`Y1G?U=vMsAxb?wf9hJFK>HA;) zobutn%Q+t9na_FHuFZJ!^|Zvq01m+uhOS?y_jPzpI=;y`ouw>x?uFxPYwEHhy}drl ze3%my{H}RxSeE;X-|NprZe&_LL7a!T_utQz0vDxtE?3;0aFKtjf%fL(o>lt1GnRQi z|CFlp;}F**1sO}-2f;laZ+?E-Y-?LncvfmjqR-0CGfzJI%r?I6$@DBzZGXJu@12}&`P|Cg{87?TuP?u< zKF5+asbI(E&(BH&ONw_DKhJ!9)xpyDq}R%S8vdLh}B$bu=mG{({_Z5?a3QueYvwrzGSQB6Zl%rFDwS(@kHmG4mHR3YgTtD?ak> z$b0)f^+_4ND@2~%*sI~C8B)43B-3}6$_W)m4#D)C-y2dR+dtoYbM2;aT1Z?%*teXS zaU#ClO$$zb{#$&gWK6E!#TD4)FX?cthK*}OID>u(pyEHZFmE|gGO zqO-%%;4**Hw4{|L<{giJIv;)XXVLSs+S5)K|IsKalnIg9{CT3gL1WuIxhpEt=Z_u! a&&a7}==k||Z72f+1B0ilpUXO@geCy)e2LZo