From 8eeca5ab09d66ff81240c0caa26bff0e3c7c07d1 Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Sun, 24 Sep 2017 13:09:30 +0200 Subject: [PATCH] Updated font kerning --- .../warp/picalculator/gui/DisplayManager.java | 14 ++++++++++---- .../gui/expression/blocks/BlockChar.java | 2 +- .../gui/expression/blocks/BlockVariable.java | 2 +- .../gui/graphicengine/cpu/CPUEngine.java | 12 ++++++------ .../gui/graphicengine/cpu/CPUFont.java | 4 ++-- .../gui/graphicengine/cpu/CPURenderer.java | 2 +- .../gui/graphicengine/gpu/GPUEngine.java | 10 +++++----- .../gui/screens/MathInputScreen.java | 5 +---- src/main/resources/font_32.rft | Bin 1188 -> 0 bytes src/main/resources/font_big.rft | Bin 794 -> 891 bytes src/main/resources/font_big_2x.rft | Bin 2393 -> 2583 bytes src/main/resources/font_ex.rft | Bin 1735 -> 1937 bytes src/main/resources/font_small.rft | Bin 582 -> 676 bytes src/main/resources/font_small_2x.rft | Bin 1616 -> 1804 bytes src/main/resources/font_square.rft | Bin 746 -> 837 bytes 15 files changed, 27 insertions(+), 24 deletions(-) delete mode 100755 src/main/resources/font_32.rft diff --git a/src/main/java/org/warp/picalculator/gui/DisplayManager.java b/src/main/java/org/warp/picalculator/gui/DisplayManager.java index d29d32bc..20f17723 100755 --- a/src/main/java/org/warp/picalculator/gui/DisplayManager.java +++ b/src/main/java/org/warp/picalculator/gui/DisplayManager.java @@ -40,7 +40,8 @@ public final class DisplayManager implements RenderingLoop { public String[] errorStackTrace; public final static int[] glyphsHeight; - public static Screen screen; + private static Screen screen; + public static Semaphore screenChange = new Semaphore(0); public static String displayDebugString; public static ObjectArrayList errorMessages; @@ -136,6 +137,7 @@ public final class DisplayManager implements RenderingLoop { try { screen.create(); DisplayManager.screen = screen; + screenChange.release(); if (screen.initialized == false) { screen.initialize(); } @@ -160,6 +162,7 @@ public final class DisplayManager implements RenderingLoop { try { screen.create(); DisplayManager.screen = screen; + screenChange.release(); if (screen.initialized == false) { screen.initialize(); } @@ -196,6 +199,7 @@ public final class DisplayManager implements RenderingLoop { DisplayManager.currentSession += 1; } DisplayManager.screen = DisplayManager.sessions[DisplayManager.currentSession]; + screenChange.release(); } } @@ -228,10 +232,11 @@ public final class DisplayManager implements RenderingLoop { DisplayManager.currentSession -= 1; } DisplayManager.screen = DisplayManager.sessions[DisplayManager.currentSession]; + screenChange.release(); } } - public Screen getScreen() { + public static Screen getScreen() { return DisplayManager.screen; } @@ -353,9 +358,10 @@ public final class DisplayManager implements RenderingLoop { renderer.glColor3i(255, 255, 255); if (error != null) { - Utils.getFont(false, false).use(engine); + BinaryFont fnt = Utils.getFont(false, false); + fnt.use(engine); renderer.glColor3i(129, 28, 22); - renderer.glDrawStringRight(Main.screenSize[0] - 2, Main.screenSize[1] - DisplayManager.glyphsHeight[1] - 2, "ANDREA CAVALLI'S CALCULATOR"); + renderer.glDrawStringRight(Main.screenSize[0] - 2, Main.screenSize[1] - (fnt.getCharacterHeight() + 2), Main.calculatorNameUPPER + " CALCULATOR"); renderer.glColor3i(149, 32, 26); renderer.glDrawStringCenter((Main.screenSize[0] / 2), 22, error); renderer.glColor3i(164, 34, 28); diff --git a/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockChar.java b/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockChar.java index 5b38892f..a59fdd93 100755 --- a/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockChar.java +++ b/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockChar.java @@ -40,7 +40,7 @@ public class BlockChar extends Block { @Override public void recomputeDimensions() { - width = BlockContainer.getDefaultCharWidth(small); + width = BlockContainer.getDefaultCharWidth(small)-1; height = BlockContainer.getDefaultCharHeight(small); line = height / 2; } diff --git a/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockVariable.java b/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockVariable.java index b4a29939..902e6022 100644 --- a/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockVariable.java +++ b/src/main/java/org/warp/picalculator/gui/expression/blocks/BlockVariable.java @@ -217,7 +217,6 @@ public class BlockVariable extends Block { @Override public void draw(GraphicEngine ge, Renderer r, Caret caret) { - BlockContainer.getDefaultFont(true).use(ge); r.glColor3f(1.0f, 1.0f, 1.0f); DisplayManager.guiSkin.use(ge); int popupX = location[0]; @@ -242,6 +241,7 @@ public class BlockVariable extends Block { r.glFillRect(popupX+2, popupY+5+height/2-7/2, 4, 7, 160, 21, 4, 7); r.glFillRect(popupX+width-2-4, popupY+5+height/2-7/2, 4, 7, 172, 21, 4, 7); r.glColor(color); + BlockContainer.getDefaultFont(true).use(ge); r.glDrawStringCenter(popupX+width/2, popupY+2+5, text); } diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUEngine.java b/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUEngine.java index 4e99a77f..e4ac1a63 100644 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUEngine.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUEngine.java @@ -5,6 +5,7 @@ import java.awt.GraphicsEnvironment; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.ArrayList; +import java.util.concurrent.Semaphore; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; @@ -24,6 +25,7 @@ public class CPUEngine implements GraphicEngine { public final CPURenderer r = new CPURenderer(); public BufferedImage g = new BufferedImage(r.size[0], r.size[1], BufferedImage.TYPE_INT_RGB); public volatile boolean initialized = false; + public Semaphore exitSemaphore = new Semaphore(0); @Override public void setTitle(String title) { @@ -88,6 +90,7 @@ public class CPUEngine implements GraphicEngine { @Override public void destroy() { initialized = false; + exitSemaphore.release(); INSTANCE.setVisible(false); INSTANCE.dispose(); } @@ -123,7 +126,7 @@ public class CPUEngine implements GraphicEngine { @Deprecated() public void refresh() { - if (DisplayManager.screen == null || (DisplayManager.error != null && DisplayManager.error.length() > 0) || DisplayManager.screen == null || DisplayManager.screen.mustBeRefreshed()) { + if (DisplayManager.getScreen() == null || (DisplayManager.error != null && DisplayManager.error.length() > 0) || DisplayManager.getScreen() == null || DisplayManager.getScreen().mustBeRefreshed()) { INSTANCE.c.repaint(); } } @@ -175,11 +178,8 @@ public class CPUEngine implements GraphicEngine { @Override public void waitUntilExit() { try { - do { - Thread.sleep(500); - } while (initialized); - } catch (final InterruptedException e) { - + exitSemaphore.acquire(); + } catch (InterruptedException e) { } } diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUFont.java b/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUFont.java index e421d4a0..1ac46d27 100755 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUFont.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPUFont.java @@ -158,9 +158,9 @@ public class CPUFont implements BinaryFont { @Override public int getStringWidth(String text) { - final int w = (charW+1) * text.length(); + final int w = charW * text.length(); if (text.length() > 0 && w > 0) { - return w-1; + return w; } else { return 0; } diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPURenderer.java b/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPURenderer.java index 6c763702..a181cd9e 100644 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPURenderer.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/cpu/CPURenderer.java @@ -229,7 +229,7 @@ public class CPURenderer implements Renderer { int j; final int l = text.length; for (int i = 0; i < l; i++) { - cpos = (i * (currentFont.charW + 1)); + cpos = (i * (currentFont.charW)); final int charIndex = text[i]; for (int dy = 0; dy < currentFont.charH; dy++) { for (int dx = 0; dx < currentFont.charW; dx++) { diff --git a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUEngine.java b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUEngine.java index 5ab4675e..6f69f5c7 100755 --- a/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUEngine.java +++ b/src/main/java/org/warp/picalculator/gui/graphicengine/gpu/GPUEngine.java @@ -6,6 +6,7 @@ import java.util.Collections; import java.util.List; import java.util.Vector; import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.Semaphore; import org.warp.picalculator.Main; import org.warp.picalculator.Utils; @@ -25,6 +26,7 @@ public class GPUEngine implements GraphicEngine { private GPURenderer r; int[] size = new int[] { Main.screenSize[0], Main.screenSize[1] }; private final CopyOnWriteArrayList registeredFonts = new CopyOnWriteArrayList(); + private Semaphore exitSemaphore = new Semaphore(0); @Override public int[] getSize() { @@ -94,6 +96,7 @@ public class GPUEngine implements GraphicEngine { public void destroy() { initialized = false; created = false; + exitSemaphore.release(); wnd.window.destroy(); } @@ -128,11 +131,8 @@ public class GPUEngine implements GraphicEngine { @Override public void waitUntilExit() { try { - do { - Thread.sleep(500); - } while (initialized | created); - } catch (final InterruptedException e) { - + exitSemaphore.acquire(); + } catch (InterruptedException e) { } } diff --git a/src/main/java/org/warp/picalculator/gui/screens/MathInputScreen.java b/src/main/java/org/warp/picalculator/gui/screens/MathInputScreen.java index 221d70a2..0ccd9986 100755 --- a/src/main/java/org/warp/picalculator/gui/screens/MathInputScreen.java +++ b/src/main/java/org/warp/picalculator/gui/screens/MathInputScreen.java @@ -618,10 +618,7 @@ public class MathInputScreen extends Screen { final ChooseVariableValueScreen cvs = new ChooseVariableValueScreen(this, new VariableValue((Variable) f, new Number(calc, 0))); DisplayManager.INSTANCE.setScreen(cvs); try { - while (DisplayManager.screen == cvs) { - Utils.out.println(1, Thread.currentThread().getName()); - Thread.sleep(200); - } + DisplayManager.screenChange.acquire(); } catch (final InterruptedException e) {} if (cvs.resultNumberValue == null) { cancelled = true; diff --git a/src/main/resources/font_32.rft b/src/main/resources/font_32.rft deleted file mode 100755 index fa9e62362e3a9e2a45185d820b343a1c5083e5bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1188 zcmbu9O=}ZT6o%h3caj-lXtInSFj+`f3L}DaQOx++AR+}fE~CF7x@o{*PDyDuE_BzQ z;&RZ^mEu-#Gpx;sNJBi-T?1T7QM31Kohj|EuK;##wwK6+{6@FK_;2ZWM*>Hk-V`Wv(Piy^Rf4HU(D-oaE!n~ zld1nS76p$qjuCR)DY?w{3^`9&H0@U5D>}oY84UQDmP(l}`%y)eGW_)=!BE?*vB;0A~9$-vIXgeB+_M29f`3*2jt@G|L0EeXZrUAsKCk1^YI zqBtjtgO9+JJK_Q_I@PM fUVG}#MQFLbA;`s?bduIlQZ?AY`=DzR-H)XD;m zkuZy^K>>Yhc0m0fj%ID{F;n2!?_}WH3oA&J7++&N!to7oae{2V*ozq?eLE=GK)=l$j|d|Nk+3w{Hm6BTgLZ>XbuI4(toW@r?> zUB&7!HdF1)+Mb@LrF{hLGQ@uUTiwV|UdMqF>nTW0R|lP4W_Yl~^Lig`*iHLT7dS+6 zhUe2TWFQY5W@abCy}3jif6z=FT_U(e2lBT$58E!r_WpPzRpto|f*TG+x9#y(30xT;24-SlO1u zxPt2nZYa2^;Ff~h3Ni{N6x>m8SHV36lM3!Dc%VR_#`If1xR^p!;5WTu$YMt))!xNJ zRGGOYx|Byw4HdJt9gmgQ69v->W)wVC@JzwwDY^ko7q}v5a5RA)RLtjcF4Y#*)$Au3 reuUS{-Ci_~#*1CcEi7)s)u@}`F2SyNh-$Y8{(jV2NmjG7X0G;wtPPnznE&6m@SVg+M*UZ^V?#z{SuH!wl% z7X>7UP2-Y!w%bnpslPO@h~rjAKWXLH`=cUGSX1fG!{azAbkl&HbX$|bE^to60ES>&x=W5k@{r|y`7yc0T;#m3 zp(4QDhuXc`8w@*YE8SQP9%@WJI`D2j3=k2^nyHJ8kN7S ziD@~1(S_mcNIUAFstArsz@%30kC|V)uq)I`i)OiXf*J6&c6;U4qTY)d!|J%4pJd7{ zG4o;tavLGE+X?XO&`dgJj<9zvEQLl#B?q4Sr;Hx{sxGLb^7u?B<}X^uy(w=l(c+ zEEnvM2?wbb%`egZ4VQJWA%@nkvSd3HpnlP2$rN$pu(#Ak3`fNwT@(;wUZ^cGXSoWx zEas>5au9AmhM28s!G=_v*p-@<$j(VFY#&lqC1Z>RHV(EH7r;oyn`7gchv^yuqeF29 z{mdSaR}>ri(b%AbS$|)VdaVvCcf2A?19&2Pebv@vp_;W-G#b?!kS5UWxKPSmmv5Ku z@^FW@{2wul1cCJ@hOz)K7_7@Kbx%Gh%{OU_jm2PHPlik0A(}U=Q!JM;IFb#U@lT4c)NbG->1$#g`%zqE_L27PDZj#Dt_VjH>%HWH0Y1L#q|*Ke61sV zG|ERu`RE-!D)7;}d^E;K@A1+5d~}SDj`Pt6eDon7eZ)s6_~>IkI>|?;_~;Wp`jn48 zk z3(zIMt^a)Cf$cruBVpy|BK=cRJ*#vCN?n@*fj0h!s5a2MAHP0eNyRnLwu?qWf^F4G HhB@*-8A6l0 literal 2393 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 literal 1616 zcmZ9M%TE(g6o*e4?0^imanTI4(w3)hr-D#Tr3GK0_yQk@QCq-*g2+Q*e1#U0%EADN z8+PyynBYR)xEQnn7bfgXV_ei|jLRV=hDFoy+-bqdxk*pYeD`-AbMKuy92(PLD+n6k z&3pFi~qy!7+ckj|W8(I5f80G#u9zI9Zrg zoX`@sEs;)V%pD1eHeQ31MquU?I8{H_U%+zs%}a}6X&svWB*I0p(EKknb7A``G?%dS zdJSe|IBf*xhyrIY#68>V;G>ISaT!BeRMBk0ip;dz3es>^QT@)9uYcdKRx7H{!oj)k z-zxGun_iYT7dOuSv`@f!zZkZ2`lONwiz&E}eV3j!mIyn&xS=SFg=UnX8Co|LdfAWA zmRS#Hbe)5wuQ&ylv>#&J*!tzQL}mU&a85T>RvE4!$cuY~hK1f@_L^|@^N3@`^X1K} zzK$+&+4BP0*AivcIGbd9f!lB`6Jm}o=$U2c(2`!k%$XueP!b)u$Wn>eZ^^!kS}V%n z$>ll25~ko_z4NzTPsHKW(oj9VDC2%FC7<%x`i?Zza3*E3rOf)NTGJGag+rPuaH=8q65O!zO zoGB>_y1NH0i?C>#u7kas`CJYj0xsB>1)Q47c>6aM02l*s0Dri}fH^YWQG-HvT?CZB zm0GP+9~w#m?x~tW?5zBqz)yN&O46EDmKH<6nun{tp@3V)9IVt4fsZD!ERKx##He8Y zGYW2!DiETIP71mx=%(N{1z`$$DCni&4h459=%b*Yf_oGUP;j4uK?;T_7^Yx^f(H~l zq+pbSF$!b~9#Qa^g6r!43kW?0ZWyluNw9zqLnIMz5Ku%8zi+4qVE?9wl(|;mH9jlS X_+enqt?OBjH+5rCm>5L|$ diff --git a/src/main/resources/font_square.rft b/src/main/resources/font_square.rft index d037f05af1a2bc90db683e4f27011c7cf88fa048..17ecb485caab0dfdf0006be2b1ea36665762157e 100755 GIT binary patch literal 837 zcmXw$&ubGw6vw}fYddP8gY*zQ&Bj%?wbi8ls!}BzttRzHn%3Wh2Iom4;+zfsLi&?C7t~VOZwZ z1-J1^VAHo=!(2T-ht1|78(*|0u*G4`#Wt@|&lpEnwrX&PWzh{V*Q4xKBv|AV^vI>H z$tCpC9Lb+;(ji&Kb|erbi1z~rR{bCl^vPkp`|>9Iotk0Rdo%CJNNU6DwdfC$0+;2l zEVZv?24ui9?i=MC9pib{=a~c@V`?qAaSc~AT-9(*!*vZeG)!o?so|D}+Zyg@ zxU1owhWi>^bfkiww;m?Z76x4}87f%UM~~^@0oqd4C3=*HP6st}eHxFn>am6?4bvK) hXn3mO!X&+b!ChQ*X>tq~18AA6Rz2!1+S}Q8;6EIT#hCyA literal 746 zcmXYv-Afcv7{(uQi(>^lOHfNt&Y9iJENjQgOf=ldc1tU5EGwg0clxl*n$|7*5(YXK zUCf0<7eaT6AcWmnT}61YeOz?WMSnm&cvO@ZB$m2_-a}hn{L%vqlkNDMdN2Oip=+OjU zV=tqZ>N(0gCaO8d|BViPTb##<-;!_97dlaHKlNMEJe-tzF@R0_vpt0Y>LYl7Q-7;H>X#lzqCixISjO z*qiX@dcSMf7xG_%bZZNb=ZO15i!;h;E6ZFL2Z+KbfXmPDbQt!$92!#gySd4pexy?` z^BZ32*!rbx@bPIh7|(NqUq`Ub(j#AEf(8=Puss{&th)RlKG+qIg~LhT^E=O~oYE?XUf*JW^5`R^%CDBf3mp!iVne2M1ETwHMFkLIES Ot3PH6z(HgRFM$7#$g7|L