Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 1 addition & 20 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,28 +1,9 @@
/*

.DS_Store
*.dylib
*.so
*.dll
*.o


!.gitignore
!.github
!src
!libcocoainput
!README.MD
!build_lib_for_mac.sh
!build_lib_for_win.sh
!build_lib_for_x11.sh
!build_lib_all.sh
!build_cocoainput_all_platform.sh
!TODO.txt
!LICENSE

libcocoainput/build

!fabric
!forge
!1.12.2
!1.18.2
.gradle
14 changes: 14 additions & 0 deletions 1.18.2/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// 全サブプロジェクト共通の設定
subprojects {
apply plugin: 'java'

java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}

tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
}
1 change: 1 addition & 0 deletions 1.18.2/core/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
build
33 changes: 33 additions & 0 deletions 1.18.2/core/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
plugins {
id 'java'
}

group = 'com.example.yourmod'
version = '1.0.0'

repositories {
mavenCentral()
}

dependencies {
// coreで必要な依存関係のみ
compileOnly 'net.java.dev.jna:jna:5.13.0'
compileOnly 'net.java.dev.jna:jna-platform:5.13.0'
compileOnly 'commons-io:commons-io:2.11.0'
compileOnly 'org.apache.logging.log4j:log4j-core:2.25.3'
// TODO(kisaragi): 妥協しているがバージョンが違うと容易にスライドするのでMinecraft側ソースに責務を押し付けるべき
compileOnly 'org.lwjgl:lwjgl-glfw:3.2.3'
}

java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
// if it is present.
// If you remove this line, sources will not be generated.

sourceSets.main.java.srcDirs=['src/main/java']
sourceSets.main.resources.srcDirs=['src/main/resources']
withSourcesJar()
}
64 changes: 64 additions & 0 deletions 1.18.2/core/src/main/java/jp/axer/cocoainput/CocoaInput.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package jp.axer.cocoainput;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

import com.sun.jna.Platform;

import jp.axer.cocoainput.arch.darwin.DarwinController;
import jp.axer.cocoainput.arch.dummy.DummyController;
import jp.axer.cocoainput.arch.win.WinController;
import jp.axer.cocoainput.arch.x11.X11Controller;
import jp.axer.cocoainput.plugin.CocoaInputController;
import jp.axer.cocoainput.domain.*;

public class CocoaInput {
private static CocoaInputController controller;
// TODO(kisargi): あとで直す
// public static ConfigPack config = ConfigPack.defaultConfig;
private static SimpleLogger logger;

public CocoaInput(String loader, SimpleLogger logger, MinecraftRawWindowIdAccessor w, NativeLibraryLoader n, ScreenScaleFactorGetter s) {
logger.log("Modloader:" + loader);
try {
if (Platform.isMac()) {
CocoaInput.applyController(new DarwinController(n, logger, s));
} else if (Platform.isWindows()) {
CocoaInput.applyController(new WinController(w, n, s));
} else if (Platform.isX11()) {
CocoaInput.applyController(new X11Controller(w, n));
} else {
logger.log("CocoaInput cannot find appropriate Controller in running OS.");
CocoaInput.applyController(new DummyController(logger));
}
logger.log("CocoaInput has been initialized.");
} catch (Exception e) {
e.printStackTrace();
}
}

public static double getScreenScaledFactor(ScreenScaleFactorGetter getter) {
return getter.getFactor();
// return Minecraft.getInstance().getWindow().getGuiScale();
}

public static void applyController(CocoaInputController controller) throws IOException {
CocoaInput.controller = controller;
logger.log("CocoaInput is now using controller:" + controller.getClass().toString());
}

public static CocoaInputController getController() {
return CocoaInput.controller;
}

public void distributeScreen(WrapperChecker sc) {
if (CocoaInput.getController() != null) {
CocoaInput.getController().screenOpenNotify(sc);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.sun.jna.Callback;
import com.sun.jna.Pointer;
import jp.axer.cocoainput.util.ModLogger;
import jp.axer.cocoainput.domain.SimpleLogger;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;

Expand Down Expand Up @@ -33,7 +33,8 @@ public void invoke(String msg) {
};
public static Callback Func_debug = new Callback() {
public void invoke(String msg) {
if (ModLogger.debugMode) {
// TODO(kisaragi): make switchable?
if (true) {
LogManager.getLogger("CocoaInput:ObjC").log(Level.DEBUG, msg);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package jp.axer.cocoainput.arch.darwin;

import java.lang.reflect.Field;

import jp.axer.cocoainput.CocoaInput;
import jp.axer.cocoainput.domain.*;
import jp.axer.cocoainput.plugin.CocoaInputController;
import jp.axer.cocoainput.plugin.IMEOperator;
import jp.axer.cocoainput.plugin.IMEReceiver;

public class DarwinController implements CocoaInputController {
private SimpleLogger logger;
private ScreenScaleFactorGetter factorGetter;

public DarwinController(NativeLibraryLoader nativeLibraryLoader, SimpleLogger logger, ScreenScaleFactorGetter getter) throws Exception {
this.logger = logger;
this.factorGetter = getter;
nativeLibraryLoader.copyFrom("libcocoainput.dylib", "darwin/libcocoainput.dylib");
Handle.INSTANCE.initialize(CallbackFunction.Func_log, CallbackFunction.Func_error, CallbackFunction.Func_debug);
logger.log("DarwinController has been initialized.");
}

@Override
public IMEOperator generateIMEOperator(IMEReceiver ime) {
return new DarwinIMEOperator(ime, logger, factorGetter);
}


@Override
public void screenOpenNotify(WrapperChecker checker) {
if (checker.isAlreadyInitialized()) {
return;
}
/*
try {
Field wrapper = gui.getClass().getField("wrapper");
wrapper.setAccessible(true);
if (wrapper.get(gui) instanceof IMEReceiver)
return;
} catch (Exception e) {
/* relax */ //}
Handle.INSTANCE.refreshInstance();//GUIの切り替えでIMの使用をoffにする

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@
import jp.axer.cocoainput.arch.darwin.CallbackFunction.Func_setMarkedText;
import jp.axer.cocoainput.plugin.IMEOperator;
import jp.axer.cocoainput.plugin.IMEReceiver;
import jp.axer.cocoainput.util.ModLogger;
import jp.axer.cocoainput.util.Rect;
import jp.axer.cocoainput.domain.*;

import java.util.UUID;

Expand All @@ -19,23 +18,27 @@ public class DarwinIMEOperator implements IMEOperator {
Func_insertText insertText_p;
Func_setMarkedText setMarkedText_p;
Func_firstRectForCharacterRange firstRectForCharacterRange_p;
SimpleLogger logger;
ScreenScaleFactorGetter scaler;
boolean isFocused = false;

public DarwinIMEOperator(IMEReceiver field) {
public DarwinIMEOperator(IMEReceiver field, SimpleLogger logger, ScreenScaleFactorGetter scaler) {
this.owner = field;
this.logger = logger;
this.scaler = scaler;
uuid = UUID.randomUUID().toString();
insertText_p = new Func_insertText() {
@Override
public void invoke(String str, int position, int length) {
ModLogger.debug("Textfield " + uuid + " received inserted text.");
logger.debug("Textfield " + uuid + " received inserted text.");
owner.insertText(str, position, length);
}
};
setMarkedText_p = new Func_setMarkedText() {
@Override
public void invoke(String str, int position1, int length1,
int position2, int length2) {
ModLogger.debug("MarkedText changed at " + uuid + ".");
logger.debug("MarkedText changed at " + uuid + ".");
owner.setMarkedText(str, position1, length1, position2, length2);
;
}
Expand All @@ -45,15 +48,15 @@ public void invoke(String str, int position1, int length1,

@Override
public Pointer invoke() {
ModLogger.debug("Called to determine where to draw.");
logger.debug("Called to determine where to draw.");
Rect point = owner.getRect();
float[] buff;
if (point == null) {
buff = new float[]{0, 0, 0, 0};
} else {
buff = new float[]{point.getX(), point.getY(), point.getWidth(), point.getHeight()};
}
double factor = CocoaInput.getScreenScaledFactor();
double factor = scaler.getFactor();
buff[0] *= factor;
buff[1] *= factor;
buff[2] *= factor;
Expand All @@ -65,7 +68,7 @@ public Pointer invoke() {
}

};
ModLogger.log("IMEOperator addInstance: " + uuid);
logger.log("IMEOperator addInstance: " + uuid);
Handle.INSTANCE.addInstance(uuid, insertText_p, setMarkedText_p, firstRectForCharacterRange_p);
}

Expand All @@ -79,7 +82,7 @@ public void removeInstance() {

public void setFocused(boolean yn) {
if (yn != isFocused) {
ModLogger.log("IMEOperator.setFocused: " + (yn ? "true" : "false"));
logger.log("IMEOperator.setFocused: " + (yn ? "true" : "false"));
Handle.INSTANCE.setIfReceiveEvent(uuid, yn ? 1 : 0);
isFocused = yn;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,11 @@
import jp.axer.cocoainput.plugin.CocoaInputController;
import jp.axer.cocoainput.plugin.IMEOperator;
import jp.axer.cocoainput.plugin.IMEReceiver;
import jp.axer.cocoainput.util.ModLogger;
import net.minecraft.client.gui.screens.Screen;
import jp.axer.cocoainput.domain.*;

public class DummyController implements CocoaInputController{
public DummyController() {
ModLogger.log("This is a dummy controller.");
public DummyController(SimpleLogger logger) {
logger.log("This is a dummy controller.");
}

@Override
Expand All @@ -17,7 +16,7 @@ public IMEOperator generateIMEOperator(IMEReceiver ime) {
}

@Override
public void screenOpenNotify(Screen sc) {
public void screenOpenNotify(WrapperChecker sc) {
// TODO 自動生成されたメソッド・スタブ

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,10 @@
import jp.axer.cocoainput.arch.win.Handle.DoneCallback;
import jp.axer.cocoainput.arch.win.Handle.PreeditCallback;
import jp.axer.cocoainput.arch.win.Handle.RectCallback;
import jp.axer.cocoainput.domain.*;
import jp.axer.cocoainput.plugin.CocoaInputController;
import jp.axer.cocoainput.plugin.IMEOperator;
import jp.axer.cocoainput.plugin.IMEReceiver;
import jp.axer.cocoainput.util.Rect;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.Screen;

public class WinController implements CocoaInputController {

Expand Down Expand Up @@ -51,7 +49,7 @@ public int invoke(Pointer ret) {
} else {
buff = new float[]{point.getX(), point.getY(), point.getWidth(), point.getHeight()};
}
double factor = CocoaInput.getScreenScaledFactor();
double factor = scaler.getFactor();
buff[0] *= factor;
buff[1] *= factor;
buff[2] *= factor;
Expand All @@ -65,14 +63,17 @@ public int invoke(Pointer ret) {

};

public WinController() {
ScreenScaleFactorGetter scaler;

public WinController(MinecraftRawWindowIdAccessor rawWindowIdAccessor, NativeLibraryLoader loader, ScreenScaleFactorGetter s) {
this.scaler = s;
Logger.log("This is Windows Controller");
try {
CocoaInput.copyLibrary("libwincocoainput.dll", "win/libwincocoainput.dll");
loader.copyFrom("libwincocoainput.dll", "win/libwincocoainput.dll");
} catch (IOException e) {
e.printStackTrace();
}
Handle.INSTANCE.initialize(org.lwjgl.glfw.GLFWNativeWin32.glfwGetWin32Window(Minecraft.getInstance().getWindow().getWindow()), pc, dc,rc, Logger.clangLog, Logger.clangError, Logger.clangDebug);
Handle.INSTANCE.initialize(org.lwjgl.glfw.GLFWNativeWin32.glfwGetWin32Window(rawWindowIdAccessor.getRawId()), pc, dc,rc, Logger.clangLog, Logger.clangError, Logger.clangDebug);

}

Expand All @@ -82,14 +83,18 @@ public IMEOperator generateIMEOperator(IMEReceiver arg0) {
return new WinIMEOperator(arg0);
}
@Override
public void screenOpenNotify(Screen gui) {
public void screenOpenNotify(WrapperChecker checker) {
if (checker.isAlreadyInitialized()) {
return;
}
/*
try {
Field wrapper = gui.getClass().getField("wrapper");
wrapper.setAccessible(true);
if (wrapper.get(gui) instanceof IMEReceiver)
return;
} catch (Exception e) {
/* relax */}
/* relax */ //}
if (WinController.focusedOperator != null) {
//WinIMEOperator old=WinController.focusedOperator;
//WinController.focusedOperator=null;
Expand Down
Loading
Loading