Skip to content

Commit

Permalink
Add Langauge Indicator
Browse files Browse the repository at this point in the history
  • Loading branch information
LemonCaramel committed Jan 29, 2024
1 parent 354473d commit ac907c8
Show file tree
Hide file tree
Showing 30 changed files with 488 additions and 20 deletions.
2 changes: 1 addition & 1 deletion common/build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
repositories {
maven { url "https://maven.terraformersmc.com/" }
maven { url = "https://api.modrinth.com/maven" }
maven { url "https://api.modrinth.com/maven" }
}

dependencies {
Expand Down
2 changes: 0 additions & 2 deletions common/src/main/java/moe/caramel/chat/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,7 @@
*/
public final class Main {

public static final String MOD_ID = "caramelchat";
static { Main.instance = new Main(); }

public static final boolean DEBUG = false;

private static Main instance;
Expand Down
77 changes: 77 additions & 0 deletions common/src/main/java/moe/caramel/chat/PlatformProvider.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package moe.caramel.chat;

import moe.caramel.chat.util.ModLogger;

/**
* Platform Provider Interface
*/
public abstract class PlatformProvider {

/**
* Mod id.
*/
public static final String MOD_ID = "caramelchat";

/**
* Default Provider.
*/
public static final PlatformProvider DEFAULT = new PlatformProvider() {
@Override
public String getVersion() {
return "UNKNOWN";
}

@Override
public String getPlatformName() {
return "UNKNOWN";
}
};

// ================================

private static PlatformProvider provider = PlatformProvider.DEFAULT;

/**
* Gets the Platform provider.
*
* @return provider
*/
public static PlatformProvider getProvider() {
return provider;
}

/**
* Sets the Platform provider.
*
* @param provider provider
*/
public static void setProvider(final PlatformProvider provider) {
if (PlatformProvider.provider == PlatformProvider.DEFAULT) {
PlatformProvider.provider = provider;
ModLogger.log("The platform provider has been loaded: {}", provider);
} else {
throw new UnsupportedOperationException();
}
}

// ================================

/**
* Gets the current mod version.
*
* @return mod version
*/
public abstract String getVersion();

/**
* Gets the current platform name.
*
* @return platform name
*/
public abstract String getPlatformName();

@Override
public String toString() {
return "(" + getPlatformName() + " / " + getVersion() + ")";
}
}
13 changes: 12 additions & 1 deletion common/src/main/java/moe/caramel/chat/driver/IController.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import moe.caramel.chat.util.ModLogger;
import moe.caramel.chat.wrapper.AbstractIMEWrapper;
import net.minecraft.client.gui.screens.Screen;
import org.jetbrains.annotations.Nullable;
import org.lwjgl.glfw.GLFW;

/**
Expand Down Expand Up @@ -36,6 +37,16 @@ public interface IController {
*/
void setFocus(final boolean focus);

/**
* Gets the current keyboard status.
*
* @return keyboard status (if {@code null}, OS isn't supported)
*/
@Nullable
default KeyboardStatus getKeyboardStatus() {
return null;
}

/**
* Gets the controller.
*
Expand All @@ -58,6 +69,6 @@ static IController getController() {
} catch (final Exception exception) {
ModLogger.error("Error while loading the CocoaInput Driver.", exception);
}
return new UnknownController();
return UnknownController.INSTANCE;
}
}
7 changes: 7 additions & 0 deletions common/src/main/java/moe/caramel/chat/driver/IOperator.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,13 @@
*/
public interface IOperator {

/**
* Gets the IME controller.
*
* @return controller
*/
IController getController();

/**
* Set whether to focus or not. (Wrapper)
*
Expand Down
54 changes: 54 additions & 0 deletions common/src/main/java/moe/caramel/chat/driver/KeyboardStatus.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package moe.caramel.chat.driver;

/**
* Gets the current keyboard status.
*
* @param language current ime language
* @param useNative whether to using the native language
*/
public record KeyboardStatus(Language language, boolean useNative) {

@Override
public Language language() {
return useNative() ? language : Language.ENGLISH;
}

/**
* Gets the display to use for language change notifications.
*
* @return display
*/
public String display() {
return language().display;
}

/**
* Gets the indicator X offset.
*
* @return X offset
*/
public float offset() {
return language().offset;
}

/**
* Display List
*/
public enum Language {

ENGLISH("ENG", 0.5f),
KOREAN("한", 0.0f),
JAPANESE("あ", 0.5f),
CHINESE_SIMPLIFIED("中", 0.5f),
CHINESE_TRADITIONAL("中", 0.5f),
OTHER("Native", 0.5f);

private final String display;
private final float offset;

Language(final String display, final float offset) {
this.display = display;
this.offset = offset;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package moe.caramel.chat.driver.arch.darwin;

import com.mojang.blaze3d.platform.Window;
import moe.caramel.chat.driver.IController;
import moe.caramel.chat.driver.IOperator;
import moe.caramel.chat.util.ModLogger;
import moe.caramel.chat.wrapper.AbstractIMEWrapper;
Expand Down Expand Up @@ -55,6 +56,11 @@ public DarwinOperator(final DarwinController controller, final AbstractIMEWrappe
);
}

@Override
public IController getController() {
return controller;
}

@Override
public void setFocused(final boolean focus) {
if (focus != this.nowFocused) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@
*/
public final class UnknownController implements IController {

public UnknownController() {
public static final IController INSTANCE = new UnknownController();

private UnknownController() {
ModLogger.log("[Native] Load the Unknown Controller.");
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
package moe.caramel.chat.driver.arch.unknown;

import moe.caramel.chat.driver.IController;
import moe.caramel.chat.driver.IOperator;

/**
* Unknown IME Operator
*/
public final class UnknownOperator implements IOperator {

@Override
public IController getController() {
return UnknownController.INSTANCE;
}

@Override
public void setFocused(final boolean focus) {
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,28 @@
import com.sun.jna.Library;
import com.sun.jna.Pointer;
import com.sun.jna.WString;
import moe.caramel.chat.driver.KeyboardStatus.Language;
import java.util.Map;

/**
* CocoaInput Windows Driver
*/
public interface Driver_Win extends Library {

int LAYOUT_CHINESE_TRADITIONAL = 0x0404;
int LAYOUT_JAPANESE = 0x0411;
int LAYOUT_KOREAN = 0x0412;
int LAYOUT_CHINESE_SIMPLIFIED = 0x0804;

Map<Integer, Language> LAYOUT_MAP = Map.of(
LAYOUT_KOREAN, Language.KOREAN,
LAYOUT_JAPANESE, Language.JAPANESE,
LAYOUT_CHINESE_SIMPLIFIED, Language.CHINESE_SIMPLIFIED,
LAYOUT_CHINESE_TRADITIONAL, Language.CHINESE_TRADITIONAL
);

// ================================

/**
* Initialize CocoaInput Windows Driver.
*
Expand Down Expand Up @@ -38,6 +54,20 @@ void initialize(
*/
void set_focus(final int flag);

/**
* Gets the current keyboard layout.
*
* @return current keyboard layout
*/
int getKeyboardLayout();

/**
* Gets the current IME status.
*
* @return IME status. (Native if 1)
*/
int getStatus();

// ================================

interface PreeditCallback extends Callback {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package moe.caramel.chat.driver.arch.win;

import static moe.caramel.chat.driver.arch.win.Driver_Win.LAYOUT_MAP;
import com.sun.jna.Native;
import moe.caramel.chat.Main;
import moe.caramel.chat.controller.ScreenController;
import moe.caramel.chat.driver.IController;
import moe.caramel.chat.driver.IOperator;
import moe.caramel.chat.driver.KeyboardStatus;
import moe.caramel.chat.driver.KeyboardStatus.Language;
import moe.caramel.chat.util.ModLogger;
import moe.caramel.chat.wrapper.AbstractIMEWrapper;
import net.minecraft.client.Minecraft;
Expand Down Expand Up @@ -89,4 +92,12 @@ public void changeFocusedScreen(final Screen screen) {
public void setFocus(final boolean focus) {
this.driver.set_focus(focus ? 1 : 0);
}

@Override
public KeyboardStatus getKeyboardStatus() {
return new KeyboardStatus(
LAYOUT_MAP.getOrDefault(driver.getKeyboardLayout(), Language.OTHER),
(driver.getStatus() != 0)
);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package moe.caramel.chat.driver.arch.win;

import moe.caramel.chat.driver.IController;
import moe.caramel.chat.driver.IOperator;
import moe.caramel.chat.util.ModLogger;
import moe.caramel.chat.wrapper.AbstractIMEWrapper;
Expand Down Expand Up @@ -27,6 +28,11 @@ public AbstractIMEWrapper getWrapper() {
return wrapper;
}

@Override
public IController getController() {
return controller;
}

@Override
public void setFocused(final boolean focus) {
if (focus == this.nowFocused) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package moe.caramel.chat.driver.arch.x11;

import moe.caramel.chat.driver.IController;
import moe.caramel.chat.driver.IOperator;
import moe.caramel.chat.util.ModLogger;
import moe.caramel.chat.wrapper.AbstractIMEWrapper;
Expand Down Expand Up @@ -27,6 +28,11 @@ public AbstractIMEWrapper getWrapper() {
return wrapper;
}

@Override
public IController getController() {
return controller;
}

@Override
public void setFocused(final boolean focus) {
if (focus == this.nowFocused) {
Expand Down
Loading

0 comments on commit ac907c8

Please sign in to comment.